快速业务通道

Weblogic中因为IP变更导致SubCoordinator not available,Transaction Rollba - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
e+ServerName,例如,driver_test_domain+server_2。它并不关心IP, Port,所以问题就出现了。出问题的时候,我debug出来tx中的scInfoList如下:

因为从传递进来的scURL解析出来的ServerID也是driver_test_domain+server_2,所以tx会认为这 scURL对应的scInfo已经存在,它将直接使用这个scInfo作为subcoordinator提交事务。因为这个已有的scInfo根本就不可用,所以事务是无法提交的,就像我们开始看到的异常一样。

接下来的问题是,这个错误的scInfo是什么时候被创建的呢? SCInfo中并没有其他什么东西,核心的只有一个CoordinatorDescriptor。创建scInfo的时候也只是根据scURL,调用 Coordinator的gerOrCreate方法给该scInfo分配一个coordinatorDescriptor。这个getOrCreate 如下,

1    static CoordinatorDescriptor getOrCreate(String aCoURL) 2   { 3     if (aCoURL == null) return null; 4     CoordinatorDescriptor cd = 5       (CoordinatorDescriptor) knownServers.get(getServerID(aCoURL)); 6     if (cd == null) cd = new CoordinatorDescriptor(aCoURL); 7     return cd; 8   }

从这我们可以看到,CoordinatorDescriptor也是通过ServerID标示其唯一性的,knownServers是个process-wide变量,tlog recover的时候,就会向其中加入对象。因为我的tlog如下:

Weblogic中因为IP变更导致SubCoordinator not available,Transaction Rollba(3)

时间:2010-12-26 BlogJava 走走停停又三年

如果我删掉tlog,客户端程序运行正常。因为tlog被我破坏了,没法重现这个问题,也无法作进一步的debug,所以不能证明那个错误的coordinatorDescriptor就是tlog recover时创建的。95%应该是这样的吧。

好了,问题解决了,虽然我的问题中只涉及了IP,但我认为,server端口变化也应该会引起类似的问题。这个问题算是weblogic的bug吗?应该算是吧!

补充点信息,这个是我在server端加的debug信息,可以看到,的确是在tlog中server checkpoint做recover的时候,创建了变更前IP对应的CoordinatorDescriptor信息。但因为weblogic内部比较 coordinator的时候,只比较domain name + server name,而不关心address、port等信息,最终出现subcoordinator出错。

to put follow coordinator to knownServers of CoordinatorDescriptor: serverID: driver_test_domain+server_2 coordinatorURLserver_2+10.182.216.189:7021+driver_test_domain+t3+ java.lang.Exception at weblogic.transaction.internal.CoordinatorDescriptor.init(CoordinatorDescriptor.java:176) at weblogic.transaction.internal.CoordinatorDescriptor.<init>(CoordinatorDescriptor.java:128) at weblogic.transaction.internal.ServerCoordinatorDescriptor.<init>(ServerCoordinatorDescriptor.java:258) at weblogic.transaction.internal.ServerCoordinatorDescriptor.getOrCreate(ServerCoordinatorDescriptor.java:953) at weblogic.transaction.internal.ServerCoordinatorDescriptor.getOrCreate(ServerCoordinatorDescriptor.java:371) at weblogic.transaction.internal.ServerCheckpoint.onRecovery(ServerCheckpoint.java:175) at weblogic.transaction.internal.StoreTransactionLoggerImpl.recover(StoreTransactionLoggerImpl.java:441) at weblogic.transaction.internal.StoreTransactionLoggerImpl.init(StoreTransactionLoggerImpl.java:230) at weblogic.transaction.internal.StoreTransactionLoggerImpl.init(StoreTransactionLoggerI

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号