尝试提交jms事务时xa_commit失败

时间:2012-09-26 19:04:28

标签: oracle jms websphere ibm-mq xa

我们正在尝试将消息写入代理队列。但是当它尝试提交JMS事务时,整个请求失败了。然后它会尝试每次后续回滚。我们使用oracle XA驱动程序。不确定在哪里发布此问题:MQ论坛或Oracle论坛。所以想到这里试一试。有人可以帮忙解决这个问题。

错误:

[9/25/12 17:10:06:871 EDT] 0000003e XATransaction E   J2CA0027E: An exception occurred while invoking commit on an XA Resource Adapter from dataSource JMS$QCF$JMSManagedConnection@23, within transaction ID {XidImpl: formatId(57415344), gtrid_length(36), bqual_length(54), data(00000139ff43ef2500000001000043106c82332ef6bc723402e84f341fb357080ddd4d1b00000139ff43ef2500000001000043106c82332ef6bc723402e84f341fb357080ddd4d1b000000010000000000000000000000000001)}: javax.transaction.xa.XAException: The method 'xa_commit' has failed with errorCode '-7'.
    at com.ibm.mq.jmqi.JmqiXAResource.commit(JmqiXAResource.java:407)
    at com.ibm.ejs.jms.JMSManagedSession$JMSXAResource.commit(JMSManagedSession.java:1702)
    at com.ibm.ejs.j2c.XATransactionWrapper.commit(XATransactionWrapper.java:463)
    at com.ibm.ws.Transaction.JTA.JTAXAResourceImpl.commit_one_phase(JTAXAResourceImpl.java:305)
    at com.ibm.ws.Transaction.JTA.RegisteredResources.flowCommitOnePhase(RegisteredResources.java:2916)
    at com.ibm.ws.Transaction.JTA.TransactionImpl.commitXAResources(TransactionImpl.java:2533)
    at com.ibm.ws.Transaction.JTA.TransactionImpl.stage1CommitProcessing(TransactionImpl.java:1687)
    at com.ibm.ws.Transaction.JTA.TransactionImpl.processCommit(TransactionImpl.java:1647)
    at com.ibm.ws.Transaction.JTA.TransactionImpl.commit(TransactionImpl.java:1582)
    at com.ibm.ws.Transaction.JTA.TranManagerImpl.commit(TranManagerImpl.java:247)
    at com.ibm.ws.Transaction.JTA.TranManagerSet.commit(TranManagerSet.java:168)
    at com.ibm.ws.Transaction.JTA.UserTransactionImpl.commit(UserTransactionImpl.java:293)
    at org.springframework.transaction.jta.JtaTransactionManager.doCommit(JtaTransactionManager.java:1009)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.processCommit(AbstractPlatformTransactionManager.java:754)
    at org.springframework.transaction.support.AbstractPlatformTransactionManager.commit(AbstractPlatformTransactionManager.java:723)
    at org.springframework.jms.listener.AbstractPollingMessageListenerContainer.receiveAndExecute(AbstractPollingMessageListenerContainer.java:255)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.invokeListener(DefaultMessageListenerContainer.java:1002)
    at org.springframework.jms.listener.DefaultMessageListenerContainer$AsyncMessageListenerInvoker.run(DefaultMessageListenerContainer.java:901)
    at org.springframework.scheduling.commonj.DelegatingWork.run(DelegatingWork.java:61)
    at com.ibm.ws.asynchbeans.J2EEContext$RunProxy.run(J2EEContext.java:264)
    at java.security.AccessController.doPrivileged(Native Method)
    at com.ibm.ws.asynchbeans.J2EEContext.run(J2EEContext.java:1137)
    at com.ibm.ws.asynchbeans.WorkWithExecutionContextImpl.go(WorkWithExecutionContextImpl.java:195)
    at com.ibm.ws.asynchbeans.CJWorkItemImpl.run(CJWorkItemImpl.java:187)
    at com.ibm.ws.util.ThreadPool$Worker.run(ThreadPool.java:1560)
.
[9/25/12 17:10:06:880 EDT] 0000003e RegisteredRes W   WTRN0052E: An attempt by the transaction manager to call one phase commit on a transactional resource has resulted in an XAER_RMFAIL error. The resource was com.ibm.ws.Transaction.JTA.JTAXAResourceImpl@1d07bf1#{XidImpl: formatId(57415344), gtrid_length(36), bqual_length(54), data(00000139ff43ef2500000001000043106c82332ef6bc723402e84f341fb357080ddd4d1b00000139ff43ef2500000001000043106c82332ef6bc723402e84f341fb357080ddd4d1b000000010000000000000000000000000001)}
[9/25/12 17:10:06:887 EDT] 0000003e DefaultMessag W org.springframework.jms.listener.DefaultMessageListenerContainer handleListenerSetupFailure Setup of JMS message listener invoker failed for destination 'queue:///RANDOM QUEUE?targetClient=1' - trying to recover. Cause: Heuristic completion: outcome state is mixed; nested exception is javax.transaction.HeuristicMixedException

2 个答案:

答案 0 :(得分:1)

Here是原因和解决方案

行情 -

  

这些错误的原因通常是WebSphere MQ的结果   消息传递提供程序JMS Connection由WebSphere关闭   Application Server,因为Connection的Aged超时有   过期。

分辨率 -

  

要解决此问题,请确保正在使用JMS连接工厂   应用程序使用的连接池属性老化超时   设为零。这将阻止JMS连接在它们关闭时关闭   返回免费游泳池,因此确保任何优秀的   交易工作可以完成

有时也会由错误的DataDirect驱动程序引起,并由IBM报告和修复,请参阅this

答案 1 :(得分:0)

之前我们有多个JMS会话。这可能是其中一个环境中问题的原因。所以我们不得不改为2差异。会议和现在它有效!

儒略:

我的情景与您的情况略有不同。早些时候我们有:

请求消息已放入队列。这个队列被选中了。处理。然后我们保存到DB&然后生成另一条消息&把它放在另一个经纪人队列&然后发送了对第一条消息的响应。这一切都是1流程。

现在我们将其改为2 diff。流量:请求 - >过程 - >保存到DB - >答复 然后是另一个流程来放置Broker队列。

希望这有帮助

相关问题