У меня есть веб-приложение, работающее на WAS 7.0, которое работает и будет оставаться на пару недель без каких-либо проблем. Внезапно он начнет бросать SocketExceptions при попытке выполнить PreparedStatement против MS SQL 2005. Сначала мы начали рассматривать некоторые очевидные проблемы, которые могут вызвать это, например, не закрывать соединение, перезагрузка сервера, размер пула подключений и т. Д. Но ничего не приходит. Мы попробовали повторить попытку подключения WAS в пуле, и это не сработало. Не существует постоянной корреляции с перезагрузкой сервера.JDBC Connection throwing 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
Я не уверен, что другая информация, чтобы предоставить. Дайте мне знать любую другую информацию, которую вы считаете моей соответствующей знать. Я искал эти тонны, и ничего полезного не появилось.
ТИА
Чтобы получить дополнительную информацию о SocketException, вы должны поместить определенный catch для SocketException и распечатать трассировку стека, а затем снова выбросить SocketException. Окружающая среда, в которой выполняется ваш код, не отображает всю информацию, которую имеет ваше SocketException, потому что она пытается передать ее в SQLException (что не является подклассом). –
Включение catch для SocketException не компилируется, потому что executeQuery() явно не выбрасывает исключение SocketException, поэтому catch считается недостижимым кодом. Что я могу сделать, так это поймать Исключение и напечатать эту стек. – dharga
Похоже, у вас есть ошибка в вашем соединении. Является результатом «DBManager.getInstance(). GetInpatientConnection();» объект, являющийся экземпляром стороннего класса? – belgther