快速业务通道

如何在Weblogic的全局事务执行多线程操作 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-22
- coordinator。而且总是第一个参与全局事务的 XAResource的实例充当 coordinator,因为coordinator的委任决定于TX开始后,第一次RMI request发 送给哪个server。Connection conn = getConnection ("t3://localhost:8001", "TestXADS") 用于指定这个global transaction的 coordinator为8011这个server。如果没有这个语句,thread1,thread2启动后, 它们开始XA操作时,每个XAResouce都会把自己当作这个TX的coordinator (Thread1委任8011,Thread2委任8021),这样就会出现如下的异常,

javax.transaction.TransactionRolledbackException: Current  server is the coordinator and transaction is not found.It was  probably rolled back and forgotten already. at  weblogic.rjvm.BasicOutboundRequest.sendReceive (BasicOutboundRequest.java:108) at  weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke (ReplicaAwareRemoteRef.java:290) at  weblogic.rmi.cluster.ReplicaAwareRemoteRef.invoke (ReplicaAwareRemoteRef.java:247) at  weblogic.jdbc.common.internal.RmiDataSource_814_WLStub.getConnection (Unknown Source) at  weblogic.transaction.internal.DriverTest1.getConnection (DriverTest1.java:39) at  weblogic.transaction.internal.DriverTest1.access$0 (DriverTest1.java:34) at  weblogic.transaction.internal.DriverTest1$SQLThread.run (DriverTest1.java:135)

2:某个全局事务中启动的线程,不能同时操作同一个XAResource,比如 Thread1操作datasource1和 datasource2,thread2操作datasource2和 datasource3。Weblogic中,我们做XA操作的时候,需要同后端的 XA Resource Manager交互,交互中我们会多次调用xaStart(xid, flag),xaEnd(xid, flag) 这里的flag可以使NOFLAGS、TMSUCESS、TMRESUME、TMSUSPEND等。如果我们在同 一个全局事务的多个线程中同时操作某个RESOURCE,那么就可能我们不同线程先 后给这个RESOUCE的RM发送相同的FLAG,比如xaStart(xid, TMSUSPEND),即两个 线程同时发送TMSUSPEND,这样会引发XA_ERR,如下:

java.sql.SQLException: Unexpected exception while  enlisting XAConnection java.sql.SQLException: XA error:  XAER_RMERR : A resource manager error has occured in the  transaction branch start() failed on resource ''TestXAPool_1'':  XAER_RMERR : A resource manager error has occured in the  transaction branch oracle.jdbc.xa.OracleXAException at  oracle.jdbc.xa.OracleXAResource.checkError (OracleXAResource.java:1017) at  oracle.jdbc.xa.client.OracleXAResource.start (OracleXAResource.java:227) at  weblogic.jdbc.wrapper.VendorXAResource.start (VendorXAResource.java:50) at weblogic.jdbc.jta.DataSource.start (DataSource.java:629) at  weblogic.transaction.internal.XAServerResourceInfo.start (XAServerResourceInfo.java:1142) at  weblogic.transaction.internal.XAServerResourceInfo.xaStart (XAServerResourceInfo.java:1073) at  weblogic.transaction.internal.XAServerResourceInfo.enlist (XAServerResourceInfo.java:241) at  weblogic.transaction.internal.ServerTransactionImpl.enlistResource (ServerTransactionImpl.java:463) at  weblogic.jdbc.jta.DataSource.enlist(DataSource.java:1392) at  weblogic.jdbc.jta.DataSource.refreshXAConnAndEnlist (DataSource.java:1334) at  weblogic

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号