0

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

在用于事务管理的 spring-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 类在最新的 WAS 中被取代:

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

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

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

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

4

2 回答 2

1

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

我们花了半天时间调试它(在一个 WebSphere 机器上),然后发现确实是休眠版本升级(from 4.2.7.Final4.2.12.Final)引起了问题,而不是JMS configuration.

更新:Hibernate 似乎包含jboss-transaction-api_1.1_spec与 Websphere 上存在的不兼容的事务 API。只需将其从休眠中排除即可解决问题。

于 2014-05-28T10:21:44.617 回答
0

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

于 2013-07-17T10:39:34.023 回答