[英]TransactionManager from Spring or JNDI? (JBOSS + Spring 3 + Hibernate 4 + JTA)
[英]Spring JTA configuration - how to set TransactionManager?
我們在Spring config中將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
。
JBoss默認綁定到java:/TransactionManager
; 其他servlet容器將默認為java:/comp/TransactionManager
,我認為這應該是TM的“標准”位置。
從Spring參考文檔中 :
對於包括WebLogic,WebSphere和OC4J在內的標准方案,請考慮使用方便的
<tx:jta-transaction-manager/>
配置元素。 這將自動檢測底層服務器,並選擇適用於該平台的最佳事務管理器。 這意味着您不必顯式配置服務器特定的適配器類(如以下各節所述)。 寧可自動選擇它們,也可以使用標准的JtaTransactionManager
作為默認后備。
一個常見的“錯誤”是將jta.jar
和/或jbossall-client.jar
東西捆綁在您部署的J2EE組件中。 請仔細檢查並在這種情況下將其刪除。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.