JPA (Hibernate) ベースのアプリケーションの 2 番目のレベルのキャッシュとして Infinispan (JGroups を使用してクラスター化) を使用しています。データベース操作が失敗すると、レベル 2 キャッシュが古くなっていることがわかります。例えば:
1) ログイン「joe」でユーザーの作成を試みます。2) persist(user) を呼び出します。3) データベースの一意性制約により、永続化が失敗します。4) login=joe で ID による検索を実行します (login が PK であると仮定します)。5) Hibernate は、データベースにない場合でも、Infinispan キャッシュから joe ユーザーを返します。
XA トランザクションを構成し、Infinispan を XA に参加させることは、この状況ではやり過ぎのように思えます。XA がこれに対処する唯一の方法ですか?