[jboss-user] [MQ] - JmsXA and remote queues

rlamie do-not-reply at jboss.com
Wed Oct 21 13:14:54 EDT 2009

Env : 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://");
  | 		  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 at 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.

View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4261554#4261554

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4261554

More information about the jboss-user mailing list