Description
The following error is generated when trying to configure ActiveMQ with JTA/XA
15:09:39,373 | WARN | tenerContainer-1 | PooledSession | 47 - org.apache.activemq.activemq-pool - 5.4.2.fuse-03-09 | Caught exception trying rollback() when putting session back into the pool: javax.jms.TransactionInProgressException: Cannot rollback() inside an XASession javax.jms.TransactionInProgressException: Cannot rollback() inside an XASession at org.apache.activemq.ActiveMQXASession.rollback(ActiveMQXASession.java:76) at org.apache.activemq.pool.PooledSession.close(PooledSession.java:111) at org.apache.activemq.pool.XaConnectionPool$Synchronization.afterCompletion(XaConnectionPool.java:90) at org.apache.geronimo.transaction.manager.TransactionImpl.afterCompletion(TransactionImpl.java:542) at org.apache.geronimo.transaction.manager.TransactionImpl.afterCompletion(TransactionImpl.java:535) at org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:326) at org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(TransactionManagerImpl.java:250) at org.springframework.transaction.jta.JtaTransactionManager.doCommit(JtaTransactionManager.java:1009) at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754) at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723) at org.apache.aries.transaction.GeronimoPlatformTransactionManager.commit(GeronimoPlatformTransactionManager.java:76) at sun.reflect.GeneratedMethodAccessor519.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)[:1.6.0_24] at java.lang.reflect.Method.invoke(Method.java:597)[:1.6.0_24] at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)[60:org.springframework.aop:3.0.5.RELEASE] at org.springframework.osgi.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:58)[71:org.springframework.osgi.core:1.2.0] at org.springframework.osgi.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:62)[71:org.springframework.osgi.core:1.2.0] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)[60:org.springframework.aop:3.0.5.RELEASE] at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131)[60:org.springframework.aop:3.0.5.RELEASE] at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119)[60:org.springframework.aop:3.0.5.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)[60:org.springframework.aop:3.0.5.RELEASE] at org.springframework.osgi.service.util.internal.aop.ServiceTCCLInterceptor.invokeUnprivileged(ServiceTCCLInterceptor.java:56)[71:org.springframework.osgi.core:1.2.0] at org.springframework.osgi.service.util.internal.aop.ServiceTCCLInterceptor.invoke(ServiceTCCLInterceptor.java:39)[71:org.springframework.osgi.core:1.2.0] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)[60:org.springframework.aop:3.0.5.RELEASE] at org.springframework.osgi.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:59)[71:org.springframework.osgi.core:1.2.0] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)[60:org.springframework.aop:3.0.5.RELEASE] at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131)[60:org.springframework.aop:3.0.5.RELEASE] at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119)[60:org.springframework.aop:3.0.5.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)[60:org.springframework.aop:3.0.5.RELEASE] at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)[60:org.springframework.aop:3.0.5.RELEASE] at $Proxy409.commit(Unknown Source)[:] at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:257)[110:org.springframework.jms:3.0.5.RELEASE] at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1058)[110:org.springframework.jms:3.0.5.RELEASE] at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1050)[110:org.springframework.jms:3.0.5.RELEASE] at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:947)[110:org.springframework.jms:3.0.5.RELEASE] at java.lang.Thread.run(Thread.java:680)[:1.6.0_24] 15:09:39,381 | WARN | tenerContainer-1 | Transaction | 49 - org.apache.aries.transaction.manager - 0.2.0.incubating | Unexpected exception from afterCompletion; continuing java.lang.RuntimeException: javax.jms.JMSException: Failed to invalidate session: org.apache.activemq.AlreadyClosedException: Cannot use The session has already been closed as it has already been closed at org.apache.activemq.pool.XaConnectionPool$Synchronization.afterCompletion(XaConnectionPool.java:93) at org.apache.geronimo.transaction.manager.TransactionImpl.afterCompletion(TransactionImpl.java:542) at org.apache.geronimo.transaction.manager.TransactionImpl.afterCompletion(TransactionImpl.java:535) at org.apache.geronimo.transaction.manager.TransactionImpl.commit(TransactionImpl.java:326) at org.apache.geronimo.transaction.manager.TransactionManagerImpl.commit(TransactionManagerImpl.java:250) at org.springframework.transaction.jta.JtaTransactionManager.doCommit(JtaTransactionManager.java:1009) at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754) at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723) at org.apache.aries.transaction.GeronimoPlatformTransactionManager.commit(GeronimoPlatformTransactionManager.java:76) at sun.reflect.GeneratedMethodAccessor519.invoke(Unknown Source) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)[:1.6.0_24] at java.lang.reflect.Method.invoke(Method.java:597)[:1.6.0_24] at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:309)[60:org.springframework.aop:3.0.5.RELEASE] at org.springframework.osgi.service.importer.support.internal.aop.ServiceInvoker.doInvoke(ServiceInvoker.java:58)[71:org.springframework.osgi.core:1.2.0] at org.springframework.osgi.service.importer.support.internal.aop.ServiceInvoker.invoke(ServiceInvoker.java:62)[71:org.springframework.osgi.core:1.2.0] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)[60:org.springframework.aop:3.0.5.RELEASE] at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131)[60:org.springframework.aop:3.0.5.RELEASE] at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119)[60:org.springframework.aop:3.0.5.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)[60:org.springframework.aop:3.0.5.RELEASE] at org.springframework.osgi.service.util.internal.aop.ServiceTCCLInterceptor.invokeUnprivileged(ServiceTCCLInterceptor.java:56)[71:org.springframework.osgi.core:1.2.0] at org.springframework.osgi.service.util.internal.aop.ServiceTCCLInterceptor.invoke(ServiceTCCLInterceptor.java:39)[71:org.springframework.osgi.core:1.2.0] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)[60:org.springframework.aop:3.0.5.RELEASE] at org.springframework.osgi.service.importer.support.LocalBundleContextAdvice.invoke(LocalBundleContextAdvice.java:59)[71:org.springframework.osgi.core:1.2.0] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)[60:org.springframework.aop:3.0.5.RELEASE] at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:131)[60:org.springframework.aop:3.0.5.RELEASE] at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:119)[60:org.springframework.aop:3.0.5.RELEASE] at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:172)[60:org.springframework.aop:3.0.5.RELEASE] at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:202)[60:org.springframework.aop:3.0.5.RELEASE] at $Proxy409.commit(Unknown Source)[:] at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:257)[110:org.springframework.jms:3.0.5.RELEASE] at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1058)[110:org.springframework.jms:3.0.5.RELEASE] at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.executeOngoingLoop(DefaultMessageListenerContainer.java:1050)[110:org.springframework.jms:3.0.5.RELEASE] at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:947)[110:org.springframework.jms:3.0.5.RELEASE] at java.lang.Thread.run(Thread.java:680)[:1.6.0_24] Caused by: javax.jms.JMSException: Failed to invalidate session: org.apache.activemq.AlreadyClosedException: Cannot use The session has already been closed as it has already been closed at org.apache.activemq.util.JMSExceptionSupport.create(JMSExceptionSupport.java:35) at org.apache.activemq.pool.SessionPool.invalidateSession(SessionPool.java:77) at org.apache.activemq.pool.PooledSession.close(PooledSession.java:123) at org.apache.activemq.pool.XaConnectionPool$Synchronization.afterCompletion(XaConnectionPool.java:90) ... 33 more Caused by: org.apache.activemq.AlreadyClosedException: Cannot use The session has already been closed as it has already been closed at org.apache.activemq.pool.PooledSession.getInternalSession(PooledSession.java:291) at org.apache.activemq.pool.SessionPool.destroyObject(SessionPool.java:90) at org.apache.commons.pool.impl.GenericObjectPool.invalidateObject(GenericObjectPool.java:1258) at org.apache.activemq.pool.SessionPool.invalidateSession(SessionPool.java:75)
Here is the config used to access to AMQ Broker
<!-- Tx Manager --> <osgi:reference id="txManager" interface="org.springframework.transaction.PlatformTransactionManager"/> <!-- Transaction POLICY used by Camel Transactional Route We refer to the ServiceMiX TxManager --> <bean id="PROPAGATION_REQUIRED" class="org.apache.camel.spring.spi.SpringTransactionPolicy"> <property name="transactionManager" ref="txManager"/> </bean> <bean id="activemq" class="org.apache.activemq.camel.component.ActiveMQComponent"> <!-- <property name="configuration" ref="jmsConfig"/> --> <property name="connectionFactory"> <osgi:reference interface="javax.jms.ConnectionFactory"/> </property> <property name="transactionManager" ref="txManager"/> <property name="transacted" value="true"/> <property name="cacheLevel" value="0" /> </bean> <camelContext id="camel" xmlns="http://camel.apache.org/schema/spring"> <route id="queue-create-incident"> <from uri="activemq:queue:incident"/> <transacted ref="PROPAGATION_REQUIRED"/> <log message=">>> Incident received : ${body}"/> <bean ref="processIncident" method="saveReport"/> <!-- <bean ref="processIncident" method="generateError"/> --> <log message=">>> Record inserted : ${body}"/> </route> 2) ActiveMQ <bean id="activemqConnectionFactory" class="org.apache.activemq.ActiveMQXAConnectionFactory"> <property name="brokerURL" value="tcp://localhost:61616" /> <property name="redeliveryPolicy" ref="redeliveryPolicy"/> </bean> <bean id="pooledConnectionFactory" class="org.apache.activemq.pool.XaPooledConnectionFactory"> <property name="maxConnections" value="8" /> <property name="connectionFactory" ref="activemqConnectionFactory" /> <property name="transactionManager" ref="transactionManager"/> </bean> <bean id="redeliveryPolicy" class="org.apache.activemq.RedeliveryPolicy"> <property name="maximumRedeliveries" value="0"/> </bean> <reference id="transactionManager" interface="javax.transaction.TransactionManager" /> <service ref="pooledConnectionFactory" interface="javax.jms.ConnectionFactory"> <service-properties> <entry key="name" value="localhost"/> </service-properties> </service>