2009-11-23 302 views
13

我們在Spring配置配置我們的Spring的事務爲:Spring JTA配置 - 如何設置TransactionManager?

<tx:jta-transaction-manager/> 

我推測,這意味着春天將自動發現底層的JTA實現。所以,當我們啓動的JBoss,我們看到這些消息,而春搜索:

[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 
[email protected] 

問題是 - 我們如何修改我們的<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> 
+1

一般來說,儘可能在您的上下文中提供儘可能多的信息,例如JBoss的版本,您正在使用的應用程序的種類等等,這些都是很好的。我並不是說這會解決這裏的問題,但它可能有所幫助。 – 2009-11-23 14:59:36

回答

13

是的,沒關係。您看到的堆棧跟蹤也是正常的:<tx:jta-transaction-manager/>嘗試從多個不同的標準位置獲取事務管理器;對於每個失敗的JNDI查找,您都會看到javax.naming.NameNotFoundException

java:/TransactionManager是默認情況下JBoss綁定的地方;其他servlet容器將默認爲java:/comp/TransactionManager,我認爲它應該是TM的「標準」位置。

Spring reference documentation

對於標準場景,包括 的WebLogic,WebSphere和OC4J,使用便利 <tx:jta-transaction-manager/> 配置元素考慮 。這將使 自動檢測到底層的 服務器,並選擇可用於該平臺的最佳交易 管理器。 這意味着您將不必 顯式配置服務器特定的適配器 類(如以下 部分所述);他們寧願自動選擇 , 標準JtaTransactionManager作爲 默認回退。

4

一個共同的「錯誤」是在J2EE組件部署捆綁之類的東西jta.jar和/或jbossall-client.jar。如果是這種情況,請仔細檢查並刪除它們。