我们正在使用带有TopLink和Oracle数据库的集群Glassfish 2.x. JTA是持久性单元的指定事务类型,我们使用默认缓存。
现在我们已经看到了一些我无法理解的行为:在GF节点1上执行实体更新,5秒后,在节点2上执行同一实体的另一个更新。但是在查看时数据库,似乎更新是以错误的顺序应用的。这甚至可能吗?根据我的理解,应该是在每个WS方法结束后,应该对数据库执行提交。因此,5秒延迟应该没有办法,这两个操作混淆了。
如果重要,则更新位于同一列,仅包含该列。因此,如果客户端在第二次调用期间确实看到了第一次更新的更改,那么它应该不重要,因为他只使用实体的主键和新的列值来调用WS方法。在该方法中,获取实体,应用新列值并调用entityManager.merge()。所以我不怀疑缓存是一个问题。
两个WS方法调用/更新都没有抛出异常。我无法检查数据库日志,因为它超出了我的控制范围。行为偶尔发生一次。 有没有人知道我们正在经历的行为可能是什么原因?是否真的在执行提交时记录了某个地方?谢谢!