快速业务通道

Weblogic执行transaction recover碰到的奇怪问题 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21

Weblogic执行transaction recover碰到的奇怪问题

时间:2011-01-08 BlogJava 走走停停又三年

这几天做transaction recover测试的时候,发现个很难理解的问题。

具体问题场景如下:

1:一个standby client程序,调用userTransaction.begin()后,顺序操作两个XA resource,这两个resource为同一个Oracle database, 不过操作使用的connection来源于不同的data source。connection1向表test中插入一条数据,connection2向表test1中插入一条数据。最后执行 userTransaction.commit()。

2:userTransaction.commit()执行的时,需要执行两阶段提交,首先是global prepare,如果所有的resource都prepare ok的话,weblogic这时候会写入tx record(写入到tlog中)。然后执行global commit。测试过程中,在执行完global prepare后,在global commit处设定break point,然后停止database。数据库停止后,去除global commit的break point, 此时weblogic需要向每个resource发出commit指令。因为部分resource此时是unavailable的,weblogic无法收到每个resource commit完成的响应,该tx信息会一直保存在tlog中,等待server重起的时候recover。

3:按照正常逻辑global prepare完成后,该tx应该是只能commit,而不能rollback的,但在测试中发现,weblogic在recover的时候 ,会去rollback这个tx。

下面是测试中记录的数据信息。

1:数据库重起后,weblogic重起前,可以看到database中该tx信息如下:

2:weblogic tlog中的信息,

+------------------------------------------------------------------------------+ | Transaction Log Dump |                                                       | +------------------------------------------------------------------------------+ | Class Name = weblogic.transaction.internal.ResourceCheckpoint                | | Object = ResourceCheckpoint={OracelXADS, OracleXADS1}                        | +------------------------------------------------------------------------------+

Weblogic执行transaction recover碰到的奇怪问题(2)

时间:2011-01-08 BlogJava 走走停停又三年

3:weblogic重起后,可以看到该tx branch在recover的时候被rollback,

####<Nov 21, 2008 11:20:33 AM CST> <Debug> <debug@XAResourceDescriptor> <why> <AdminServer> <[STANDBY] ExecuteThread: ''4'' for queue: ''weblogic.kernel.Default (self-tuning)''> <<WLS Kernel>> <> <> <1227237633250> <000000> <to rollback tx, xid: BEA1-0000669563242B7A1CFC-4F726163656C58414453> 

这个信息是我debug出来的,weblogic会依据xid(branchid),调用 XAResource.rollback(Xid xid), 将该事务分支rollback。现在看到的问题是:4F7261636C655841445331分支已经commit了,我们调用 XAResource.rollback(Xid xid), rollback 0000669563242B7A1CFC-4F726163656C58414453后,4F7261636C655841445331怎么也被 rollback了呢?

Note: 在weblogic recover的时候,XAResource需要执行后端的存储过程,如果对应用户没有权限的话,weblogic server的日志里能看到如下信息:

####<Nov 20, 2008 7:12:24 PM CST> <Debug> <JDBCDriverLogging> <why> <AdminServer> <[STANDBY] ExecuteThread: ''3'' for queue: ''weblogic.kernel.D

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号