0

在我的服务器上是一个 weblogic 集群 ejb2 应用程序。数据库中有这张表,其他用户将同时创建、更新和删除。

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

想到了Subversion全局修订号的想法,但是不知道怎么实现,因为应用是在集群上的。

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

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

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

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

4

1 回答 1

1

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

使用唯一标识符标记源。每次更新源数据行时都会用唯一值进行标记。在更新点检查标记,如果有与您最初读入的值不同的值,那么您就知道源已经更新。

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

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

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

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

于 2009-10-28T02:25:23.120 回答