私はJBoss EAP 6.4(Java EE 6)で作業していますが、アプリケーションサーバーがXAデータソース(EJB/JTAを使用)を扱う方法に関する質問があり、2フェーズコミット)が常に使用されているか、「最適化」が適用されているかを示します。XAデータソースの1PC最適化
のは、私はこれを持っているとしましょう:
@Stateless
@TransactionAttribute(TransactionAttributeType.REQUIRED)
public class MyEjb {
@EJB
private MyFirstEjb first;
@EJB
private MySecondEjb second;
// Transactional processing
public void process() {
first.processJpaStuff();
second.processJpaStuff();
}
}
だがそれを言ってみましょう:
- MyFirstEjb行うXAデータソースを使用してJPAクエリ1.
- MySecondEjb行う2. XAデータソースを使用してJPAクエリ
私はXAデータソースを使用しています。これらのEJBは、2PC i (別のデータソースまたはJMSプロバイダとともに)必須です。
私は今、いくつかのケースを区別したいと思います:同じアプリケーション・サーバー内
- MyFirstEjbとMySecondEjbは、同じアプリケーション内で展開されている(EAR)
- MyFirstEjbとMySecondEjbは別個のアプリケーションで展開されている(耳) 0:
- MyFirstEjbとMySecondEjbは、異なるアプリケーションサーバ
とサブケース内に配備されています
A)XAデータソース1 = XAデータソース2
b)は、XAデータソース1!= XAデータソース2(同じデータベース)
C)XAデータソース1!= XAデータソース2(異なるデータベース)
私はb)とc)が同じように管理されていると思います。グローバルトランザクションがあり、各データソースはXAトランザクションマネージャーとコラボレーションします。 2PCが適用されます。
ケース1.a)と2.a)についてはどうですか?どちらも最終的に同じデータソースを使用しているので、処理するグローバルな2PCトランザクションを必要としない何らかの最適化があると思いますか? 「はい」の場合、これを説明する正式な(JTA/JBoss/...)リンクはありますか? すべてのアプリケーションサーバー/実装で同じことはありますか?
おかげ
うわー...この詳細な説明とこれらの重要なリンクに感謝します!これは複雑な主題であっても非常に興味深く、はるかに明確になります。 最適化がベンダー固有であることを確認します。 ありがとう –