快速业务通道

关于Weblogic中XAER_NOTA XAException的两种解释 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
ourceDescriptorList中,此时 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.

关于Weblogic中XAER_NOTA XAException的两种解释(3)

时间:2011-01-11 BlogJava 走走停停又三年

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启动 一个新事务

TMJOIN是将当前线程和BRANCH_ID 对应的事务关联。

3.2:Connection conn1 = getConnection("t3://localhost:7011",XADatasource_11);

3.1中的动作会被重复,但中间的差别如下:

3.2.1:XADatasource_21实例对应resourceDescriptor同样不会在resourceDescriptorList中被发现,因为它已经在register XADatasource_22的时候被unregister掉了。XADatasource_21对应的resourceInfo不存于当前 transaction的resourceInfoList中,resourceInfoList中只有XADatasource_11实例对应的一个名叫weblogic.jdbc.jta.DataSource的对象,它在3.1.5中被置入。 同3.1.1,我们这时候需要根据 XADatasource_21, 创建一个与其对应的 resourceInfo,如下:

ri = new XAServerResourceInfo(xar)

3.2.2:创建XAServerResourceInfo的时候,因为此时 resourceDescriptorList中对象如下(参考 3.1.4):

By instance: XADatasource_12, XADatasource_22, XADatasource_11

By name: XAPool_A,XAPool_B,weblogic,jdbc.jta.DataSource

根据XADatasource_21我们找不到这个resourceDescriptor,但我们能根据xarName,即weblogic.jdbc.jta.Datasource找到一个 resourceDescriptor。因此我们不会去创建一个新的 resourceDescriptor,而使用这个已存在的resourceDescriptor,并用它的名字作为该resourceInfo的名字,即新创建的resourceInfo名为:weblogic.jdbc.jta.DataSource。因此3.1.3,3.1.4步骤不会被执行。

3.2.5:XAServerResourceInfo被创建后,我们会根据 resouceInfo的名字,即 weblogic.jdbc.jta.DataSource,检查当前tx的 resourceInfoList中是否存在对应的resourceInfo。因为3.1.5结束的时候,我们 已经将一个名为 weblogic.jdbc.jta.DataSource的resourceInfo置入当前tx的 resourceInfoList中,所以这里我们能够找到一个与 weblogic.jdbc.jta.DataSource对应的resourceInfo。因此我们会将这个新创建的 resourceInfo的enlistElseWhere置为true。

3.2.6:因为resourceInfo的enlistElseWhere为true,所

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