Weblogic实施transaction recover碰到的独特问题[Java编程]
本文“Weblogic实施transaction recover碰到的独特问题[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
这几天做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碰到的独特问题[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |