JTAとローカルトランザクションの違いは何ですか?
JTAをいつ使用するか、いつローカルトランザクションを使用するかを示す例は素晴らしいでしょう。
JTAとローカルトランザクションの違いは何ですか?
JTAをいつ使用するか、いつローカルトランザクションを使用するかを示す例は素晴らしいでしょう。
回答:
JTA
Javaでトランザクションを管理するための一般的なAPIです。これにより、リソースに依存しない方法でトランザクションを開始、コミット、およびロールバックできます。トランザクションステータスは通常、TLS(Thread Local Storage)に格納され、明示的なコンテキストオブジェクトを渡す必要なしに、コールスタック内の他のメソッドに伝播できます。トランザクションリソースは、進行中のトランザクションに参加できます。このようなトランザクションに参加しているリソースが複数ある場合、そのうちの少なくとも1つはいわゆるXAリソースである必要があります。
Aresource local transaction
は、独自の特定のAPIを使用して特定の単一のリソースを使用して行うトランザクションです。このようなトランザクションは通常、コールスタック内の他のメソッドに伝播せず、明示的なコンテキストオブジェクトを渡す必要があります。リソースのローカルトランザクションの大部分では、同じトランザクションに複数のリソースを参加させることはできません。
たとえば、JavaSEの低レベルJDBCコードでリソースローカルトランザクションを使用します。ここで、コンテキストオブジェクトはのインスタンスで表されますjava.sql.Connection
。リソースローカルトランザクションの他の例は、2002年頃にエンタープライズアプリケーションを作成する開発者です。トランザクションマネージャー(JTAで使用)は、その時代に高価でクローズドソースでセットアップが複雑だったため、リソースローカルバリアントをより安価で簡単に入手できました。
基本的に他のすべてのシナリオでJTAトランザクションを使用します。TomEE(25MB)やGlassFish(35MB)のような非常にシンプルで小型の無料のオープンソースサーバーは、すぐにJTAをサポートします。セットアップするものは何もなく、それらはただ機能します。
最後に、EJBやSpringなどのテクノロジーは、を提供することでJTAをさらに使いやすくしますdeclarative transactions
。ほとんどの場合、より簡単でクリーンでエラーが発生しにくいため、これらを使用することをお勧めします。EJBとSpringはどちらも、内部でJTAを使用できます。
J2EEアプリケーションには、2つの仕様
JTA ---> Java Transaction API.highe-level実装によるサポートが含まれており、常に
JTS ---> Java TransactionServiceが有効になっています。