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

本文介绍了解决Was6与WebsphereMQ6整合后,在EJB中发送JMS消息到MQ时遇到的问题。通过启用连接工厂的已启用xa支持配置,确保了JMS操作能在二阶段提交协议下运行。然而,这可能导致事务恢复过程中出现警告信息。文章详细介绍了错误原因,并提供了解决方案——删除tranlog目录并重启Was。
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。问题解决。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值