丢失更新问题

时间:2009-10-26 13:23:28

标签: weblogic global

我的服务器上的

是一个weblogic集群ejb2应用程序。数据库中有此表,其他用户将同时创建,更新和删除。

在我的客户端上,机器是一个富客户端Java应用程序。如何发送更改的增量更新,但仍然保持一致的始终正确的表视图? (因此没有丢失更新,如果可以检测到丢失的更新,则需要恢复机制来重新同步视图)

我想到了Subversion全局版本号的想法,但我不知道如何实现它,因为应用程序在群集上。

关于如何去做的任何想法?

您的应用包含哪种EJB?
无状态会话bean

其他用户如何访问此表?
通过无状态会话bean与jdbc连接的apache httpclient到JSP

该更新会丢失在哪里?
每个客户端将在启动时执行整个表的拉动。增量信息的后续更新将推送到富客户端。当客户端A试图提取信息时,会发生丢失的更新,客户端B会编辑该表。由于客户端B编辑由增量信息组成,它将被推送到客户端A,它可能会更快到达。客户A没有收到完整的表,因此丢弃增量信息。

1 个答案:

答案 0 :(得分:1)

我仍然不确定,但您可能希望使用optimistic locking来实施concurrency control(有关其他策略,请参阅整篇文章)。乐观锁定很容易实现。一种选择是:

  

使用唯一标识符标记来源。每次更新时,源数据行都标有唯一值。在更新时,将检查标记,如果存在与您最初读取的值不同的值,则表示已对源进行了更新。

使用增量计数器是可能的并发标记之一。我们的想法是为您的实体添加一个版本号,并在每次保存时增加它。

图片您读取了VERSION_NUM = n的记录。如果以下更新请求失败:

UPDATE T 
SET VERSION_NUM = VERSION_NUM + 1 [,column_name = value ...] 
WHERE VERSION_NUM = n [AND ...]

然后有人在您编辑记录时已经更新了记录。