TopLinkとOracleデータベースを備えたクラスター化されたGlassfish 2.xを使用しています。JTA は持続性ユニットの指定されたトランザクション タイプであり、デフォルトのキャッシングを使用します。
ここで、私にはよく理解できない動作が見られました: GF ノード 1 でエンティティの更新が実行され、5 秒後に同じエンティティの別の更新がノード 2 で実行されます。しかし、データベースを調べると、アップデートが間違った順序で適用されたようです。これは可能ですか?私の理解では、WS メソッドが終了するたびに、データベースに対してコミットを実行する必要があります。したがって、これら 2 つの操作が混同されて 5 秒の遅延が発生することはありません。
更新は同じ列にあり、それが重要な場合はその列のみです。したがって、クライアントがエンティティの主キーと新しい列の値を使用して WS メソッドを呼び出すだけなので、クライアントが 2 回目の呼び出し中に最初の更新からの変更を確認したかどうかは問題ではありません。メソッド内で、エンティティがフェッチされ、新しい列の値が適用され、entityManager.merge() が呼び出されます。したがって、ここでキャッシングが問題になるとは思いません。
両方の WS メソッドの呼び出し/更新は例外をスローしませんでした。DB ログは制御できないため、確認できません。この動作は、ときどき発生します。私たちが経験している行動の理由が何であるか、誰にも手がかりがありますか? コミットが実際に実行されているときにどこかに文書化されていますか? ありがとう!