WEB开发网
开发学院软件开发Java Weblogic中因为IP变更导致SubCoordinator not ava... 阅读

Weblogic中因为IP变更导致SubCoordinator not available,Transaction RollbackException问题调查

 2009-09-22 00:00:00 来源:WEB开发网   
核心提示: 继续debug server端,server端收到coordinatorImpl_stub的commit()时,Weblogic中因为IP变更导致SubCoordinator not available,Transaction RollbackException问题调查(3),它需要先从Prop

继续debug server端,server端收到coordinatorImpl_stub的commit()时,它需要先从PropagationContext中 restore transaction信息,包括根据scURLs还原scInfoList, 根据resNames还原resourceInfoList。问题出在了还原scInfoList的时候。如下:

1       if (scURLs != null) {
2             for (int i = 0; i < scURLs.length; i++) {
3                 String scURL = scURLs[i];
4                 if (tm.isLocalCoordinator(scURL)) continue; 
5                 SCInfo sci = tx.getOrCreateSCInfo(scURL);
6                 sci.setState(scStates[i]);
7                 if (scSyncRegs[i] == 1) sci.setSyncRegistered(true);
8             }
9       }

也就是说,PropagationContext还原事务的时候会遍历每个scURL,如果是个local的url,则忽略它,否则会要求tx检查该scURL对应的scInfo是否已经存在于tx自己的scInfoList中。再罗索一句,weblogic中,无论server端,还是 client端,都会将tx保存在当前TransactionManager的txMap中,PropagationContext还原tx的时候,首先检查xid对应的tx是否存在于txMap中,没有的话,它会负责创建一个tx。再看看tx.getOrCreateSCInfo(scURL)是怎么工作的,

 1   SCInfo getOrCreateSCInfo(String scURL) {
 2         if (scInfoList != null) {
 3               for (int i = 0; i < scInfoList.size(); i++) {
 4                     SCInfo sci = (SCInfo) scInfoList.get(i);
 5                     if (sci.getCoordinatorDescriptor().representsCoordinatorURL(scURL)) {
 6                           return sci;
 7                     }
 8               }
 9         }
10         SCInfo sci = createSCInfo(scURL);
11         addSC(sci);
12         return sci;
13   }

上一页  1 2 3 4 5 6  下一页

Tags:Weblogic 因为 IP

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接