Spring の宣言型トランザクション管理を使用するアプリケーションがあります。アプリケーションが TomEE の JTA トランザクション マネージャーを使用するように、これを TomEE+ コンテナーにデプロイするにはどうすればよいですか?
より具体的には、Spring の「application-context.xml」ファイル内から組み込みのトランザクション マネージャーを参照するにはどうすればよいですか?
Spring のトランザクション管理構成は、Bean 参照または JNDI ルックアップのいずれかによってトランザクション マネージャーをルックアップする必要があるようです。私はこれを調査し、ソース コードを調べるのに 1 日を費やしました。この問題に関する多くの議論を見つけました (以下の参照) が、決定的なハウツーはありません。
アプリケーションの META-INF/persistence.xml にあるのは次のとおりです。
<persistence-unit name="myPersistenceUnit" transaction-type="JTA">
<provider>org.apache.openjpa.persistence.PersistenceProviderImpl</provider>
<jta-data-source>myDs-managed</jta-data-source>
<non-jta-data-source>myDs-unmanaged</non-jta-data-source>
<properties>
<property name="openjpa.jdbc.DBDictionary"
value="org.apache.openjpa.jdbc.sql.PostgresDictionary"/>
<property name="openjpa.jdbc.SynchronizeMappings" value="buildSchema"/>
<property name="openjpa.Run
<property name="openjpa.Log" value="slf4j" />
</properties>
</persistence-unit>
そして、アプリケーションの META-INF/spring/applicationContext.xml ファイルには次のものがあります:
<tx:annotation-driven mode="aspectj" transaction-manager="txManager" />
<bean class="org.springframework.transaction.jta.JtaTransactionManager"
id="txManager">
<property name="transactionManagerName"
value=" java:comp/TransactionManager"/>
</bean>
JBoss で動作すると主張されている例を次に示します。Spring JTA 構成 - TransactionManager を設定する方法は?
これは、xml 構成ファイルで機能しないニアミスです: https://issues.apache.org/jira/browse/TOMEE-38
initialContext を使用している場合の Java コード内での実行方法は次のとおりです。
[編集: Tomee のドキュメントでは、トランザクション マネージャーを宣言する方法について説明していますが、個々の Web アプリケーションではなくサーバーに属する Tomee.xml で行うように指示されています。サーバー全体ではなく、単一のアプリに対してトランザクションマネージャーを構成したい: http://tomee.apache.org/containers-and-resources.html]