[java] JPA複数のトランザクションマネージャ


Answers

2つのSpringトランザクションマネージャを持つことができる唯一の状況は、両方のトランザクションを同時に開くことがない場合です。 これは、分散トランザクションと本質的に関係するものではありません.2つのデータソースが完全に別々の(ただし時間的にオーバーラップする)トランザクションライフサイクルを持つ場合でも同じ制限が適用されます。

内部的にSpringのトランザクションマネージャはすべて、SpringのTransactionSynchronizationManagerを使用します。これは、静的なThreadLocal変数に一連の重要な状態を保持するため、トランザクションマネージャは互いの状態を全面的に揺るがすことが保証されます。

Question

1つのapplicationContext.xmlファイルがあり、Springミドルウェアのカスタムアプリケーションで設定された2つのorg.springframework.orm.jpa.JpaTransactionManager(それぞれ独自の永続ユニット、異なるデータベースを持つ)があります。

トランザクションベースのトランザクション(@Transactional)を使用して、TransactionStatusのコミット、保存、ロールバックを混乱させたくありません。

同僚は、コンテキストファイルが正しく設定されているにも関わらず、複数のトランザクションマネージャが存在するときに何かが混乱すると述べています(参照は正しい永続ユニットに移動します。

あなたの設定では、2つのトランザクションマネージャがありますか? txManager1とtxManager2はありますか?

トランザクションマネージャーであるJPAの2つの異なるSpring Beanには、これがあります。






Links