【发布时间】:2011-08-18 14:59:40
【问题描述】:
我们在基于 JPA(Hibernate) 的应用程序中使用 Infinispan(使用 JGroups 集群)作为我们的二级缓存。当数据库操作失败时,我们会看到二级缓存已过时。例如:
1) 尝试使用登录名“joe”创建用户。 2) 调用persist(user); 3) 由于数据库唯一性约束,持久化失败。 4) 在 login=joe 上通过 id 进行查找(假设 login 是 PK)。 5) Hibernate 从 Infinispan 缓存返回 joe 用户,即使数据库没有它。
在这种情况下,配置 XA 事务并让 Infinispan 参与 XA 似乎有点矫枉过正。 XA 是解决这个问题的唯一方法吗?
【问题讨论】:
-
要结束这个循环,我必须启用 XA(使用 Atomikos)以使缓存保持同步。 Manik 的解决方案不起作用。
标签: hibernate second-level-cache infinispan