JTAとローカルトランザクションの違いは何ですか?


84

JTAとローカルトランザクションの違いは何ですか?

JTAをいつ使用するか、いつローカルトランザクションを使用するかを示す例は素晴らしいでしょう。

回答:


136

JTAJavaでトランザクションを管理するための一般的な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を使用できます。


5
JTAの使用(EJB、Springなど)の履歴と開発を説明するための+1。
マルコ

4

Transaction-typeは、Java SEアプリケーションの場合は「RESOURCE_LOCAL」に、JavaEEアプリケーションの場合は「JTA」に設定する必要があります。「RESOURCE_LOCAL」は、Tomcatにデプロイされた一部のWebアプリケーションでは正常に機能する場合がありますが、Glassfish環境でアプリケーションを実行すると問題が発生する場合があります。

分散トランザクションで作業している場合は、トランザクションマネージャーとして「JTA」を使用する必要があります。


1

Java Transaction API(JTA)は、Java Enterprise Edition(Java EE)APIの1つであり、Java環境内の複数のXAリソース間で分散トランザクションを実行できます。


-1

J2EEアプリケーションには、2つの仕様
JTA ---> Java Transaction API.highe-level実装によるサポートが含まれており、常に
JTS ---> Java TransactionServiceが有効になっています。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.