was + mq的WTRN0005W(无法恢复JMS事务)问题的解决

was 6 与websphere mq6整合以后,由于需要在EJB中(会话bean和消息bean)发送JMS消息到MQ。EJB本身处于容器的jta事务环境中,JMS默认也会被纳入事务管理,所以连接工厂的配置需要选中"已启用xa支持“,该属性将会使JMS的操作支持二阶段提交协议。否则发送消息的操作有可能触发类似如下异常(日志文件丢失,无法列出完整异常信息):

无法在jta环境中使用只支持一阶段的资源。

启用xa支持以后,jms的操作会有较为严格的事务支持,如果事务失败,会被记录到服务器的was/profiles/server1/tranlog中,根据was版本和自定义配置的不同,该文件夹的路径可能会有变化。

当was重启之后,回读取tranlog下的事务记录,试图恢复被挂起的事务,如果该操作无法正确创建xa资源的话,会有如下警告:

==============================================================================
[06-5-12 11:25:25:516 CST] 00000014 XARecoveryDat E   WTRN0005W: 无法重新创建事务参与者的 XAResource 且可能无法正确完成事务恢复。资源为:J2CXAResourceInfo :
cfName = JMS$ConnectionFactory$JMSManagedConnection@195100581
configProps = [Deployed Resource Adapter Properties]
    TransactionResourceRegistration      java.lang.String      dynamic
    InactiveConnectionSupport      java.lang.Boolean      true
    mcfClassname      java.lang.String      com.ibm.ejs.jms.WSJMSManagedQueueConnectionFactory
    mcfConnectorName      java.lang.String      JMS$ConnectionFactory
    mcfObjectType      java.lang.Integer      4

dd = [Resource Adapter DD]
    ManagedConnectionFactory Class Name: com.ibm.ejs.jms.JMSManagedQueueSessionFactory
    Connection Factory Interface Name:   com.ibm.ejs.jms.JMSManagedQueueSessionFactory
    Transaction Support:                 2
    Reauthentication Support:            false

dsProps = {MRET=1, HOST=172.16.0.116, PINT=5000, CHAN=c1, CCS=1381, QMGR=sobeymam, FIQ=1, RINT=5000, PORT=1414, UCP=1, TRAN=1}
mcfProps = null
mmProps = null
mbeanProps = null
cmConfig = [Resource-ref settings]

    res-auth:                 1 (APPLICATION)
    res-isolation-level:      0 (TRANSACTION_NONE)
    res-sharing-scope:        false (UNSHAREABLE)
    loginConfigurationName:   null
    loginConfigProperties:    null
[Other attributes]

    res-resolution-control:   999 (undefined)
isCMP1_x:                 false (not CMP1.x)
isJMS:                 true (JMS)

recoveryClasspath = null
。异常堆栈跟踪遵循:java.lang.NullPointerException
    at com.ibm.ejs.j2c.J2CXAResourceFactory.getXAResource(J2CXAResourceFactory.java:173)
    at com.ibm.ws.Transaction.JTA.XARecoveryData.recover(XARecoveryData.java:518)
    at com.ibm.ws.Transaction.JTA.PartnerLogTable.recover(PartnerLogTable.java:511)
    at com.ibm.ws.Transaction.JTA.RecoveryManager.resync(RecoveryManager.java:1784)
    at com.ibm.ws.Transaction.JTA.RecoveryManager.run(RecoveryManager.java:2241)
==============================================================================

该恢复操作每分钟执行一次,因此有可能在日志中形成大量的相同警告,虽然不影响使用,但是.......很不好。

解决办法是删除tranlog目录,重启was。问题解决。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值