Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/360.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在共享文档编辑环境中实现锁定。_Java_Web Applications_Locking - Fatal编程技术网

Java 在共享文档编辑环境中实现锁定。

Java 在共享文档编辑环境中实现锁定。,java,web-applications,locking,Java,Web Applications,Locking,我已经实现了一个显示文档元数据的网格,用户可以通过右键单击来编辑文档。我想为此实现一个锁定机制。当一个用户打开编辑器时,锁定文档的最佳方式是什么?这些文档确实驻留在数据库中 如果文档位于数据库中,则数据库本身应支持防止不一致的访问 但是,如果编辑器在文件编辑期间不保持数据库事务/连接打开,并且java应用程序运行客户端而不是服务器端(因为您可以简单地在编辑器中为服务器端的并发性创建锁),然后事情变得有点棘手,我还没有足够的数据库经验来说明如何解决这个问题,因为在数据库中使用一个字段来指示编辑状

我已经实现了一个显示文档元数据的网格,用户可以通过右键单击来编辑文档。我想为此实现一个锁定机制。当一个用户打开编辑器时,锁定文档的最佳方式是什么?这些文档确实驻留在数据库中

如果文档位于数据库中,则数据库本身应支持防止不一致的访问

但是,如果编辑器在文件编辑期间不保持数据库事务/连接打开,并且java应用程序运行客户端而不是服务器端(因为您可以简单地在编辑器中为服务器端的并发性创建锁),然后事情变得有点棘手,我还没有足够的数据库经验来说明如何解决这个问题,因为在数据库中使用一个字段来指示编辑状态会在这种类型的设置中出现并发问题(除非数据库本身支持锁定记录,但这取决于正在使用的DB引擎)


哦,一种可能是使用文件修改时间(在数据库中有一个时间戳字段,并在每次修改文件时进行更新),在检查时间戳和确定文件是否在用户试图保存上次访问后被另一用户修改的同时,保留一个禁止脏读的允许事务;如果是这样,它不会将文件保存到数据库中,而是会提醒用户服务器端文件已更改,并询问用户是否希望查看更改(类似于版本控制系统的工作方式)。通过禁止所有此类事务的脏读,可以防止其他用户在第一个事务打开时更改文件的记录(要将记录标记为“脏”,您可以使用一个虚拟字段,在每个事务开始时使用一些随机值更新该字段)。(注意:aglassman的回答与此类似。)

如果文档在数据库中,数据库本身应该支持防止不一致的访问

但是,如果编辑器在文件编辑期间不保持数据库事务/连接打开,并且java应用程序运行客户端而不是服务器端(因为您可以简单地在编辑器中为服务器端的并发性创建锁),然后事情变得有点棘手,我还没有足够的数据库经验来说明如何解决这个问题,因为在数据库中使用一个字段来指示编辑状态会在这种类型的设置中出现并发问题(除非数据库本身支持锁定记录,但这取决于正在使用的DB引擎)


哦,一种可能是使用文件修改时间(在数据库中有一个时间戳字段,并在每次修改文件时进行更新),在检查时间戳和确定文件是否在用户试图保存上次访问后被另一用户修改的同时,保留一个禁止脏读的允许事务;如果是这样,它不会将文件保存到数据库中,而是会提醒用户服务器端文件已更改,并询问用户是否希望查看更改(类似于版本控制系统的工作方式)。通过禁止所有此类事务的脏读,可以防止其他用户在第一个事务打开时更改文件的记录(要将记录标记为“脏”,您可以使用一个虚拟字段,在每个事务开始时使用一些随机值更新该字段)。(注意:aglassman的回答与此类似。)

只需添加一列,指定当前签出文件的人。当一个人试图签出文件时,如果设置了该列,他们将无法签出该文件,并将被通知是谁签出了该文件。除非一个文档每秒有数千个请求,否则此方法可以正常工作。

只需添加一列,指定当前签出该文件的人。当一个人试图签出文件时,如果设置了该列,他们将无法签出该文件,并将被通知是谁签出了该文件。除非您每秒有数千个对单个文档的请求,否则此方法可以正常工作。

此外,还可以添加一列,说明谁签出了文件,并使用该列阻止访问。您可以为请求锁的时间添加时间戳


这样,如果有人请求它,并且锁已经使用了30分钟,并且没有做任何更改,那么他们可以使用锁。(如果原始用户没有优雅地退出或其他什么)。

此外,还添加了一列,说明谁签出了文件,并使用该列阻止访问。您可以为请求锁的时间添加时间戳


这样,如果有人请求它,并且锁已经使用了30分钟,并且没有做任何更改,那么他们可以使用锁。(如果原始用户没有优雅地退出或做其他事情)。

当最初签出的用户从未保存或优雅地终止其会话时会发生什么?您将如何以及在什么条件下取消设置此字段,使其对其他人可用?当最初签出此字段的用户从未保存或正常终止其会话时会发生什么情况?您将如何以及在什么条件下取消设置此字段,以便其他人可以使用它?