提交事务时出现XAException J2CA0027E错误码106、-4问题咨询
事务提交超时回滚问题分析与解决方案
错误日志说明
你遇到的异常日志如下:
XATransaction E J2CA0027E: An exception occurred while invoking end on an XA Resource Adapter from DataSource JMS$FundtechQConFactory$JMSManagedConnection@75, within transaction ID {XidImpl: formatId(57415344), gtrid_length(36), bqual_length(54), data(0000017bdaabecde0000000b6a6fc584d5dba62aea917f1902693232b82dd8a4ff309f370000017bdaabecde0000000b6a6fc584d5dba62aea917f1902693232b82dd8a4ff309f37000000010000000000000000000000000097)} : javax.transaction.xa.XAException: The method 'xa_end' has failed with errorCode '106'. at com.ibm.mq.jmqi.JmqiXAResource.end(JmqiXAResource.java:559) ... XATransaction E J2CA0027E: An exception occurred while invoking rollback on an XA Resource Adapter from DataSource JMS$FundtechQConFactory$JMSManagedConnection@206, within transaction ID {XidImpl: formatId(57415344), gtrid_length(36), bqual_length(54), data(0000017bdaabecde0000000b6a6fc584d5dba62aea917f1902693232b82dd8a4ff309f370000017bdaabecde0000000b6a6fc584d5dba62aea917f1902693232b82dd8a4ff309f37000000010000000000000000000000000003)} : javax.transaction.xa.XAException: The method 'xa_rollback' has failed with errorCode '-4'. at com.ibm.mq.jmqi.JmqiXAResource.rollback(JmqiXAResource.java:874) ...
根因定位
两个异常均为IBM MQ作为XA资源参与分布式事务时的超时类问题:
- 错误码
106对应XA规范的XAER_TIMEDOUT:IBM MQ队列管理器默认的最大工作单元(MAXUOW)时长仅为300秒(5分钟),远小于你在WebSphere侧设置的15分钟超时阈值,事务提交阶段先触发了MQ侧的超时规则,MQ主动终止了事务,导致WebSphere调用xa_end方法失败,触发全量事务回滚。 - 错误码
-4对应XA规范的XAER_RMERR:属于回滚流程的次生错误,事务已经被MQ侧终止释放后,WebSphere再调用xa_rollback时已经找不到对应事务上下文,因此抛出资源管理器错误。
修复方案
- 调整IBM MQ队列管理器MAXUOW参数:将该参数值调整为大于你预设的15分钟阈值,例如设置为1200秒(20分钟),避免MQ侧先触发事务超时。
- 对齐WebSphere侧事务配置:检查WebSphere事务服务全局超时时间、JMS连接工厂XA事务超时时间,确保所有配置的超时值都小于MQ侧的MAXUOW值,避免不同组件的超时逻辑冲突。
- 优化事务粒度:不建议将50万条事务放在同一个分布式事务中执行,一旦失败全量回滚成本极高。可以调整为批量提交策略,每处理1000~5000条数据就提交一次,将单批次事务的执行时长控制在1分钟以内,既可以彻底规避超时风险,也能在出现异常时仅回滚失败批次,降低重试成本。
- 检查JMS资源配置:确认你使用的JMS连接工厂的最大连接数、会话数配置充足,不会在事务提交阶段出现资源争抢等待,变相拉长事务执行时间导致超时。
内容的提问来源于stack exchange,提问作者Rajkumar Patwari
相关产品推荐
相关产品推荐

