关于Weblogic中XAER_NOTA XAException的两种解释 - 编程入门网
关于Weblogic中XAER_NOTA XAException的两种解释时间:2011-01-11 BlogJava 走走停停又三年某些时候,在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相关的操作是没有问题的。
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应该都出现在 resourceDe |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |