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

关于Weblogic中XAER_NOTA XAException的两种解释

 2009-09-22 00:00:00 来源:WEB开发网   
核心提示:某些时候,在weblogic执行XA操作的时候,关于Weblogic中XAER_NOTA XAException的两种解释,我们会碰到如下的错误:java.sql.SQLException: Unexpected exception while enlisting XAConnection java.sql.SQLEx

某些时候,在weblogic执行XA操作的时候,我们会碰到如下的错误:

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 

XAER_NOTA说明transaction branch在ResourceManager端(DB, MQ等)不存在。不存在通常由两种可能:transaction branch被timeout掉了,另外一种情况就是这个branch压根就没有在ResourceManager端发起过。

这篇文章主要针对2做一下说明,对于1,我们可以在Weblogic的XAConnectionPool设定中Enable XA Transaction Timeout, 并对此设定一个合理的值,建议这个值比global transaction timeout大。这样weblogic在调用xaStart()的时候,会通知RM,该branch的timeout时间,而不是使用RM自己默认的timeout(对于Oracle, 默认为60秒,但一般会在120秒的时候,tx branch才会被Oracle timeout掉)。

对于2, 一般会跟配置有关系,比如两个XA datasource指向同一个XAConnectionPool, 或多个XAConnectionPool指向同一个Database,我们以多个datasource指向同一connection为例:

1:假如我们有如下的配置环境:

XADatasource_11---->XAPool_A---->Databse_A

XADatasource_21---->XAPool_B---->Databse_B

  这样的配置环境中,我们做XA相关的操作是没有问题的。

 1         public void xaTest()
 2       {
 3            try{
 4                UserTransaction tx = getUserTransaction();
 5                tx.setTransactionTimeout(1000);
 6                tx.begin();
 7                Connection conn1 = getConnection("t3://localhost:7011", XADatasource_11);
 8                Connection conn2 = getConnection("t3://localhost:7021", XADatasource_21);
 9                this.executeInsertInPSMT(conn1, null);
10                this.executeAnoInsertInPSMT(conn2, null);
11                conn1.close();
12                conn2.close();
13                tx.commit();
14            }catch(Exception e){}
15       }

1 2 3 4 5  下一页

Tags:关于 Weblogic XAER

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