Weblogic中因为IP变更导致SubCoordinator not available,Transaction Rollba - 编程入门网
next中一般包括如下信息:
Xid: 事务ID CoordinatorURL: 事务主coordinator的URL(最终事务提交在对应的server上完成) scURLs: subcoordinator url列表,每个involve到该tx中的server url都在其中。coordinator通过这个url通知每个subcoordinator完成事务的提交、回滚。 resNames: involve到该tx中所以resource的名字列表 ...... 从异常上来看,这个问题跟subCoordinator有关,所以在客户端,我只debug了scURLs,如下, 从debug信息来看,server2的scURL应该是没有问题的。回头再看看这个异常,因为异常是在客户端发起提交请求的时候,server端抛出的,问题是,我传递过去的是个正确的scURL(192.168.0.51),server端怎么会解析出一个错误的 url(10.182.216.189)呢? 继续debug server端,server端收到coordinatorImpl_stub的commit()时,它需要先从PropagationContext中 restore transaction信息,包括根据scURLs还原scInfoList, 根据resNames还原resourceInfoList。问题出在了还原scInfoList的时候。如下:
Weblogic中因为IP变更导致SubCoordinator not available,Transaction Rollba(2)时间:2010-12-26 BlogJava 走走停停又三年也就是说,PropagationContext还原事务的时候会遍历每个scURL,如果是个local的url,则忽略它,否则会要求tx检查该scURL对应的scInfo是否已经存在于tx自己的scInfoList中。再罗索一句,weblogic中,无论server端,还是 client端,都会将tx保存在当前TransactionManager的txMap中,PropagationContext还原tx的时候,首先检查xid对应的tx是否存在于txMap中,没有的话,它会负责创建一个tx。再看看tx.getOrCreateSCInfo(scURL)是怎么工作的,
它也是遍历自己手里的scInfoList,如果发现list中某个对象和传递进来的scURL匹配,则返回这个对象,否则它创建一个新的scInfo, 把它放入scInfoList并返回。那么它是怎么判断匹配与否的呢?
匹配的依据就是ServerID相等,serveId是什么?其实就是DomainNam |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |