3
我有一個運行在WAS 7.0上的web應用程序,它可以正常工作幾個星期,而且沒有問題。突然間,它會在試圖針對MS SQL 2005執行PreparedStatement時開始拋出SocketExceptions。首先,我們開始着眼於一些顯而易見的問題,這些問題可能會導致無法關閉連接,重新引導服務器,連接池大小等。但是沒有任何東西出現。我們在池中嘗試了WAS的連接重試,但這並不起作用。與服務器重新啓動沒有一致的關聯。JDBC連接拋出SocketException
我們正在運行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
我不知道提供什麼其他信息。讓我知道任何其他信息,你認爲我的相關知道。我谷歌搜索了這麼多,沒有什麼用處了。
TIA
爲了獲得有關SocketException的更多信息,您應該爲SocketException放置一個特定的catch並打印該堆棧跟蹤,然後再次拋出SocketException。您正在運行代碼的環境並未顯示您的SocketException所具有的所有信息,因爲它試圖將其轉換爲SQLException(它不是其子類)。 –
因爲executeQuery()沒有明確地拋出一個SocketException,所以catch被認爲是無法訪問的代碼,所以爲SocketException放置一個catch就不會編譯。我能做的就是捕捉一個異常並打印該堆棧跟蹤。 – dharga
它看起來像你有一個連接中的錯誤。是「DBManager.getInstance()。getInpatientConnection();」的結果一個對象,它是第三方類的一個實例? – belgther