web-dev-qa-db-ja.com

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

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

JTAを使用するタイミングとローカルトランザクションを使用するタイミングを示す例は素晴らしいでしょう。

79
user1127214

JTAは、Javaでトランザクションを管理するための一般的なAPIです。リソースに依存しない方法でトランザクションを開始、コミット、およびロールバックできます。通常、トランザクションステータスはTLS(スレッドローカルストレージ)に格納され、明示的なコンテキストオブジェクトを渡す必要なく、コールスタック内の他のメソッドに伝達できます。トランザクションリソースは、進行中のトランザクションに参加できます。そのようなトランザクションに参加しているリソースが複数ある場合、それらの少なくとも1つはいわゆるXAリソースである必要があります。

resource local transactionは、独自の特定のAPIを使用して特定の単一のリソースを使用するトランザクションです。このようなトランザクションは通常、コールスタック内の他のメソッドに伝達されないため、明示的なコンテキストオブジェクトを渡す必要があります。リソースのローカルトランザクションの大部分では、同じトランザクションに複数のリソースを参加させることはできません。

Java SE。の低レベルJDBCコードでリソースローカルトランザクションを使用します。ここでは、コンテキストオブジェクトはJava.sql.Connectionのインスタンスで表されます。リソースローカルトランザクションの他の例トランザクションマネージャー(JTAで使用)は、その時代に高価で、クローズドソースであり、セットアップが複雑だったため、人々は安価で簡単にリソースローカルバリアントを入手しました。

基本的に他のすべてのシナリオでJTAトランザクションを使用します。 TomEE(25MB)やGlassFish(35MB)などの非常にシンプルで小型の無料のオープンソースサーバーには、すぐにJTAサポートがあります。セットアップするものは何もありません。

最後に、EJBやSpringなどのテクノロジーは、declarative transactionsを提供することにより、JTAでも使いやすくします。ほとんどの場合、簡単で、クリーンで、エラーが発生しにくいため、これらを使用することをお勧めします。 EJBとSpringの両方がJTAを内部で使用できます。

131
Arjan Tijms

Transaction-typeは、Java SEアプリケーションの場合は「RESOURCE_LOCAL」に設定し、Java EEアプリケーションの場合は「JTA」に設定します。 TomcatにデプロイされたWebアプリケーションですが、glassfish環境でアプリケーションを実行すると問題が発生する場合があります。

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

3
Mayank Jalotra

Java Transaction API(JTA)は、Java Enterprise Edition(Java EE)APIの1つであり、分散トランザクションを= Java環境。

1
Nitin