私は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の特定のキャッチを配置し、そのスタックトレースを出力してからSocketExceptionを再度スローする必要があります。コードを実行している環境では、SocketExceptionが持つSQLException(サブクラスではない)にキャストしようとしているため、SocketExceptionのすべての情報が表示されません。 –
executeQuery()は明示的にSocketExceptionをスローしないため、catchが到達不能なコードとみなされるため、SocketExceptionのキャッチをコンパイルすることはできません。私ができることは、例外をキャッチしてスタックトレースを出力することです。 – dharga
接続にバグがあるようです。 "DBManager.getInstance()。getInpatientConnection();"の結果です。サードパーティのクラスのインスタンスであるオブジェクト? – belgther