当前位置:七道奇文章资讯编程技术Java编程
日期:2011-03-22 16:13:00  来源:本站整理

关于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编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:

  • 关于weblogic中操纵Dom4j、Xerces招致实施线程挂起的问题
  • 关于weblogic中jms message的情况
  • 关于Weblogic Server重启或log rotation招致server.log的i node
  • 关于Weblogic中XAER_NOTA XAException的两种注释
  • 关于weblogic中操纵prepared statement cache后操作DDL的问题
  • 本文地址: 与您的QQ/BBS好友分享!
    • 好的评价 如果您觉得此文章好,就请您
        0%(0)
    • 差的评价 如果您觉得此文章差,就请您
        0%(0)

    文章评论评论内容只代表网友观点,与本站立场无关!

       评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
    Copyright © 2020-2022 www.xiamiku.com. All Rights Reserved .