Weblogic中因为IP变更导致SubCoordinator not available,Transaction RollbackException问题调查
2009-09-22 00:00:00 来源:WEB开发网继续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 }
- ››iphone图片拉伸的几种方法
- ››iphone正则表达式的简单使用
- ››iPhone开发Unresolved Symbols CAKeyframeAnimati...
- ››IPhone开发-“此证书是由未知颁发机构签名”解决方...
- ››IPhone开发-整合私钥和证书,生成.p12文件
- ››iPhone应用开发-UIPickerView选取器详解
- ››iphone 获取屏幕的宽度和高度
- ››iPhone读取工程包中的二进制文件
- ››iPhone新手机 不挂YouTube APP
- ››iPhone 获取指定格式的时间和日期
- ››IPad使用UIModalPresentationFormSheet时隐藏键盘...
- ››IPmt函数用法
更多精彩
赞助商链接