0

我在 Weblogic 10.3 集群环境中运行 J2EE MDB。

在代码中的一种方法中,我创建了一个 JDBC 连接并关闭了自动提交。通过启用 XA 的数据源建立与数据库的连接。关闭自动提交的原因是因为我使用的是临时表。

当我完成临时表和其他 SQL 查询时,我提交事务并重新打开自动提交。在大多数情况下,这不是问题,但是在执行该方法时我收到了以下异常,该异常发生在我发出提交的代码行中。

不知道为什么我收到了我只调用单个数据库的方法,我想知道是不是因为数据源启用了 XA?任何关于为什么会发生这种异常以及为什么它有时只发生的见解将不胜感激

java.sql.SQLException: could not use local transaction commit in a global transaction
    at oracle.jdbc.driver.SQLStateMapping.newSQLException(SQLStateMapping.java:70)
    at oracle.jdbc.driver.DatabaseError.newSQLException(DatabaseError.java:112)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:173)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:229)
    at oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:403)
    at oracle.jdbc.driver.PhysicalConnection.disallowGlobalTxnMode(PhysicalConnection.java:6139)
    at oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.java:3320)
    at oracle.jdbc.driver.PhysicalConnection.commit(PhysicalConnection.java:3357)
    at oracle.jdbc.OracleConnectionWrapper.commit(OracleConnectionWrapper.java:130)
    at weblogic.jdbc.wrapper.XAConnection.commit(XAConnection.java:844)
    at weblogic.jdbc.wrapper.JTAConnection.commit(JTAConnection.java:326)
    at com.myPackage.myApp.myDBCaller.tempTableMethod(myDBCaller.java:390)
    at com.myPackage.myApp.myDBCaller.start(myDBCaller.java:153)
    at com.myPackage.myApp.myDBCaller.onMessage(myDBCaller.java:117)
    at sun.reflect.GeneratedMethodAccessor1683.invoke(Unknown Source)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
    at java.lang.reflect.Method.invoke(Method.java:599)
    at com.bea.core.repackaged.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:281)
    at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:187)
    at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:154)
    at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:126)
    at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:114)
    at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176)
    at com.bea.core.repackaged.springframework.aop.interceptor.ExposeInvocationInterceptor.invoke(ExposeInvocationInterceptor.java:89)
    at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176)
    at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:126)
    at com.bea.core.repackaged.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:114)
    at com.bea.core.repackaged.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:176)
    at com.bea.core.repackaged.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:210)
    at $Proxy228.onMessage(Unknown Source)
    at weblogic.ejb.container.internal.MDListener.execute(MDListener.java:518)
    at weblogic.ejb.container.internal.MDListener.transactionalOnMessage(MDListener.java:423)
    at weblogic.ejb.container.internal.MDListener.onMessage(MDListener.java:325)
    at weblogic.jms.client.JMSSession.onMessage(JMSSession.java:4547)
    at weblogic.jms.client.JMSSession.execute(JMSSession.java:4233)
    at weblogic.jms.client.JMSSession.executeMessage(JMSSession.java:3709)
    at weblogic.jms.client.JMSSession.access$000(JMSSession.java:114)
    at weblogic.jms.client.JMSSession$UseForRunnable.run(JMSSession.java:5058)
    at weblogic.work.SelfTuningWorkManagerImpl$WorkAdapterImpl.run(SelfTuningWorkManagerImpl.java:516)
    at weblogic.work.ExecuteThread.execute(ExecuteThread.java:201)
    at weblogic.work.ExecuteThread.run(ExecuteThread.java:173)
4

1 回答 1

0

尝试设置属性

<property name="AutomaticEnlistingEnabled" value="false"/>

xaDatasource 的。

于 2016-11-21T06:09:49.157 回答