「jta-datasource」と「resource-local datasource」という用語は、私にとっては少し曖昧です。私が理解している(または想定している)ことを記載していますが、どこが正しいか、どこが間違っているかを教えてください。
- 同じデータベースは、jtaデータソースまたはリソースローカルデータソースと呼ばれることもあります。
- jta-datasourceとして記述されている場合、Beanや他のクラスはJTAを使用できます。したがって、UserTransactionインターフェース
- 使えないCMTM/BMTデータソースがリソースローカルの場合
- リソース ローカル データソースとして指定されている場合、トランザクションは JTA に対応していません。コードは EntityTransaction インターフェイスを使用できますが、UserTransaction インターフェイスは使用できません。
ありがとう!
ベストアンサー1
「jta-datasource」と「resouce-local datasource」という用語は私にとって少し曖昧です。
jta-datasource
実際には と要素を参照していると思いますnon-jta-datasource
。簡単に言うと、
- 永続ユニットのトランザクションタイプがJTA要素は、
jta-datasource
接続を取得するために使用される JTA データ ソースの JNDI 名を宣言するために使用されます。これは一般的なケースです。 - 永続ユニットのトランザクションタイプがリソースローカル、
non-jta-data-source
非 JTA データ ソースの JNDI 名を宣言するには を使用する必要があります。
- 同じデータベースは、jtaデータソースまたはリソースローカルデータソースと呼ばれることもあります。
これは正解です。そして、上では触れませんでしたが、プロバイダーによっては、jta-datasource
そしてa をnon-jta-datasource
使用し、後者を JTA 以外の接続 (つまり、進行中の JTA トランザクションに関連付けられていない接続) を介した最適化された読み取りに使用します。
- jta-datasource として記述されている場合、Bean または他のクラスは JTA を使用できます。したがって、UserTransaction インターフェイスです。
最初の部分は正しいが、最後の部分は完全には正しくない。EJB 3.0仕様のセクション13.3.4 コンテナ管理トランザクション境界を使用するエンタープライズ Bean:
エンタープライズ Bean のビジネス メソッドは [...]
javax.transaction.UserTransaction
インターフェースを取得または使用しようとしてはなりません。
そしてセクション16.12 ユーザートランザクションインターフェース:
コンテナは、
UserTransaction
このインターフェースの使用が許可されていないエンタープライズ Bean に対してインターフェースを使用可能にしてはなりません。
つまり、このUserTransaction
インターフェースは CMT エンタープライズ Bean では使用できません。
- データソースがリソースローカルの場合、CMT / BMT は使用できません
文言が少しわかりにくいですが、厳密には正しくないと思います。JPA 1.0仕様のセクション§ 5.5 取引の管理:
アプリケーション管理エンティティ マネージャは、JTA エンティティ マネージャまたはリソース ローカル エンティティ マネージャのいずれかになります。
...
Java EE Web コンテナと EJB コンテナでは、JTA エンティティ マネージャとリソース ローカル エンティティ マネージャの両方をサポートする必要があります。EJB 環境では、通常、JTA エンティティ マネージャが使用されます。
そしてセクション6.2.1.2 トランザクションタイプ
属性
transaction-type
は、永続性ユニットのエンティティ マネージャ ファクトリによって提供されるエンティティ マネージャが JTA エンティティ マネージャであるか、リソース ローカル エンティティ マネージャであるかを指定するために使用されます。この要素の値はJTA
または ですRESOURCE_LOCAL
。JTA のトランザクション タイプは、要素によって指定されるかjta-data-source
、またはコンテナによって提供される JTA データ ソースが提供されることを前提としています。一般に、Java EE 環境では、 はtransaction-type
非RESOURCE_LOCAL
JTA データ ソースが提供されることを前提としています。Java EE 環境では、この要素が指定されていない場合、デフォルトは JTA です。
だから、アプリケーション管理エンティティマネージャこれはリソースローカルエンティティマネージャ(EntityManagerFactory
その場合、EMを取得するには を注入する必要があります)そしてそれはJTAトランザクションの一部にはなりません。この(非常に興味深い)議論。
- リソース ローカル データソースとして指定されている場合、トランザクションは JTA に対応していません。コードは EntityTransaction インターフェイスを使用できますが、UserTransaction インターフェイスは使用できません。
繰り返しになりますが、言葉遣いは少しわかりにくいですが、これは正しいと思います。