JDBC连接抛出SocketException

时间:2011-11-22 16:17:22

标签: java sql-server jsf jdbc websphere

我有一个在WAS 7.0上运行的Web应用程序可以运行,并且一次可以保持几周没有问题。在尝试对MS SQL 2005执行PreparedStatement时,它会突然开始抛出SocketExceptions。首先,我们开始研究一些可能导致此问题的明显问题,例如不关闭连接,重新启动服务器,连接池大小等。但没有任何事情发生。我们在池中尝试了WAS的连接重试,但是没有用。与服务器重新启动没有一致的相关性。

我们正在运行WAS 7,该应用程序正在使用JSF 1.2。这是受影响的代码,后跟堆栈跟踪。

try {
    conn = DBManager.getInstance().getInpatientConnection();

    String sql = "select * from Reviews where datediff(y,reviewedDate,getDate()) < 30";
    ps = conn.prepareStatement(sql);
    rs = ps.executeQuery();

    while(rs.next()){
        reviewed.add(rs.getString("authNum"));
    }
} catch (SQLException e) {
    e.printStackTrace();
} finally{
    DBManager.clean(conn, rs, ps);
}

追踪......

0000002a SystemErr     R Caused by: java.lang.ClassCastException: java.net.SocketException incompatible with java.sql.SQLException
0000002a SystemErr     R    at com.microsoft.sqlserver.jdbc.SQLServerPooledConnection.notifyEvent(Unknown Source)
0000002a SystemErr     R    at com.microsoft.sqlserver.jdbc.SQLServerConnection.notifyPooledConnection(Unknown Source)
0000002a SystemErr     R    at com.microsoft.sqlserver.jdbc.DBComms.transmit(Unknown Source)
0000002a SystemErr     R    at com.microsoft.sqlserver.jdbc.IOBuffer.sendCommand(Unknown Source)
0000002a SystemErr     R    at com.microsoft.sqlserver.jdbc.SQLServerStatement.sendExecute(Unknown Source)
0000002a SystemErr     R    at com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteQuery(Unknown Source)
0000002a SystemErr     R    at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(Unknown Source)
0000002a SystemErr     R    at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.pmiExecuteQuery(WSJdbcPreparedStatement.java:1099)
0000002a SystemErr     R    at com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.executeQuery(WSJdbcPreparedStatement.java:720)
0000002a SystemErr     R    at com.bcbst.ipct.controllers.MemberListingController.initReviews(MemberListingController.java:266)
0000002a SystemErr     R    at com.bcbst.ipct.controllers.MemberListingController.<init>(MemberListingController.java:251)
0000002a SystemErr     R    at java.lang.J9VMInternals.newInstanceImpl(Native Method)
0000002a SystemErr     R    at java.lang.Class.newInstance(Class.java:1345)
0000002a SystemErr     R    at com.sun.faces.mgbean.BeanBuilder.newBeanInstance(BeanBuilder.java:190)
0000002a SystemErr     R    ... 66 more

我不确定提供什么其他信息。让我知道您认为我相关的任何其他信息。我用Google搜索了这一点,没有任何有用的东西出现。

TIA

1 个答案:

答案 0 :(得分:1)

从堆栈跟踪中,它看起来像MSSQL JDBC驱动程序中的错误。如果在数据库脱机时抛出异常,您所能做的就是捕获ClassCastException作为解决方法。此外,它也可能是Java版本问题,因为JDBC驱动程序依赖于某个“类层次结构”。