2009-10-26 59 views
0

在我的服务器上是一个weblogic集群ejb2应用程序。在DB中有这个表,其他用户将同时创建,更新和删除。丢失更新问题

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

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

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

您的应用程序包含哪些类型的EJB?
无状态会话bean

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

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

+0

您的应用程序包含哪些类型的EJB?实体豆?其他用户如何访问此表?您的富客户端应用程序有什么作用?该更新在哪里丢失?我其实并没有得到全部问题,我想知道是否指的是用于乐观并发检查的“版本号”模式。你能详细说一下吗? – 2009-10-26 16:59:16

+0

它听起来像版本号码模式... – zeroin23 2009-10-27 14:57:34

回答

1

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

用唯一标识符标记源。每次更新源数据行时都会标记一个唯一值。在更新的时候,标记被检查,如果有一个不同于你最初读入的值,那么你知道源已经有了一个更新。

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

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

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

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