Activemq JAVA-Spring集成流事务&x2B;com.atomikos.icatch.HeurHazardException:启发式异常
我试图将事务性流程作为Spring集成的整个流程,该流程从IBM MQ队列的适配器开始,然后我们有一个包含ActiveMQ队列的复杂流程,我得到一个com.atomikos.icatch.HeurHazardException:atomikos尝试注册资源时的启发式异常Activemq JAVA-Spring集成流事务&x2B;com.atomikos.icatch.HeurHazardException:启发式异常,activemq,spring-integration,ibm-mq,spring-transactions,atomikos,Activemq,Spring Integration,Ibm Mq,Spring Transactions,Atomikos,我试图将事务性流程作为Spring集成的整个流程,该流程从IBM MQ队列的适配器开始,然后我们有一个包含ActiveMQ队列的复杂流程,我得到一个com.atomikos.icatch.HeurHazardException:atomikos尝试注册资源时的启发式异常 <bean id="inputChannelQueue" class="org.apache.activemq.command.ActiveMQQueue"> <constructor-arg valu
<bean id="inputChannelQueue" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="INPUT" />
</bean>
<jms:channel id="inputChannel" queue="inputChannelQueue">
<jms:interceptors>
<int:wire-tap channel="inputLoggingChannel"/>
</jms:interceptors>
</jms:channel>
<jms:message-driven-channel-adapter id="MQInboundGateway"
connection-factory="mqConnectionFactoryCache"
destination="mqInboundQueue"
channel="inputChannel"
concurrent-consumers="20"
cache-level="3" acknowledge="transacted" />
.
. //OTHER SPRING INTEGRATION ELEMENTS
.
<int:channel id="concentradorOutputChannel" /> //Final Channel to the output adapter.
<!-- ATOMIKOS BEANS -->
<bean id="userTransactionService" class="com.atomikos.icatch.config.UserTransactionServiceImp" init-method="init" destroy-method="shutdownForce">
<constructor-arg>
<!-- IMPORTANT: specify all Atomikos properties here -->
<props>
<prop key="com.atomikos.icatch.service">
com.atomikos.icatch.standalone.UserTransactionServiceFactory
</prop>
</props>
</constructor-arg>
</bean>
<bean id="AtomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close" depends-on="userTransactionService">
<property name="startupTransactionService" value="false" />
<property name="forceShutdown" value="false" />
</bean>
<bean id="AtomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp" depends-on="userTransactionService">
<property name="transactionTimeout" value="300" />
</bean>
<!-- //================= TX BEANS =================// -->
<bean id="JtaTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" depends-on="userTransactionService">
<property name="transactionManager" ref="AtomikosTransactionManager" />
<property name="userTransaction" ref="AtomikosUserTransaction" />
</bean>
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="bean(inputChannel)" />
</aop:config>
<tx:advice id="txAdvice" transaction-manager="JtaTransactionManager">
<tx:attributes>
<tx:method name="send" />
</tx:attributes>
</tx:advice>
这是我的applicationContext.xml
<bean id="mqConnectionFactory" class="com.ibm.mq.jms.MQQueueConnectionFactory">
<property name="hostName" value="${ibm.mq.connection.url}" />
<property name="port" value="${ibm.mq.connection.port}" />
<property name="transportType" value="${ibm.mq.conection.type}" />
<property name="queueManager" value="${ibm.mq.conection.queuemanager}" />
<property name="channel" value="${ibm.mq.conection.channel}" />
</bean>
<bean id="mqConnectionFactoryCache"
class="org.springframework.jms.connection.CachingConnectionFactory">
<property name="targetConnectionFactory" ref="mqConnectionFactory" />
<property name="sessionCacheSize" value="10" />
<property name="cacheConsumers" value="true"></property>
</bean>
<bean id="mqInboundQueue" class="com.ibm.mq.jms.MQQueue">
<constructor-arg value="${ibm.mq.conection.queue}" />
</bean>
<bean id="amqConnectionFactory" class="org.apache.activemq.ActiveMQXAConnectionFactory">
<!-- brokerURL -->
<property name="brokerURL" value="${active.mq.connection.url}" />
<property name="redeliveryPolicy" ref="amqRedeliveryPolicy"></property>
</bean>
<bean id="amqRedeliveryPolicy" class="org.apache.activemq.RedeliveryPolicy">
<property name="maximumRedeliveries" value="5"></property>
<property name="redeliveryDelay" value="1000"></property>
</bean>
<bean id="atmConnectionFactory" class="com.atomikos.jms.AtomikosConnectionFactoryBean"
init-method="init" destroy-method="close">
<property name="uniqueResourceName" value="INPUT" />
<property name="xaConnectionFactory" ref="amqConnectionFactory" />
<bean id="inputChannelQueue" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="INPUT" />
</bean>
<jms:channel id="inputChannel" queue="inputChannelQueue">
<jms:interceptors>
<int:wire-tap channel="inputLoggingChannel"/>
</jms:interceptors>
</jms:channel>
<jms:message-driven-channel-adapter id="MQInboundGateway"
connection-factory="mqConnectionFactoryCache"
destination="mqInboundQueue"
channel="inputChannel"
concurrent-consumers="20"
cache-level="3" acknowledge="transacted" />
.
. //OTHER SPRING INTEGRATION ELEMENTS
.
<int:channel id="concentradorOutputChannel" /> //Final Channel to the output adapter.
<!-- ATOMIKOS BEANS -->
<bean id="userTransactionService" class="com.atomikos.icatch.config.UserTransactionServiceImp" init-method="init" destroy-method="shutdownForce">
<constructor-arg>
<!-- IMPORTANT: specify all Atomikos properties here -->
<props>
<prop key="com.atomikos.icatch.service">
com.atomikos.icatch.standalone.UserTransactionServiceFactory
</prop>
</props>
</constructor-arg>
</bean>
<bean id="AtomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close" depends-on="userTransactionService">
<property name="startupTransactionService" value="false" />
<property name="forceShutdown" value="false" />
</bean>
<bean id="AtomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp" depends-on="userTransactionService">
<property name="transactionTimeout" value="300" />
</bean>
<!-- //================= TX BEANS =================// -->
<bean id="JtaTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" depends-on="userTransactionService">
<property name="transactionManager" ref="AtomikosTransactionManager" />
<property name="userTransaction" ref="AtomikosUserTransaction" />
</bean>
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="bean(inputChannel)" />
</aop:config>
<tx:advice id="txAdvice" transaction-manager="JtaTransactionManager">
<tx:attributes>
<tx:method name="send" />
</tx:attributes>
</tx:advice>
我需要从inputChannel到Concentrador OutputChannel的整个流程都在TX内
<bean id="inputChannelQueue" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="INPUT" />
</bean>
<jms:channel id="inputChannel" queue="inputChannelQueue">
<jms:interceptors>
<int:wire-tap channel="inputLoggingChannel"/>
</jms:interceptors>
</jms:channel>
<jms:message-driven-channel-adapter id="MQInboundGateway"
connection-factory="mqConnectionFactoryCache"
destination="mqInboundQueue"
channel="inputChannel"
concurrent-consumers="20"
cache-level="3" acknowledge="transacted" />
.
. //OTHER SPRING INTEGRATION ELEMENTS
.
<int:channel id="concentradorOutputChannel" /> //Final Channel to the output adapter.
<!-- ATOMIKOS BEANS -->
<bean id="userTransactionService" class="com.atomikos.icatch.config.UserTransactionServiceImp" init-method="init" destroy-method="shutdownForce">
<constructor-arg>
<!-- IMPORTANT: specify all Atomikos properties here -->
<props>
<prop key="com.atomikos.icatch.service">
com.atomikos.icatch.standalone.UserTransactionServiceFactory
</prop>
</props>
</constructor-arg>
</bean>
<bean id="AtomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close" depends-on="userTransactionService">
<property name="startupTransactionService" value="false" />
<property name="forceShutdown" value="false" />
</bean>
<bean id="AtomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp" depends-on="userTransactionService">
<property name="transactionTimeout" value="300" />
</bean>
<!-- //================= TX BEANS =================// -->
<bean id="JtaTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" depends-on="userTransactionService">
<property name="transactionManager" ref="AtomikosTransactionManager" />
<property name="userTransaction" ref="AtomikosUserTransaction" />
</bean>
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="bean(inputChannel)" />
</aop:config>
<tx:advice id="txAdvice" transaction-manager="JtaTransactionManager">
<tx:attributes>
<tx:method name="send" />
</tx:attributes>
</tx:advice>
谢谢您的帮助。已解决,只需删除文件tmlog.lck和tmlog6.log已解决,只需删除文件tmlog.lck和tmlog6.log很高兴听到!请将您的解决方案描述为一个答案,并接受它以从“未回答”堆中筛选此问题
<bean id="inputChannelQueue" class="org.apache.activemq.command.ActiveMQQueue">
<constructor-arg value="INPUT" />
</bean>
<jms:channel id="inputChannel" queue="inputChannelQueue">
<jms:interceptors>
<int:wire-tap channel="inputLoggingChannel"/>
</jms:interceptors>
</jms:channel>
<jms:message-driven-channel-adapter id="MQInboundGateway"
connection-factory="mqConnectionFactoryCache"
destination="mqInboundQueue"
channel="inputChannel"
concurrent-consumers="20"
cache-level="3" acknowledge="transacted" />
.
. //OTHER SPRING INTEGRATION ELEMENTS
.
<int:channel id="concentradorOutputChannel" /> //Final Channel to the output adapter.
<!-- ATOMIKOS BEANS -->
<bean id="userTransactionService" class="com.atomikos.icatch.config.UserTransactionServiceImp" init-method="init" destroy-method="shutdownForce">
<constructor-arg>
<!-- IMPORTANT: specify all Atomikos properties here -->
<props>
<prop key="com.atomikos.icatch.service">
com.atomikos.icatch.standalone.UserTransactionServiceFactory
</prop>
</props>
</constructor-arg>
</bean>
<bean id="AtomikosTransactionManager" class="com.atomikos.icatch.jta.UserTransactionManager" init-method="init" destroy-method="close" depends-on="userTransactionService">
<property name="startupTransactionService" value="false" />
<property name="forceShutdown" value="false" />
</bean>
<bean id="AtomikosUserTransaction" class="com.atomikos.icatch.jta.UserTransactionImp" depends-on="userTransactionService">
<property name="transactionTimeout" value="300" />
</bean>
<!-- //================= TX BEANS =================// -->
<bean id="JtaTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager" depends-on="userTransactionService">
<property name="transactionManager" ref="AtomikosTransactionManager" />
<property name="userTransaction" ref="AtomikosUserTransaction" />
</bean>
<aop:config>
<aop:advisor advice-ref="txAdvice" pointcut="bean(inputChannel)" />
</aop:config>
<tx:advice id="txAdvice" transaction-manager="JtaTransactionManager">
<tx:attributes>
<tx:method name="send" />
</tx:attributes>
</tx:advice>