I did not debug myself, but I got an answer from Hiram (Core Developers Network). Here is the quote from his answer. I did not get the time to investigate further or try some of Hiram suggestions.
The JMS ASF spec is a little weak in describing who/how the inbound XA transaction gets started.
The only way JBossMQ was able to implement the ASF spec was by starting the transaction without an associated XID. Once the message gets delivered to the container, JBossMQ allows the container to associate an XID with the session. The session then assigns the XID to the TX that delivered the message. JBossMQ had to kind of jump through hoops to get this to work.
It would have been much easier to allow JBossMQ to assign an XID to the transaction to begin with. WebSphere MQ might be trying to do something like that. But since it's not in the JMS ASF spec, IBM would need to tell us what MQ is expecting (outside the spec) to get the asynch message delivery to work.
Other ways to skin this cat:
Don't use the current MDB container invoker (which uses the ASF to do asynch message delivery). Write a new MDB container invoker that does synchronous Receiver.receive() calls to get messages. The problem with this approach is that you need to start a JTA TX before you do the receive() and our current TM will timeout the TXs that take too long. A solution my be to use receiveNoWait() instead.
Implement a MDB container invoker using the new JCA TX inflow stuff. I have not had time to look into this yet or if MQ has a JCA resource adapter but this would be the best solution.
-----Original Message-----
From: Adrian Brock [mailto:[EMAIL PROTECTED]]
Sent: Wednesday, June 25, 2003 10:26 AM
To: [EMAIL PROTECTED]
Subject: RE: [JBoss-user] JBoss 3.2 and MQSeries trouble
I missed this post.
What is the issue with the MDB not getting
any messages from an XAConnection?
Did you have time to debug it?
xxxxxxxxxxxxxxxxxxxxxxxx
Adrian Brock
Director of Support
Back Office
JBoss Group, LLC
xxxxxxxxxxxxxxxxxxxxxxxx
> -----Original Message-----
> From: [EMAIL PROTECTED]
> [mailto:[EMAIL PROTECTED]] On Behalf Of
> [EMAIL PROTECTED]
> Sent: 25 June 2003 14:28
> To: [EMAIL PROTECTED]
> Subject: RE: [JBoss-user] JBoss 3.2 and MQSeries trouble
>
>
>
> I am wondering if the error you get is not because the
> connection mode used
> to connect to MQ is "binding" and JBoss will need to be on
> the same machine
> as the MQ queue manager as well as a lot of MQ dlls that must
> be in the
> path.
>
> Take a look at the following patch (753022) submitted to JBoss:
> http://sourceforge.net/tracker/index.php?func=detail&aid=75302
> 2&group_id=228
> 66&atid=376687
> You will get a lot of extra details as well as a better way
> to register
> factories/queues in JBoss.
> Feedback on the patch is more than welcome.
>
> Thomas
>
> -----Original Message-----
> From: Stefano Maestri [mailto:[EMAIL PROTECTED]]
> Sent: Wednesday, June 25, 2003 8:47 AM
> To: [EMAIL PROTECTED]
> Subject: [JBoss-user] JBoss 3.2 and MQSeries trouble
>
> I'm trying to configure JBoss to use websphere MQ 5.3 (alias
> MQSeries 5.3).
> I
> read the thread on Jboss group abou and I configured JBoss
> addin this row in
>
> jboss file:
> jms-ds.xml:
>
> <!-- The MQSeries provider loader -->
> <mbean code="org.jboss.jms.jndi.JMSProviderLoader"
> name="jboss.mq:service=JMSProviderLoader,name=JMSMQSeriesProvider">
> <attribute name="ProviderName">MQSeriesProvider</attribute>
> <attribute name="ProviderAdapterClass">
> org.jboss.jms.jndi.JBossMQProvider
> </attribute>
> <attribute name="QueueFactoryRef">QueueConnectionFactory</attribute>
> <attribute
> name="TopicFactoryRef">java:/XAConnectionFactory</attribute>
> </mbean>
>
> standardjboss.xml:
>
> <invoker-proxy-binding>
> <name>MQmessage-driven-bean</name>
> <invoker-mbean>default</invoker-mbean>
>
> <proxy-factory>org.jboss.ejb.plugins.jms.JMSContainerInvoker</
proxy-factory>
> <proxy-factory-config>
> <JMSProviderAdapterJNDI>MQSeriesProvider</JMSProviderAdapterJNDI>
>
> <ServerSessionPoolFactoryJNDI>StdJMSPool</ServerSessionPoolFac
> toryJNDI>
> <MaximumSize>15</MaximumSize>
> <MaxMessages>1</MaxMessages>
> <Optimized>True</Optimized>
> <MDBConfig>
> <ReconnectIntervalSec>10</ReconnectIntervalSec>
> <DLQConfig>
> <DestinationQueue>queue/DLQ</DestinationQueue>
> <MaxTimesRedelivered>10</MaxTimesRedelivered>
> <TimeToLive>0</TimeToLive>
> </DLQConfig>
> </MDBConfig>
> </proxy-factory-config>
> </invoker-proxy-binding>
> .....
> .....
> <container-configuration>
> <container-name>MQSeries Message Driven Bean</container-name>
> <call-logging>false</call-logging>
>
> <invoker-proxy-binding-name>MQmessage-driven-bean</invoker-pro
> xy-binding-nam
> e>
> <container-interceptors>
>
> <interceptor>org.jboss.ejb.plugins.ProxyFactoryFinderIntercept
> or</intercepto
> r>
> <interceptor>org.jboss.ejb.plugins.LogInterceptor</interceptor>
>
> <interceptor>org.jboss.ejb.plugins.RunAsSecurityInterceptor</i
> nterceptor>
> <!-- CMT -->
> <interceptor
> transaction="Container">org.jboss.ejb.plugins.TxInterceptorCMT
> </interceptor>
> <interceptor transaction="Container"
> metricsEnabled="true">org.jboss.ejb.plugins.MetricsInterceptor
> </interceptor>
> <interceptor
> transaction="Container">org.jboss.ejb.plugins.MessageDrivenIns
> tanceIntercept
> or</interceptor>
> <!-- BMT -->
> <interceptor
> transaction="Bean">org.jboss.ejb.plugins.MessageDrivenInstance
> Interceptor</i
> nterceptor>
> <interceptor
> transaction="Bean">org.jboss.ejb.plugins.MessageDrivenTxInterc
> eptorBMT</inte
> rceptor>
> <interceptor transaction="Bean"
> metricsEnabled="true">org.jboss.ejb.plugins.MetricsInterceptor
> </interceptor>
>
> <interceptor>org.jboss.resource.connectionmanager.CachedConnec
> tionIntercepto
> r</interceptor>
> </container-interceptors>
>
> <instance-pool>org.jboss.ejb.plugins.MessageDrivenInstancePool
> </instance-poo
> l>
> <instance-cache></instance-cache>
> <persistence-manager></persistence-manager>
> <transaction-manager>org.jboss.tm.TxManager</transaction-manager>
> <container-pool-conf>
> <MaximumSize>100</MaximumSize>
> </container-pool-conf>
> </container-configuration>
>
> And into jboss.xml:
>
> <jboss>
>
> <enterprise-beans>
>
> <message-driven>
> <ejb-name>enlaceMQBean</ejb-name>
> <configuration-name>MQSeries Message Driven Bean</configuration-name>
> <destination-jndi-name>queue/MQqueue</destination-jndi-name>
> </message-driven>
> </jboss>
>
> I added this jar to jboss lib dir:
> com.ibm.mq.jar
> com.ibm.mqjms.jar
> com.ibm.mqbind.jar
> fscontext.jar
> providerutil.jar
>
> then in MQSeries I edited JMSAdmin.config with this value
> INITIAL_CONTEXT_FACTORY=org.jnp.interfaces.NamingContextFactory
> PROVIDER_URL=jnp://localhost:1099
>
> And then I used to register in jndi the mq queues:
>
> def qcf(MQQueueConnectionFactory) qmanager(venus.queue.manager)
> change ctx(queue)
> def q(RequestQueue) qmanager(venus.queue.manager) queue(orange.queue)
>
> But when I deploy my bean I get this error
> 2:52:04,804 INFO [DLQHandler] Creating
> 12:52:04,812 ERROR [DLQHandler] Initialization failed
> javax.jms.JMSException: Error creating the dlq connection: null
> at
> org.jboss.ejb.plugins.jms.DLQHandler.createService(DLQHandler.
> java:152)
> at
> org.jboss.system.ServiceMBeanSupport.create(ServiceMBeanSuppor
> t.java:158)
> at
> org.jboss.ejb.plugins.jms.JMSContainerInvoker.innerCreate(JMSC
> ontainerInvoke
> r.java:394)
> at
> org.jboss.ejb.plugins.jms.JMSContainerInvoker.startService(JMS
> ContainerInvok
> er.java:579)
> at
> org.jboss.system.ServiceMBeanSupport.start(ServiceMBeanSupport
> .java:192)
> at
> org.jboss.ejb.MessageDrivenContainer.startService(MessageDrive
> nContainer.jav
> a:220)
> at
> org.jboss.system.ServiceMBeanSupport.start(ServiceMBeanSupport
> .java:192)
> at sun.reflect.GeneratedMethodAccessor8.invoke(Unknown Source)
> at
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMeth
> odAccessorImpl
> .java:25)
> at java.lang.reflect.Method.invoke(Method.java:324)
> at
> org.jboss.mx.capability.ReflectedMBeanDispatcher.invoke(Reflec
> tedMBeanDispat
> cher.java:284)
> at
> org.jboss.mx.server.MBeanServerImpl.invoke(MBeanServerImpl.java:549)
> at
> org.jboss.system.ServiceController$ServiceProxy.invoke(Service
> Controller.jav
> a:966)
> at $Proxy11.start(Unknown Source)
> [...]
>
> Please help me.
> Thanks in advance.
>
> --
> --------------- all work and no play makes Jack a dull boy
> ---------------
> bye Stefano
> [EMAIL PROTECTED]
> www.javalinux.it
> MSN messanger: [EMAIL PROTECTED]
> ICQ uin: 122192578
> Jabber: canezen
> Yahoo MSN: canezen
> #jedit IRC channel as <maeste>
>
>
> -------------------------------------------------------
> This SF.Net email is sponsored by: INetU
> Attention Web Developers & Consultants: Become An INetU
> Hosting Partner.
> Refer Dedicated Servers. We Manage Them. You Get 10% Monthly
> Commission!
> INetU Dedicated Managed Hosting http://www.inetu.net/partner/index.php
> _______________________________________________
> JBoss-user mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/jboss-user
>
>
> -------------------------------------------------------
> This SF.Net email is sponsored by: INetU
> Attention Web Developers & Consultants: Become An INetU
> Hosting Partner.
> Refer Dedicated Servers. We Manage Them. You Get 10% Monthly
> Commission!
> INetU Dedicated Managed Hosting http://www.inetu.net/partner/index.php
> _______________________________________________
> JBoss-user mailing list
> [EMAIL PROTECTED]
> https://lists.sourceforge.net/lists/listinfo/jboss-user
>
-------------------------------------------------------
This SF.Net email is sponsored by: INetU
Attention Web Developers & Consultants: Become An INetU Hosting Partner.
Refer Dedicated Servers. We Manage Them. You Get 10% Monthly Commission!
INetU Dedicated Managed Hosting http://www.inetu.net/partner/index.php
_______________________________________________
JBoss-user mailing list
[EMAIL PROTECTED]
https://lists.sourceforge.net/lists/listinfo/jboss-user
