web-dev-qa-db-ja.com

どのトランザクションマネージャーを使用する必要がありますか(JTAとJPA)。

春4のアプリケーションがあります。現時点では、JpatransactionManagerを使用しています。

<bean id="transactionManager" class="org.springframework.orm.jpa.JpaTransactionManager">
        <property name="entityManagerFactory" ref="entityManagerFactory" />
</bean>

トランザクションマネージャーの選び方を教えてください。

たとえば、jtaトランザクションマネージャーをいつ使用し、いつjpaを使用すればよいですか。また、それらにはどのようなメリットとデメリットがありますか。

そして、私は春に働くために2つの方法があることを知っていますか? 1つ目はJPAの方法、もう1つはHibernateの方法です。 1つ目はJava標準アノテーションと標準APIを含み、2つ目は休止実装です。JTAを使用する必要がある場合、JPAではなく休止状態を使用する必要がありますか?

21
grep

管理されたトランザクションをアプリケーションサーバーに委任し、複数のリソースにまたがる複雑なトランザクションを処理する場合は、JtaTransactionManagerを使用する必要がありますが、ほとんどの場合は不要であると思います。詳細はこちら http://docs.spring.io/spring-framework/docs/4.0.x/spring-framework-reference/html/transaction.html

トランザクション管理にアプリケーションサーバーが必要ですか?

Spring Frameworkのトランザクション管理サポートは、企業Javaアプリケーションにアプリケーションサーバーが必要な場合)に関する従来のルールを変更します。

特に、EJBを介した宣言型トランザクションのためだけのアプリケーションサーバーは必要ありません。実際、アプリケーションサーバーに強力なJTA機能がある場合でも、Spring Frameworkの宣言型トランザクションがEJB CMTよりも強力で生産性の高いプログラミングモデルを提供すると判断する場合があります。

通常、アプリケーションが複数のリソースにわたるトランザクションを処理する必要がある場合にのみ、アプリケーションサーバーのJTA機能が必要です。これは、多くのアプリケーションの要件ではありません。多くのハイエンドアプリケーションは、単一の高度にスケーラブルなデータベース(Oracle RACなど)を代わりに使用します。 Atomikos TransactionsやJOTMなどのスタンドアロントランザクションマネージャーは他のオプションです。もちろん、Java Message Service(JMS)およびJava EE Con​​nector Architecture(JCA))などの他のアプリケーションサーバー機能が必要になる場合があります。

Spring Frameworkでは、完全にロードされたアプリケーションサーバーにアプリケーションをスケーリングするタイミングを選択できます。 EJB CMTまたはJTAを使用する唯一の代替手段が、JDBC接続のトランザクションなどのローカルトランザクションを使用してコードを記述し、そのコードをグローバルなコンテナー管理トランザクション内で実行する必要がある場合は大幅な手直しが必要だった時代は終わりました。 Spring Frameworkでは、コードではなく、構成ファイル内の一部のBean定義のみを変更する必要があります。

26
Georgy Gobozov