私は以下のような質問があります:
- これら2つの違いは何ですか?
- これらは両方ともすべてのデータベースでサポートされていますか?
- JPATransactionManagerとJTATransactionManagerは異なりますか?
回答:
JPA実装では、トランザクション自体RESOURCE_LOCAL
を管理するか()、アプリケーションサーバーのJTA実装でトランザクションを管理するかを選択できます。
ほとんどの場合、RESOURCE_LOCALで問題ありません。これは、基本的なJDBCレベルのトランザクションを使用します。欠点は、トランザクションがJPA永続性ユニットに対してローカルであるため、複数の永続性ユニット(または他のデータベース)にまたがるトランザクションが必要な場合、RESOURCE_LOCALでは不十分な場合があります。
JTAは、JMSやJCAなどのシステム間でトランザクションを管理するためにも使用されますが、それは私たちのほとんどにとってかなりエキゾチックな使用法です。
JTAを使用するには、アプリケーションサーバーでのサポートと、JDBCドライバーからのサポートが必要です。
他の答えへの追加として
これは、非常に役立つ記事(Apache TomEE Webサイトで公開)からの抜粋です。これは、OPの最初の質問への回答にも役立ちます(記事へのリンクは以下にあります)。
RESOURCE_LOCALとJTAの永続コンテキストの比較
<persistence-単位のトランザクション・タイプ= "RESOURCE_LOCAL"> YOUは、 EntityManagerの(のPersistenceContext /キャッシュ)を作成し、追跡を担当しています...
- EntityManagerを取得するには、EntityManagerFactoryを使用する必要があります
- 結果のEntityManagerインスタンス はPersistenceContext / Cacheです
- AN のEntityManagerFactoryを介して注入することができる @PersistenceUnitの注釈のみ(ない@PersistenceContext)
- @PersistenceContextを使用してRESOURCE_LOCALタイプのユニットを参照することは許可されていません
- EntityMangerへのすべての呼び出しを開始/コミット するには、EntityTransactionAPIを使用 する必要があります
- entityManagerFactory.createEntityManager()を2回呼び出すと、 2つの別個のEntityManagerインスタンスが生成されるため、 2つの別個のPersistenceContexts / Cachesが発生します。
- EntityManagerのインスタンスを複数使用することは、ほとんどの場合良い考えでは ありません(最初のインスタンスを破棄しない限り、2番目のインスタンスを作成しないでください)。
<persistence-単位のトランザクション・タイプ= "JTA">コンテナは、 EntityManagerの(のPersistenceContext /キャッシュ)を作成し、追跡を行います...
- EntityManagerFactoryを使用して EntityManagerを取得することはできません
- コンテナによって提供される EntityManagerのみを取得できます
- ANのEntityManagerを 介して注入することができる@PersistenceContext のみ注釈(@PersistenceUnitありません)
- @PersistenceUnitを使用してタイプJTAのユニットを参照することは許可されて いません
- EntityManagerの容器で与えである参照JTAトランザクションに関連のPersistenceContext /キャッシュします。
- 進行中のJTAトランザクションがない場合、PersistenceContext / Cacheがないため、EntityManager は使用できません。
- 同じトランザクション内の同じユニットへのEntityManager参照を持つすべての人は、同じPersistenceContext / Cacheへの参照を自動的に持ちます
- PersistenceContext / Cacheは、JTAコミット時にフラッシュおよびクリアされます
Java Persistence APIの学習に興味のある方は、ぜひ、JPAの概念:JPA101の記事全体をお読みください。
transaction-type=RESOURCE_LOCAL
と@PersistenceContext
と@Transactional
春によって管理
Resource_LocalとJTAは、トランザクションマネージャー(トランザクションを実行する方法)です。これはデータベースのプロパティではなく、トランザクションの調整を担当するコンポーネントです。JPAとJTAトランザクションマネージャーは異なります。JPAトランザクションマネージャーはJPAトランザクションを担当し、JPAトランザクションのみを実行している場合はJPAトランザクションを使用します。JTAトランザクションマネージャーは汎用トランザクションマネージャーであり、JMSキューなどの他のリソースをトランザクションに参加させることができます。通常、Java EEコンテナは、EJB、JPAエンティティなどにJTAトランザクションマネージャを使用します。