2012-05-11 11 views
0

我在Weblogic 10.3集羣環境中運行J2EE MDB。java.sql.SQLException的解決方案:無法在全局事務中使用本地事務提交

在代碼中的一個方法中,我創建一個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) 
+0

該連接是否列入分佈式事務?如果是這樣,你**不能**使用'commit()'或'setAutoCommit()'。 –

+0

@Mark,你是什麼意思?在我收到異常的方法中,我正在從數據源請求連接。在該方法中,我所做的唯一外部調用就是一個數據庫。有沒有辦法查看連接是否在分佈式事務中登記?奇怪的是,這個異常只出現過5次或6次,而且被調用過。 – user1388403

+0

連接被抓取的數據源是啓用了XA的,並參與不同應用程序的分佈式事務。我應該創建一個不支持XA的不同數據源來用於我的應用程序嗎? – user1388403

回答

0

嘗試設置屬性

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

的XADataSource的

+0

我必須把它放在哪裏? – apetrelli

+0

在Spring上下文中。 – Xoxole

+0

http://ru.stackoverflow.com/questions/592730/derby-bitronix-camel-cannot-commit-a-resource-enlisted-in-a-global-transaction – Xoxole

相關問題