SpringconfigでSpringトランザクションを次のように構成します。
<tx:jta-transaction-manager/>
これは、Springが基盤となるJTA実装を自動的に検出することを意味します。したがって、JBossを起動すると、Springの検索中に次のメッセージが表示されます。
[JtaTransactionManager] [ ] No JTA TransactionManager found at fallback JNDI location [Java:comp/Tran
sactionManager]
javax.naming.NameNotFoundException: TransactionManager not bound
<<Big stack trace>>
<<More of the same>>
そして最終的に見る:
[JtaTransactionManager] [ ] JTA TransactionManager found at fallback JNDI location [Java:/Transaction
Manager]
[JtaTransactionManager] [ ] Using JTA UserTransaction: org.jboss.tm.usertx.client.ServerVMClientUserT
ransaction@1f78dde
質問は、<tx:jta-transaction-manager/>
タグを編集してJava:/Transaction Manager
JTA実装を明示的に構成し、ログ内のこれらすべてのスタックトレースを回避するにはどうすればよいですか? (Log4Jのログレベルを変更するだけではありません)
更新:<tx:jta-transaction-manager/>
を以下の設定に置き換えましたが、機能しているようです。これで問題ないと思いますか?
<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
<property name="transactionManagerName" value="Java:/TransactionManager"/>
</bean>
はい、大丈夫です。表示されていたスタックトレースも問題ありませんでした。<tx:jta-transaction-manager/>
は、さまざまな標準の場所からトランザクションマネージャーを取得しようとします。失敗したJNDIルックアップごとに、javax.naming.NameNotFoundException
が表示されます。
Java:/TransactionManager
は、JBossがデフォルトでバインドする場所です。他のサーブレットコンテナはデフォルトでJava:/comp/TransactionManager
になります。これは、TMの「標準」の場所であると思われます。
WebLogic、WebSphere、OC4Jなどの標準的なシナリオでは、便利な
<tx:jta-transaction-manager/>
構成要素の使用を検討してください。これにより、基盤となるサーバーが自動的に検出され、プラットフォームで使用可能な最適なトランザクションマネージャーが選択されます。これは、サーバー固有のアダプタークラス(次のセクションで説明)を明示的に構成する必要がないことを意味します。それらはむしろ自動的に選択され、デフォルトのフォールバックとして標準のJtaTransactionManager
が使用されます。
よくある「間違い」は、デプロイするJ2EEコンポーネントにjta.jar
やjbossall-client.jar
などをバンドルすることです。この場合は、再確認して削除してください。