PDA

View Full Version : JMS MessagingGateway with non transactional receiver



snicoll
Feb 16th, 2010, 09:34 AM
Hi,

I am trying to setup a MessageGateway based on a request/reply managed by JMS queues. The setup was not easy at all but I got something (see http://forum.springsource.org/showthread.php?t=82102).

My problem is the following, the gateway should not be transactional since it will launch a lengthy process (transaction timeout). I tried to setup a DefaultMessageListenerContainer for the chunkReceiver with transacted set to false and no tx manager. Still I get this



2010-02-16 16:18:54 [requestContainer-3] DualSessionWrapper [ERROR] error closing session
[INFO] [talledLocalContainer] javax.jms.JMSException: Session's XAResource has not been enlisted in a distributed transaction.
[INFO] [talledLocalContainer] at org.apache.activemq.ActiveMQXASession.doStartTrans action(ActiveMQXASession.java:109)
[INFO] [talledLocalContainer] at org.apache.activemq.ActiveMQMessageConsumer.acknow ledge(ActiveMQMessageConsumer.java:837)
[INFO] [talledLocalContainer] at org.apache.activemq.ActiveMQMessageConsumer.dispos e(ActiveMQMessageConsumer.java:658)
[INFO] [talledLocalContainer] at org.apache.activemq.ActiveMQSession.dispose(Active MQSession.java:575)
[INFO] [talledLocalContainer] at org.apache.activemq.ActiveMQSession.close(ActiveMQ Session.java:547)
[INFO] [talledLocalContainer] at bitronix.tm.resource.jms.DualSessionWrapper.stateC hanged(DualSessionWrapper.java:166)
[INFO] [talledLocalContainer] at bitronix.tm.resource.common.AbstractXAStatefulHold er.fireStateChanged(AbstractXAStatefulHolder.java: 72)
[INFO] [talledLocalContainer] at bitronix.tm.resource.common.AbstractXAStatefulHold er.setState(AbstractXAStatefulHolder.java:43)
[INFO] [talledLocalContainer] at bitronix.tm.resource.jms.DualSessionWrapper.stateC hanged(DualSessionWrapper.java:149)
[INFO] [talledLocalContainer] at bitronix.tm.resource.common.AbstractXAStatefulHold er.fireStateChanged(AbstractXAStatefulHolder.java: 72)
[INFO] [talledLocalContainer] at bitronix.tm.resource.common.AbstractXAStatefulHold er.setState(AbstractXAStatefulHolder.java:43)
[INFO] [talledLocalContainer] at bitronix.tm.resource.common.TransactionContextHelp er.requeue(TransactionContextHelper.java:115)
[INFO] [talledLocalContainer] at bitronix.tm.resource.jms.DualSessionWrapper.close( DualSessionWrapper.java:132)
[INFO] [talledLocalContainer] at org.springframework.jms.support.JmsUtils.closeSess ion(JmsUtils.java:108)
[INFO] [talledLocalContainer] at org.springframework.jms.listener.DefaultMessageLis tenerContainer$AsyncMessageListenerInvoker.clearRe sources(DefaultMessageListenerContainer.java:1020)
[INFO] [talledLocalContainer] at org.springframework.jms.listener.DefaultMessageLis tenerContainer$AsyncMessageListenerInvoker.run(Def aultMessageListenerContainer.java:887)
[INFO] [talledLocalContainer] at java.lang.Thread.run(Thread.java:595)


I don't want to have two different connection factories for all this. I just want one connectionFactory and use a mixed of transactional/ non transctional MDBs (in different message listener container of course).

any idea?