1

Terracotta Ehcache (オープン ソース)を使用して、分散トランザクション メモリのベンチマークを実行しようとしています。JTAでの動作を理解するのに問題があります。コードでは、分散トランザクションに関心のあるキャッシュが、JTA を使用して後で 2 フェーズ コミットを実行するリソースとして参加することがわかりました。

私の質問は、1 つのキャッシュのみがリソースとして登録されている場合、JTA が分散設定で他のすべてのキャッシュをアトミックに更新するにはどうすればよいですか? 他のキャッシュ参照を JTA に渡さないため、アトミックな更新は行われません。ここにいくつかの文字列が欠けているように感じます。誰かがそれがどのように機能するか説明できますか? 私も J2EE を初めて使用します。JTA への他のキャッシュの自動参照渡しを可能にする J2EE の概念が欠けていますか?

4

3 に答える 3

4

Ehcache がそのように構成されている場合 (transactionalMode="xa"またはtransactionalMode="xa_strict")、完全な XAResource として機能して JTA トランザクション (グローバル トランザクション) に参加できます。これは、トランザクション マネージャーによって (アプリケーション サーバーまたはスタンドアロン製品から) 制御されます。この場合、Ehcache 自体がトランザクション マネージャへの登録を処理します。また、完全な XAResource として、複数のキャッシュを登録して、トランザクションの一部にすることができます。

強力なクラスター全体の一貫性は非常に高くつきます (無料のランチはありません)。ロックと、待機、確認などを含む同期 (ネットワーク) 操作を使用して要約します。

詳細については、Ehcache ドキュメント: Transactions in Ehcacheを参照することをお勧めします。

于 2011-11-23T18:42:04.673 に答える
1

JTA トランザクション内で構成および更新された各キャッシュはtransactionalMode="xa_strict"、それ自体を XAResource としてトランザクション マネージャーに登録します。これはすべて自動化されており、エンド ユーザーに対して透過的です。このメカニズムを開始するために特別なことを行う必要はまったくありません。JTA beg 内でキャッシュを使用するだけです。

JTA トランザクション コンテキストで他の非トランザクション キャッシュにもアクセスした場合、それらはトランザクションの一部ではなく、変更するとすぐに更新されます。

于 2011-11-25T11:37:50.087 に答える
0

xa_strict を試しましたが、XAResource の自動登録はないようですか? ただし、プレーンxaへの切り替えは機能します...

于 2014-10-02T10:29:59.147 に答える