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>

Reply via email to