2

Я пытаюсь сделать транзакционный весь поток интеграции Spring, поток начинается с адаптера в очередь IBM MQ, а затем мы имеем сложный поток с очередями ActiveMQ, и я получаю com.atomikos.icatch.HeurHazardException: эвристическое исключение, когда atomikos пытается зарегистрировать ресурсы.JAVA - Spring Integration Flow Transaction + com.atomikos.icatch.HeurHazardException: эвристическое исключение

Это мое приложениеContext.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> 

Это исключение:

INFO com.atomikos.icatch.config.imp.AbstractUserTransactionService USING core version: 3.9.3 
INFO com.atomikos.icatch.config.imp.AbstractUserTransactionService USING com.atomikos.icatch.automatic_resource_registration = true 
INFO com.atomikos.icatch.config.imp.AbstractUserTransactionService USING com.atomikos.icatch.client_demarcation = false 
INFO com.atomikos.icatch.config.imp.AbstractUserTransactionService USING com.atomikos.icatch.threaded_2pc = false 
INFO com.atomikos.icatch.config.imp.AbstractUserTransactionService USING com.atomikos.icatch.serial_jta_transactions = true 
INFO com.atomikos.icatch.config.imp.AbstractUserTransactionService USING com.atomikos.icatch.serializable_logging = true 
INFO com.atomikos.icatch.config.imp.AbstractUserTransactionService USING com.atomikos.icatch.log_base_dir = .\ 
INFO com.atomikos.icatch.config.imp.AbstractUserTransactionService USING com.atomikos.icatch.max_actives = 50 
INFO com.atomikos.icatch.config.imp.AbstractUserTransactionService USING com.atomikos.icatch.checkpoint_interval = 500 
INFO com.atomikos.icatch.config.imp.AbstractUserTransactionService USING com.atomikos.icatch.enable_logging = true 
INFO com.atomikos.icatch.config.imp.AbstractUserTransactionService USING com.atomikos.icatch.output_dir = .\ 
INFO com.atomikos.icatch.config.imp.AbstractUserTransactionService USING com.atomikos.icatch.log_base_name = tmlog 
INFO com.atomikos.icatch.config.imp.AbstractUserTransactionService USING com.atomikos.icatch.max_timeout = 300000 
INFO com.atomikos.icatch.config.imp.AbstractUserTransactionService USING com.atomikos.icatch.tm_unique_name = 10.200.204.8.tm 
INFO com.atomikos.icatch.config.imp.AbstractUserTransactionService USING java.naming.factory.initial = com.sun.jndi.rmi.registry.RegistryContextFactory 
INFO com.atomikos.icatch.config.imp.AbstractUserTransactionService USING java.naming.provider.url = rmi://localhost:1099 
INFO com.atomikos.icatch.config.imp.AbstractUserTransactionService USING com.atomikos.icatch.service = com.atomikos.icatch.standalone.UserTransactionServiceFactory 
INFO com.atomikos.icatch.config.imp.AbstractUserTransactionService USING com.atomikos.icatch.force_shutdown_on_vm_exit = false 
INFO com.atomikos.icatch.config.imp.AbstractUserTransactionService USING com.atomikos.icatch.default_jta_timeout = 10000 
WARN com.atomikos.datasource.xa.XAResourceTransaction XAResourceTransaction 10.200.204.8.tm001540002610.200.204.8.tm157: no XAResource to commit - the required resource is probably not yet intialized? 
WARN com.atomikos.icatch.imp.CommitMessage Unexpected error in commit 
com.atomikos.icatch.HeurHazardException: Heuristic Exception 
at com.atomikos.datasource.xa.XAResourceTransaction.commit(XAResourceTransaction.java:707) 
at com.atomikos.icatch.imp.CommitMessage.send(CommitMessage.java:72) 
at com.atomikos.icatch.imp.PropagationMessage.submit(PropagationMessage.java:83) 
at com.atomikos.icatch.imp.Propagator$PropagatorThread.run(Propagator.java:79) 
at com.atomikos.icatch.imp.Propagator.submitPropagationMessage(Propagator.java:58) 
at com.atomikos.icatch.imp.HeurHazardStateHandler.onTimeout(HeurHazardStateHandler.java:131) 
at com.atomikos.icatch.imp.CoordinatorImp.alarm(CoordinatorImp.java:933) 
at com.atomikos.timing.PooledAlarmTimer.notifyListeners(PooledAlarmTimer.java:112) 
at com.atomikos.timing.PooledAlarmTimer.run(PooledAlarmTimer.java:99) 
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145) 
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615) 
at java.lang.Thread.run(Thread.java:744) 

мне нужен весь поток от inputChannel к concentradorOutputChannel, чтобы быть в пределах TX.

Благодарим за помощь.

+0

решена, просто необходимо, чтобы удалить файлы tmlog.lck и tmlog6.log –

+0

Рад слышать! Пожалуйста, опишите свое решение в качестве ответа и примите его, чтобы отфильтровать этот вопрос с «неотвеченной» кучи –

ответ

6

решена, просто необходимо, чтобы удалить файлы tmlog.lck и tmlog6.log

+0

выглядит так, как будто это сработало для меня тоже .... хотя не знаю, в чем причина :( – Manglesh

Смежные вопросы