2013-07-17 41 views
0

我們正在將項目從Spring 2.5.6升級到3.2.3,並將Hibernate/JPA升級到4.2.3。JMS消息偵聽器調用程序的設置失敗,目標隊列:XYZ:沒有JTA UserTransaction可用

在彈簧ds.xml中的事務管理,我們更換原來的配置如下

<bean id="transactionManager" 
      class="org.springframework.transaction.jta.WebSphereUowTransactionManager"> 
      <!-- This property is specifically required for JMS --> 
      <property name="transactionManager" ref="baseTransactionManager" /> 
     </bean> 

     <bean id="baseTransactionManager" 
      class="org.springframework.transaction.jta.WebSphereTransactionManagerFactoryBean" /> 
     <tx:annotation-driven transaction-manager="transactionManager" /> 

以下爲WebSphereTransactionManagerFactoryBean類取代在最近的一項是:

<bean id="transactionManager" 
class="org.springframework.transaction.jta.WebSphereUowTransactionManager" /> 

和JMS味精監聽器的配置看起來像如下:

<bean id="xxtMsgListenerContainer" 
     class="org.springframework.jms.listener.DefaultMessageListenerContainer"> 
     <property name="connectionFactory" ref="jmsxxConnectionFactory" /> 
     <property name="destination" ref="jmsxxQueue" /> 
     <property name="messageListener" ref="xxMessageListener" /> 
     <property name="transactionManager" ref="transactionManager" /> 
     <property name="taskExecutor" ref="taskExecutor" /> 

    </bean> 

以上配置我們ar Ë得到下面的錯誤在WAS日誌:

JMS消息監聽器調用的安裝程序失敗目的地 隊列:// xxQueue busName = zzBus' - 試圖恢復?原因:沒有JTA UserTransactionavailable - 不支持編程式PlatformTransactionManager.getTransaction使用不支持

是否有升級到spring 3.2.3所需的任何其他配置/屬性?或配置WebSphereUowTransactionManager是否需要設置任何屬性?

回答

0

DefaultMessageListenerContainer,請嘗試將sessionTransacted屬性設置爲true。這應該使WebSphere支持事務處理

1

如果在應用程序中使用Hibernate,實際使用的Hibernate版本可能是問題的根本原因。

我們花了半天時間調試它(對WebSphere框),然後發現它的確是造成問題,而不是JMS configuration休眠版本升級(from 4.2.7.Final4.2.12.Final)。

更新:看來休眠包括事務api jboss-transaction-api_1.1_spec這是不是與Websphere目前的兼容。從hibernate簡單地排除這個問題解決了這個問題。

相關問題