Tomcat – Spring Batch – Atomikos の組み合わせの構成に問題があります。以下を構成しました(JMS構成については言及していません)
Oracle XA データソース用の com.atomikos.tomcat.EnhancedTomcatAtomikosBeanFactory に基づく Atomikos DataSource (プロキシ)。
com.atomikos.icatch.jta.J2eeTransactionManager に基づく transactionManager に基づく JtaTransactionManager com.atomikos.icatch.jta.J2eeUserTransaction に基づく userTransaction
バッチ ジョブを実行すると、次のエラーが表示されます。
Caused by: java.lang.RuntimeException: Transaction Service Not Running?
at com.atomikos.icatch.jta.J2eeUserTransaction.checkSetup(J2eeUserTransaction.java:70)
at com.atomikos.icatch.jta.J2eeUserTransaction.getStatus(J2eeUserTransaction.java:125)
at org.springframework.transaction.jta.JtaTransactionManager.
isExistingTransaction(JtaTransactionManager.java:797)
デバッグにより、次のことが明らかになりました。
Spring Batch は TaskletStep を利用します。このクラスは、DataSourceTransactionManager でインスタンス化された PlatformTransactionManager を使用しますか? データソースは AtomikosDataSourceBean を参照していますが、問題ないようです。いくつか質問があります:
- この DataSourceTransactionManager はどこから来たのですか? JtaTransactionManager を定義しました!
- AtomikosDataSourceBean は、JtaTransactionManager に接続するためのプロキシのように機能すると思いました。Atomikos に「トランザクション サービスが実行されていません」というエラーが表示されるのはなぜですか?</li>
春のバッチ: 2.1.8
アトミコス: 3.9.3