关于Weblogic中XAER_NOTA XAException的两种解释
2009-09-22 00:00:00 来源:WEB开发网rd = (XAResourceDescriptor) create(xarName, aXar, DYNAMIC);
3.1.4: XAResourceDescriptor创建完成后,我们会将该 resourceDescriptor放入 resourceDescriptorList中,此时 resourceDescritporList中对象如下:
By instance: XADatasource_12, XADatasource_22,XADatasource_11
By name: XAPool_A, XAPool_B,weblogic, jdbc.jta.DataSource
这是返回到3.1.2的XAServerResourceInfo初始化中,我们将该resourceInfo的xaResource设定为传入的参数 xar,resourceInfo的 name被设定为3.1.3中的xarName,即weblogic.jdba.jta.DataSource.
3.1.5:回到3.1.1, XAServerResourceInfo实例创建后,我们根据resourceInfo的name,来检查当前tx的resourceInfoList 是否存在对应的resourceInfo,对于一个刚刚开始的transaction,此时它的resourceInfoList 是空的。如果同名的 resourceInfo被detect到,我们会将该resourceInfo的 enlistElseWhere置为true(即已被enlist)。因为我们新创建的resourceInfo之前没有被enlist过,所以我们需要调用resourceInfo的enlist()来将 XADatasource_11 enlist到当前tx中。此时当前transaction的resourceInfoList 对象如下:
By instance: XADatasource_11
By name: weblogic.jdbc.jta.Datasource
3.1.6: 在resourceInfo的enlist中,如果resourceInfo的 enlistElseWhere为true, 将要传递给xaStart的flag为TMNOFLAGS, 否则为 TMJOIN。然后获取调用
Xid bXid = getXIDwithBranch((XidImpl)tx.getXID())
获取事务分支ID, 最后综合BRANCH_ID, FLAGS 来通知RESOURCE_MANAGER(DataBase_A)启动一个事务。
注意:TMNOFLAGS是通知RESOURCE_MANAGER启动 一个新事务
更多精彩
赞助商链接