JmsXA and remote queues
rlamie Oct 21, 2009 1:14 PMEnv : JBoss 4.2.3, JbossMQ shipped with Jboss 4.2.3
Hi all,
I have a pretty simple question, but dont manage to find the solution through google/forum searchs.
Inside an MDB, I need to enlist the sending of JMS messages in a JTA transaction. The queue is a remote queue located on another JBossMQ server.
The need to enlist in a JTA transaction with multiples resources decided me to turn to JmsXA pool.
Here is the code :
@MessageDriven( activationConfig = {...}... @PoolClass (value=org.jboss.ejb3.StrictMaxPool.class, maxSize=1, timeout=30000) @Depends("jboss.j2ee:service=EARDeployment,url='xxx.ear'") public class Test1MDB implements MessageListener { public void onMessage(Message msg) { ... do operations on database (XADataSource) Context jndi = new InitialContext(); QueueConnection connection = (QueueConnectionFactory) jndi.lookup("java:JmsXA"); QueueSession = connection.createQueueSession(true, QueueSession.AUTO_ACKNOWLEDGE); Queue queue = (Queue) jndi.lookup("jnp://174.54.12.144:1099/queue/test2"); QueueSender sender = session.createSender(queue); ObjectMessage msg = MessageHelper.create(session, messageDTO); sender.send(msg); ... }
The result is that code works well if I target a local queue, but fails when I target a remote queue (like in my example). I add that the queues targeted are test queues (created temporarly by the MDB)
The following logs appear at the end of the onMessage method (commit time) :
16:53:40,413 WARN [loggerI18N] [com.arjuna.ats.internal.jta.resources.arjunacore.preparefailed] [com.arjuna.ats.internal.jta.resources.arjunacore.preparefailed] XAResourceRecord.prepare - prepare failed with exception XAException.XAER_RMFAIL 16:53:40,416 WARN [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.BasicAction_50] - Prepare phase of action 7f000101:81ea:4adf0cd5:1255 received heuristic decision: TwoPhaseOutcome.HEURISTIC_HAZARD 16:53:40,416 WARN [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.BasicAction_36] - BasicAction.End() - prepare phase of action-id 7f000101:81ea:4adf0cd5:1255 failed. 16:53:40,416 WARN [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.BasicAction_37] - Received heuristic: TwoPhaseOutcome.HEURISTIC_HAZARD . 16:53:40,416 WARN [arjLoggerI18N] [com.arjuna.ats.arjuna.coordinator.BasicAction_38] - Action Aborting
And it chains to replay the same input message, until the following exception occurs :
16:53:40,449 ERROR [JmsServerSession] org.jboss.resource.adapter.jms.inflow.JmsServerSession@1c7811a failed to commit/rollback javax.transaction.HeuristicMixedException at com.arjuna.ats.internal.jta.transaction.arjunacore.TransactionImple.commitAndDisassociate(TransactionImple.java:1397) at com.arjuna.ats.internal.jta.transaction.arjunacore.BaseTransaction.commit(BaseTransaction.java:135) at com.arjuna.ats.jbossatx.BaseTransactionManagerDelegate.commit(BaseTransactionManagerDelegate.java:87) at org.jboss.resource.adapter.jms.inflow.JmsServerSession$XATransactionDemarcationStrategy.end(JmsServerSession.java:494) at org.jboss.resource.adapter.jms.inflow.JmsServerSession.run(JmsServerSession.java:248) at org.jboss.resource.work.WorkWrapper.execute(WorkWrapper.java:204) at org.jboss.util.threadpool.BasicTaskWrapper.run(BasicTaskWrapper.java:275) at EDU.oswego.cs.dl.util.concurrent.PooledExecutor$Worker.run(PooledExecutor.java:756) at java.lang.Thread.run(Thread.java:595)
Strangely, that occurs only for remote queues.
Any pointers?
Thank you for your help.
RL