目标队列的JMS消息侦听器调用程序的设置失败:XYZ:没有可用的JTA UserTransaction

时间:2013-07-17 02:23:42

标签: spring hibernate jpa websphere spring-jms

我们正在将项目从Spring 2.5.6升级到3.2.3,将Hibernate / JPA升级到4.2.3。

在spring-ds.xml中进行事务管理我们替换了原来的config

<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类在最新的WAS中被取代:

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

和JMS msg侦听器配置如下所示:

<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>

使用上面的配置,我们在WAS日志中得到以下错误:

JMS消息侦听器调用程序的设置失败 queue:// xxQueue?busName = zzBus' - 尝试恢复。原因:没有JTA UserTransactionavailable - 不支持程序化PlatformTransactionManager.getTransaction使用

升级到spring 3.2.3需要其他配置/属性吗?或者要配置WebSphereUowTransactionManager我们需要设置任何属性吗?

2 个答案:

答案 0 :(得分:1)

如果您在应用程序中使用Hibernate,则使用的实际Hibernate版本可能是问题的根本原因。

我们花了半天时间调试它(在WebSphere盒子上),然后发现确实是hibernate版本升级(from 4.2.7.Final4.2.12.Final)引起了问题,而不是{{1 }}

更新:Hibernate似乎包含了与Websphere上存在的不兼容的transaction-api JMS configuration。简单地从hibernate中排除这个就解决了这个问题。

答案 1 :(得分:0)

DefaultMessageListenerContainer上的

,请尝试将sessionTransacted属性设置为true。这应该启用WebSphere的事务支持