2013-10-17 49 views
1

我們有一個應用程序使用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嘗試返回連接時,初始化它時會出錯。關於什麼是問題的任何想法?我們沒有明確地將自動提交設置爲真,最終會是這個問題嗎?

+0

嘗試在連接池的屬性中添加'defaultAutoCommit = false',看看它是否有幫助 –

回答

0

找到這個建議針對相同的問題here

「請確保您的數據源/池配置爲測試備用,並且信任秒數爲0.」

這應該解決在返回到應用程序之前從池中消除那些「壞」連接的問題。

相關問題