web-dev-qa-db-ja.com

RESOURCE_LOCALまたはJTAとしての永続性ユニット?

以下のようなクエリがあります:

  1. これら2つの違いは何ですか?
  2. これらは両方ともすべてのデータベースでサポートされていますか?
  3. JPA TransactionManagerとJTA TransactionManagerは異なりますか?
85
cometta

JPA実装には、トランザクション自体を管理する選択肢があります(RESOURCE_LOCAL)、またはアプリケーションサーバーのJTA実装によって管理されるようにします。

ほとんどの場合、RESOURCE_LOCALで問題ありません。これは、基本的なJDBCレベルのトランザクションを使用します。欠点は、トランザクションがJPA永続性ユニットに対してローカルであるため、複数の永続性ユニット(または他のデータベース)にまたがるトランザクションが必要な場合、RESOURCE_LOCALでは十分でない可能性があることです。

JTAは、JMSやJCAなどのシステム間でトランザクションを管理するためにも使用されますが、ほとんどの場合、これは非常に珍しい使い方です。

JTAを使用するには、アプリケーションサーバーでのJTAのサポートと、JDBCドライバーからのサポートが必要です。

95
skaffman

他の回答への追加として

これは非常に有用な記事( Apache TomEE ウェブサイトで公開)からの抜粋であり、OPの最初の質問(記事へのリンク)に答えるのにも役立ちます以下です)。


RESOURCE_LOCALとJTA永続コンテキストの比較


<persistence-unit transaction-type = "RESOURCE_LOCAL">[〜#〜] you [〜#〜]はEntityManager(PersistenceContext/Cache)を担当します作成と追跡...

  • あなたはmustを使用してEntityManagerFactoryを使用してEntityManagerを取得します
  • 結果のEntityManagerインスタンスisはPersistenceContext/Cache
  • EntityManagerFactoryは、@ PersistenceUnitアノテーションのみを介して注入できます(@PersistenceContextは不可)
  • RESOURCE_LOCAL型のユニットを参照するために@PersistenceContextを使用することはnot許可されています
  • mustを使用してEntityTransactionAPIを使用して、EntityMangerへのevery呼び出しを開始/コミットします。
  • EntityManagerFactory.createEntityManager()を2回呼び出すと、two個のEntityManagerインスタンスが生成され、そのためtwo個のPersistenceContexts/Cachesが生成されます。
  • EntityManagerの複数のinstanceを使用することはほとんど決してないことです(2番目のEntityManagerを作成しない限り、最初を破壊した)


<persistence-unit transaction-type = "JTA">では、[〜#〜] container [〜#〜]がEntityManager(PersistenceContext/Cache)を実行します作成と追跡...

  • あなたはcannotを使用してEntityManagerFactoryを使用してEntityManagerを取得します
  • containerが提供するEntityManagerのみを取得できます。
  • EntityManagerは、@ PersistenceContextアノテーションのみを介して注入できます(@PersistenceUnitは不可)
  • @PersistenceUnitを使用してJTAタイプのユニットを参照することはnot許可されています
  • コンテナによって指定されたEntityManagerは、JTAトランザクションに関連付けられたPersistenceContext/Cacheへのreferenceです。
  • JTAトランザクションが進行中でない場合、PersistenceContext/Cacheがないため、EntityManagerは使用できません
  • 同じトランザクション内の同じユニットへのEntityManager参照を持つすべての人は、同じPersistenceContext/Cache
  • PersistenceContext/Cacheはflushedであり、JTAcommit時にクリアされます

Java Persistence API-好意的で、こちらの記事全文を読んでください: JPAコンセプト:JPA 101

77
informatik01

Resource_LocalとJTAは、トランザクションマネージャー(トランザクションを実行する方法)です。これはデータベースのプロパティではなく、トランザクションを調整するコンポーネントです。 JPAとJTAのトランザクションマネージャーは異なります。 JPAトランザクションマネージャーはJPAトランザクションを担当し、JPAトランザクションのみを行う場合は、JPAトランザクションマネージャーを使用します。 JTAトランザクションマネージャは汎用トランザクションマネージャであり、JMSキューなどの他のリソースをトランザクションに参加させることができます。通常、Java EEコンテナは、EJB、JPAエンティティなどにJTAトランザクションマネージャを使用します。

17
Chandra Patni

resource_localとJTAは、ローカルトランザクションとグローバルトランザクションについてです。 1つのトランザクションで複数のリソースを管理できるかどうかについてです。

CMT対BMTは、誰がトランザクションを開いて閉じているのか-アプリケーション開発者またはアプリケーションサーバーです。

0
Pushpendra