javax.jms.TransactionProgressException:无法在JBoss EAP 6.2和活动MQ 5.10.0上的XASession内回滚()

javax.jms.TransactionProgressException:无法在JBoss EAP 6.2和活动MQ 5.10.0上的XASession内回滚(),jboss,transactions,apache-camel,activemq,xa,Jboss,Transactions,Apache Camel,Activemq,Xa,我们正在尝试使用运行在JBoss EAP 6.2上的活动MQ 5.10.0和camel 2.13.1创建XA连接池。当释放到池的连接时,将引发下面的异常。根据其他线程的说法,这个错误是通过活动MQ 5.8.x修复的。知道为什么我们还是会出错吗?活动MQ客户端和服务器正在使用5.10.0运行 弹簧配置: 在该事务中发生了一些奇怪的事情。我知道的一件事是,您的配置不太正确 JmsConfig bean需要有transact=“false”-属性名称有点误导,因为它实际上意味着“在本地管理此事务”(

我们正在尝试使用运行在JBoss EAP 6.2上的活动MQ 5.10.0和camel 2.13.1创建XA连接池。当释放到池的连接时,将引发下面的异常。根据其他线程的说法,这个错误是通过活动MQ 5.8.x修复的。知道为什么我们还是会出错吗?活动MQ客户端和服务器正在使用5.10.0运行

弹簧配置:


在该事务中发生了一些奇怪的事情。我知道的一件事是,您的配置不太正确

JmsConfig bean需要有
transact=“false”
-属性名称有点误导,因为它实际上意味着“在本地管理此事务”(它只是在底层spring DefaultMessageListenerContainer上设置TransactiveSession属性,请参阅)

此外,您还需要在PooledConnectionFactory上设置transactionManager(我很确定,如果您在ActiveMQClient上的transactionManager为null时运行了调试器)

下面是我目前正在运行的一个工作示例(EAP 6.2和AMQ 5.9)


我更改了如下配置,它修复了我面临的类似问题

<bean id="jmsXAConnectionFactory"
        class="org.apache.activemq.ActiveMQXAConnectionFactory"
        p:brokerURL="tcp://${activemq.host}:${activemq.port}" />

<bean id="xa.connectionFactory" class="com.atomikos.jms.AtomikosConnectionFactoryBean"> <!-- connection pool -->
        <property name="uniqueResourceName" value="amq1" />
        <property name="xaConnectionFactory" ref="jmsXAConnectionFactory" />
</bean>

<bean id="jmsConfig"
        class="org.apache.camel.component.jms.JmsConfiguration"
        p:connectionFactory-ref="xa.connectionFactory"
        p:concurrentConsumers="${concurrent.consumers.default}" 
        p:transactionManager-ref="transactionManager"           
        p:transacted="true"         
        p:cacheLevelName="CACHE_CONNECTION"/>
<!-- we are using JMS component from apache-camel -->
<bean id="jms"
    class="org.apache.activemq.camel.component.ActiveMQComponent"
    p:configuration-ref="jmsConfig" />
</beans>
<bean id="jmsXAConnectionFactory"
        class="org.apache.activemq.ActiveMQXAConnectionFactory"
        p:brokerURL="tcp://${activemq.host}:${activemq.port}" />

<bean id="xa.connectionFactory" class="com.atomikos.jms.AtomikosConnectionFactoryBean"> <!-- connection pool -->
        <property name="uniqueResourceName" value="amq1" />
        <property name="xaConnectionFactory" ref="jmsXAConnectionFactory" />
</bean>

<bean id="jmsConfig"
        class="org.apache.camel.component.jms.JmsConfiguration"
        p:connectionFactory-ref="xa.connectionFactory"
        p:concurrentConsumers="${concurrent.consumers.default}" 
        p:transactionManager-ref="transactionManager"           
        p:transacted="true"         
        p:cacheLevelName="CACHE_CONNECTION"/>
<!-- we are using JMS component from apache-camel -->
<bean id="jms"
    class="org.apache.activemq.camel.component.ActiveMQComponent"
    p:configuration-ref="jmsConfig" />
</beans>
compile "com.atomikos:transactions-jms:4.0.6"
compile "com.atomikos:transactions-jta:4.0.6"
compile "com.atomikos:transactions-jdbc:4.0.6"