WEB开发网
开发学院软件开发Java 关于Weblogic中XAER_NOTA XAException的两种解释 阅读

关于Weblogic中XAER_NOTA XAException的两种解释

 2009-09-22 00:00:00 来源:WEB开发网   
核心提示: TMJOIN是将当前线程和BRANCH_ID 对应的事务关联,3.2:Connection conn1 = getConnection("t3://localhost:7011", XADatasource_11);3.1中的动作会被重复,关于Weblogic中XAER_NO

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, 所以我们要传递给xaStart的flag为TMJOIN(实际需要的应该是TMNOFALGS),接下来会调用 start(xid, TMJOIN)来通知RESOURCE_MANAGER(Database_B)将当前线程和已有的 transaction branch关联。但Database_B中没有和该global transaction相对应的 transaction branch,所以TMJOIN失败,即如下的错误会被抛出,

java.sql.SQLException: Unexpected exception while enlisting XAConnection java.sql.SQLException: XA error: XAER_NOTA : The XID is not valid start() failed on resource 'weblogic.jdbc.jta.DataSource': XAER_NOTA : The XID is not valid

这个问题是weblogic的产品限制,它是WAD(work as design)的,并不是产品bug。在weblogic81sp6中,这种配置会有错误信息输出。       

上一页  1 2 3 4 5 

Tags:关于 Weblogic XAER

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