无法将setAutoCommit设置为true - Weblogic 12 - SQL Server

时间:2013-10-17 23:39:02

标签: sql-server jdbc weblogic

我们有一个使用Weblogic池非XA SQL Server JDBC驱动程序的应用程序。以下是造成问题的原因。

从数据源获取连接。

将自动提交设置为false。

创建CallableStatement。

设置参数。

调用executeUpdate。

  • 在存储的proc调用内,数据库引发错误,SET XACT_ABORT为ON

应用程序在CallableStatement的out参数中看到错误代码。

关闭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。           at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(SQLServerException.java:216)   〜[sqljdbc4.jar:NA]           在com.microsoft.sqlserver.jdbc.TDSTokenHandler.onEOF(tdsparser.java:254)   〜[sqljdbc4.jar:NA]           在com.microsoft.sqlserver.jdbc.TDSParser.parse(tdsparser.java:84)   〜[sqljdbc4.jar:NA]           在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]           在com.microsoft.sqlserver.jdbc.TDSCommand.execute(IOBuffer.java:5696)   〜[sqljdbc4.jar:NA]           在com.microsoft.sqlserver.jdbc.SQLServerConnection.executeCommand(SQLServerConnection.java:1715)   〜[sqljdbc4.jar:NA]           在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(未知   来源)〜[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.PoolConnection_com_microsoft_sqlserver_jdbc_SQLServerConnection@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尝试返回连接时,初始化时会出错。关于问题是什么的任何想法?我们最后没有明确地将自动提交设置回true,这可能是问题吗?

1 个答案:

答案 0 :(得分:0)

针对同样的问题here找到了这个建议。

“确保将数据源/池配置为test-on-reserve,并且second-to-trust = 0。”

这应解决在返回应用程序之前从池中消除那些“坏”连接的问题。