Hi All
I have the following sa configuration
jms -> pipeline -> bean -> DB
|
jms < -
Scenario is simple - take the message from queue, persist it to DB and
return to another queue
All in one transaction, transaction manager was taken from JNDI. Datasource
too.
Also I add some code in bean to do
exchange.setFault if special message context. ( <Fault/> for example) come
from the queue.
This works fine - normal message persist to DB and the result of the
<Fault/> content
is rollback of the transaction.
But if I do nothing for 60 second, exception occured and session was closed
for unknown
reasons. Same result I got if do not send anything after Servicemix restart.
Please tell me what happens here?
Exception text:
17:01:54,671 | WARN | DefaultMessageListenerContainer-6 | Transaction
| action.manager.TransactionImpl 536 | Unexpected exception from afterComp
letion; continuing
java.lang.RuntimeException: javax.jms.IllegalStateException: The Session is
closed
at
org.jencks.amqpool.XaConnectionPool$Synchronization.afterCompletion(XaConnectionPool.java:92)
at
org.apache.geronimo.transaction.manager.TransactionImpl.afterCompletion(TransactionImpl.java:534)
at
org.apache.geronimo.transaction.manager.TransactionImpl.afterCompletion(TransactionImpl.java:527)
at
org.apache.geronimo.transaction.manager.TransactionImpl.rollback(TransactionImpl.java:490)
at
org.apache.geronimo.transaction.manager.TransactionManagerImpl.rollback(TransactionManagerImpl.java:250)
at
org.springframework.transaction.jta.JtaTransactionManager.doRollback(JtaTransactionManager.java:863)
at
org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:753)
at
org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:730)
at
org.jencks.GeronimoPlatformTransactionManager.rollback(GeronimoPlatformTransactionManager.java:80)
at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.rollbackOnException(AbstractPollingMessageListenerContainer.java:356)
at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:241)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:871
)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:811)
at java.lang.Thread.run(Thread.java:595)
Caused by: javax.jms.IllegalStateException: The Session is closed
at
org.apache.activemq.ActiveMQSession.checkClosed(ActiveMQSession.java:581)
at
org.apache.activemq.ActiveMQSession.setMessageListener(ActiveMQSession.java:658)
at org.jencks.amqpool.PooledSession.close(PooledSession.java:91)
at
org.jencks.amqpool.XaConnectionPool$Synchronization.afterCompletion(XaConnectionPool.java:89)
... 13 more
17:01:54,671 | ERROR | DefaultMessageListenerContainer-6 |
MessageListenerContainer | efaultMessageListenerContainer 667 | Setup of
JMS message listener invok
er failed - trying to recover
java.lang.IllegalArgumentException: XAResource is null
at
org.apache.geronimo.transaction.manager.TransactionImpl.enlistResource(TransactionImpl.java:162)
at
org.jencks.amqpool.XaConnectionPool.createSession(XaConnectionPool.java:56)
at
org.jencks.amqpool.PooledConnection.createSession(PooledConnection.java:132)
at
org.springframework.jms.support.JmsAccessor.createSession(JmsAccessor.java:200)
at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.access$200(AbstractPollingMessageListenerContainer.java:75)
at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer$MessageListenerContainerResourceFactory.createSession(AbstractPollingMessag
eListenerContainer.java:465)
at
org.springframework.jms.connection.ConnectionFactoryUtils.doGetTransactionalSession(ConnectionFactoryUtils.java:252)
at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.doReceiveAndExecute(AbstractPollingMessageListenerContainer.java:278)
at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:234)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:871
)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:811)
at java.lang.Thread.run(Thread.java:595)
17:01:54,671 | WARN | DefaultMessageListenerContainer-7 | Transaction
| action.manager.TransactionImpl 536 | Unexpected exception from afterComp
letion; continuing
java.lang.RuntimeException: javax.jms.IllegalStateException: The Session is
closed
at
org.jencks.amqpool.XaConnectionPool$Synchronization.afterCompletion(XaConnectionPool.java:92)
at
org.apache.geronimo.transaction.manager.TransactionImpl.afterCompletion(TransactionImpl.java:534)
at
org.apache.geronimo.transaction.manager.TransactionImpl.afterCompletion(TransactionImpl.java:527)
at
org.apache.geronimo.transaction.manager.TransactionImpl.rollback(TransactionImpl.java:490)
at
org.apache.geronimo.transaction.manager.TransactionManagerImpl.rollback(TransactionManagerImpl.java:250)
at
org.springframework.transaction.jta.JtaTransactionManager.doRollback(JtaTransactionManager.java:863)
at
org.springframework.transaction.support.AbstractPlatformTransactionManager.processRollback(AbstractPlatformTransactionManager.java:753)
at
org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:730)
at
org.jencks.GeronimoPlatformTransactionManager.rollback(GeronimoPlatformTransactionManager.java:80)
at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.rollbackOnException(AbstractPollingMessageListenerContainer.java:356)
at
org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:241)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:871
)
at
org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:811)
at java.lang.Thread.run(Thread.java:595)
Caused by: javax.jms.IllegalStateException: The Session is closed
at
org.apache.activemq.ActiveMQSession.checkClosed(ActiveMQSession.java:581)
at
org.apache.activemq.ActiveMQSession.setMessageListener(ActiveMQSession.java:658)
at org.jencks.amqpool.PooledSession.close(PooledSession.java:91)
...
Parts of xbean.xml for jms-su
<jms:consumer service="b:jmsin" endpoint="endpoint"
targetService="b:pipeline1" destinationName="aaa.request.in"
connectionFactory="#connectionFactory" transacted="xa" />
<jms:provider service="b:jmsout" endpoint="endpoint"
destinationName="aaa.request.out" connectionFactory="#connectionFactory" />
<bean id="connectionFactory"
class="org.jencks.amqpool.XaPooledConnectionFactory">
<constructor-arg value="tcp://localhost:61616"/>
<property name="maxConnections" value="8" />
<property name="transactionManager" ref="txMgr" />
</bean>
<bean id="txMgr" class="org.springframework.jndi.JndiObjectFactoryBean">
<property name="jndiName" value="java:comp/env/smx/TransactionManager" />
</bean>