13

Spring 構成で 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 ManagerJTA 実装を明示的に構成し、ログ内のこれらすべてのスタック トレースを回避するにはどうすればよいかということです。(Log4J のログレベルを変更したくないだけです)


更新: 以下の構成に置き換え<tx:jta-transaction-manager/>たところ、動作するようです..これで問題ないと思いますか?

<bean id="transactionManager" class="org.springframework.transaction.jta.JtaTransactionManager">
    <property name="transactionManagerName" value="java:/TransactionManager"/>
</bean>
4

2 に答える 2

13

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

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

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

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

于 2009-11-23T15:55:17.793 に答える
4

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

于 2009-11-23T14:57:51.840 に答える