2011-11-22 3 views
3

У меня есть веб-приложение, работающее на 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 

Я не уверен, что другая информация, чтобы предоставить. Дайте мне знать любую другую информацию, которую вы считаете моей соответствующей знать. Я искал эти тонны, и ничего полезного не появилось.

ТИА

+0

Чтобы получить дополнительную информацию о SocketException, вы должны поместить определенный catch для SocketException и распечатать трассировку стека, а затем снова выбросить SocketException. Окружающая среда, в которой выполняется ваш код, не отображает всю информацию, которую имеет ваше SocketException, потому что она пытается передать ее в SQLException (что не является подклассом). –

+0

Включение catch для SocketException не компилируется, потому что executeQuery() явно не выбрасывает исключение SocketException, поэтому catch считается недостижимым кодом. Что я могу сделать, так это поймать Исключение и напечатать эту стек. – dharga

+1

Похоже, у вас есть ошибка в вашем соединении. Является результатом «DBManager.getInstance(). GetInpatientConnection();» объект, являющийся экземпляром стороннего класса? – belgther

ответ

1

Из вашего трассировки стека, это выглядит как ошибка в драйвере MSSQL JDBC. Все, что вы можете сделать - это перехват ClassCastException в качестве обходного пути, если исключение вызывается, когда ваша база данных находится в автономном режиме. Кроме того, это может быть проблема с версией Java, так как драйвер JDBC опирается на определенную «иерархию классов».