Hi,
I am having a problem trying to migrate a Spring(2.5.6) based JMS MDP from weblogic to Glassfish (V2 UR2).
And im looking for some help, suggestions, or whatever information may help.
My MDP are all transactional, using XA transactions.
On weblogic im using the DefaultMessageListenerContainer with the WebLogicJtaTransactionManager and it works fine.
Now im porting it to Glassfish, so im still using a DefaultMessageListenerContainer and a JtaTransactionManager as a XA transaction manager. I am using Glassfish default transaction manager.
Both on Weblogic and Glassfish the connection factory are XA aware.
But sadly, under Glassfish the JMS Session Spring JMS listener uses is not transactional. And it should be transactional. Right?
I say the behaviour is not transactional, becouse the messages are not being consumed, becouse at commit time glassfish spits this error message:
and the message is not removed.Code:[#|2008-11-19T17:09:38.697+0100|WARNING|sun-appserver9.1|javax.jms.Session.mqjmsra|_ThreadID=24;_ThreadName=listenerContainerConsultas-2;_RequestID=1f4c26cf-8ad5-466d-9449-3f1509987c6f;|MQJMSRA_DS4001: commit():Illegal for a non-transacted Session:sessionId=705408957070699778|#]
I am doing something wrong in my applicationContext.xml?
Perphaps this scenario is not supported: by Spring?, by Glassfish?
Any sugestion?
Thanxs in advance.
This are the relevant part of applicationContext.xml (weblogic stuff commented)
Code:<!-- Beans listeners JMS --> <bean id="listenerContainerConsultas" class="org.springframework.jms.listener.DefaultMessageListenerContainer"> <property name="concurrentConsumers" value="5" /> <property name="maxConcurrentConsumers" value="5" /> <property name="idleTaskExecutionLimit" value="1" /> <!-- Time in minutes--> <property name="connectionFactory" ref="connectionFactoryConsultasAdapter" /> <property name="destination" ref="queueConsultas" /> <property name="messageListener" ref="messageListenerConsultas" /> <!--<property name="transactionManager" ref="webLogicTransactionManager" />--> <property name="transactionManager" ref="springTransactionManager" /> <property name="sessionTransacted" value="true"/> </bean> <bean id="springTransactionManager" class="org.springframework.transaction.jta.JtaTransactionManager"> <property name="transactionManagerName" value="java:appserver/TransactionManager"/> </bean> <!--<bean id="webLogicTransactionManager" class="org.springframework.transaction.jta.WebLogicJtaTransactionManager"> <property name="transactionManagerName" value="javax.transaction.TransactionManager"/> </bean>-->


Reply With Quote
