我們有一個應用程序使用Weblogic共用的非XA SQL Server JDBC驅動程序。這是導致問題的原因。無法將自動提交設置爲true - Weblogic 12 - SQL Server
從數據源獲取連接。
將自動提交設置爲false。
創建CallableStatement。
設置參數。
調用executeUpdate。
- 內部存儲過程調用,數據庫與提高SET XACT_ABORT一個錯誤ON
應用程序看到錯誤代碼了CallableStatement中的PARAM。
關閉CallableStatement
呼叫在連接上回滾。
拋出異常:
2013-OCT-17 16:45:20.500 EDT || XXXXXXX | asyncDelivery9 | XXX | XXX | XXXX-a3436e48-1672-4a26-88c0-50b9954f6a42 | ERROR | XXXXX | rollback | 服務器無法恢復事務。說明:4200000012。 com.microsoft.sqlserver.jdbc.SQLServerException:服務器未能通過 恢復事務。說明:4200000012。 在com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216) 〜[sqljdbc4.jar:NA] 在com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:254) 〜[sqljdbc4.jar:na] at com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:84) 〜[sqljdbc4.jar:na] at com.microsoft.sqlserver.jdbc.TDSParser.parse (tdsparser.java:39) 〜[sqljdbc4.jar:NA] 在com.microsoft.sqlserver.jdbc.SQLServerConnection $ 1ConnectionCommand.doExecute(SQLServerConnection.java:1756) 〜[sqljdbc4.jar:NA] 在玉米.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696) 〜[sqljdbc4.jar:n a] at com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715) 〜[sqljdbc4.jar:na] at com.microsoft.sqlserver.jdbc.SQLServerConnection.connectionCommand(SQLServerConnection.java:1761 ) 〜[sqljdbc4.jar:NA] 在com.microsoft.sqlserver.jdbc.SQLServerConnection.rollback(SQLServerConnection.java:1964) 〜[sqljdbc4.jar:NA] 在weblogic.jdbc.wrapper.PoolConnection_com_microsoft_sqlserver_jdbc_SQLServerConnection.rollback (Unknown Source)〜[wlfullclient.jar:12.1.1.0]
連接已關閉。
然後應用程序試圖從數據源的連接接下來的時間,下面的錯誤被拋出:
java.sql.SQLException: Failed to setAutoCommit to true for pool connection: First we got The server failed to resume the transaction. Desc:4200000012., then we got The server failed to resume the transaction. Desc:4200000012.
at weblogic.jdbc.wrapper.PoolConnection.init(PoolConnection.java:70) ~[wlfullclient.jar:12.1.1.0]
at weblogic.jdbc.common.internal.RmiDataSource.getPoolConnectionObj(RmiDataSource.java:639) ~[wlfullclient.jar:12.1.1.0]
at weblogic.jdbc.common.internal.RmiDataSource.getPoolConnection(RmiDataSource.java:478) ~[wlfullclient.jar:12.1.1.0]
at weblogic.jdbc.common.internal.RmiDataSource.getConnectionInternal(RmiDataSource.java:558) ~[wlfullclient.jar:12.1.1.0]
at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:518) ~[wlfullclient.jar:12.1.1.0]
at weblogic.jdbc.common.internal.RmiDataSource.getConnection(RmiDataSource.java:511) ~[wlfullclient.jar:12.1.1.0]
在WebLogic日誌,以下記錄:
<Oct 15, 2013 3:07:50 PM EDT> <Warning> <JDBC> <BEA-001153> <Forcibly releasing inactive/harvested connection "weblogic.jdbc.wrapper.[email protected]238607" back into the data source connec
tion pool "MASTERDB", currently reserved by: reclaimed because of init failure before user access. Not because of inactivity..>
在我看來,連接上的事務從未結束。但是我認爲會調用一個回滾來結束交易。現在下一次Weblogic嘗試返回連接時,初始化它時會出錯。關於什麼是問題的任何想法?我們沒有明確地將自動提交設置爲真,最終會是這個問題嗎?
嘗試在連接池的屬性中添加'defaultAutoCommit = false',看看它是否有幫助 –