关于Weblogic中XAER_NOTA XAException的两种注释[Java编程]
本文“关于Weblogic中XAER_NOTA XAException的两种注释[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
某些时刻,在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 }
2:假如基于业务需求,我们需求额外配置两个XA Datasource,辨别指向 XAPool_A、XAPool_B,以下:
XADatasource_12----〉XAPool_A
XADatasource_22----〉XAPool_B
布置Datasource的时刻,Weblogic会判断这个Datasource是不是XA范例的,假如是XA范例的Datasource,我们需求将这个datasource实例注册到Process- wide的resourceDescriptorList中,以下:
registerResource(poolName,(XAResource)driverInstance,registrationProperties);
在register前,我们先调用unregisterResource(poolName)将该poolName 对应的resource从 resourceDescriptorList中unregister掉.这样 XADatasource_12、XADatasource_22布置后,我们可以看到process-wide的 resourceDescriptorList中的对象改变:
布置前:XADatasource_11, XADatasource_21
布置后:XADatasource_12, XADatasource_22
注意:假如XADatasource11、12, XADatasource_21、22不存在大都据源 指向同衔接池的话,布置后,四个Datasource应当都呈目前 resourceDescriptorList中.
以上是“关于Weblogic中XAER_NOTA XAException的两种注释[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |