WEB开发网
开发学院软件开发Java 如何在Weblogic的全局事务执行多线程操作 阅读

如何在Weblogic的全局事务执行多线程操作

 2009-09-22 00:00:00 来源:WEB开发网   
核心提示: 2:某个全局事务中启动的线程,不能同时操作同一个XAResource,如何在Weblogic的全局事务执行多线程操作(4),比如Thread1操作datasource1和 datasource2,thread2操作datasource2和datasource3,写这么个例子,只是让大家对webl

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.jdbc.jta.DataSource.getConnection(DataSource.java:396)
 at weblogic.jdbc.jta.DataSource.connect(DataSource.java:354)
 at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:305)
 at weblogic.jdbc.common.internal.RmiDataSource_WLSkel.invoke(Unknown Source)
 ......

虽然测试中没有什么问题,但我不建议谁这么去做,毕竟我们需要遵循规范。写这么个例子,只是让大家对weblogic的transaction加深些理解,而不是真的要在生产系统中这样去做。

上一页  1 2 3 4 

Tags:如何 Weblogic 全局

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