web-dev-qa-db-ja.com

Spring JTA構成-TransactionManagerを設定する方法は?

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>
13
Marcus Leon

はい、大丈夫です。表示されていたスタックトレースも問題ありませんでした。<tx:jta-transaction-manager/>は、さまざまな標準の場所からトランザクションマネージャーを取得しようとします。失敗したJNDIルックアップごとに、javax.naming.NameNotFoundExceptionが表示されます。

Java:/TransactionManagerは、JBossがデフォルトでバインドする場所です。他のサーブレットコンテナはデフォルトでJava:/comp/TransactionManagerになります。これは、TMの「標準」の場所であると思われます。

Springリファレンスドキュメント から:

WebLogic、WebSphere、OC4Jなどの標準的なシナリオでは、便利な<tx:jta-transaction-manager/>構成要素の使用を検討してください。これにより、基盤となるサーバーが自動的に検出され、プラットフォームで使用可能な最適なトランザクションマネージャーが選択されます。これは、サーバー固有のアダプタークラス(次のセクションで説明)を明示的に構成する必要がないことを意味します。それらはむしろ自動的に選択され、デフォルトのフォールバックとして標準のJtaTransactionManagerが使用されます。

13
Henning

よくある「間違い」は、デプロイするJ2EEコンポーネントにjta.jarjbossall-client.jarなどをバンドルすることです。この場合は、再確認して削除してください。

4
Pascal Thivent