我的应用程序在一段时间后失败,如果我登录我的应用程序得到java.net.SocketException与java.sql.SQLException不兼容

时间:2014-09-01 05:16:53

标签: java sql-server

我有一个在WAS 7.0上运行的Web应用程序可以运行,并且一次可以保持几周没有问题。在尝试针对MS SQL 2005登录我的应用程序时,它会突然开始抛出与java.sql.SQLException不兼容的java.net.SocketException。没有

一旦我重新启动Was Server,它将恢复应用程序到正常模式。

这是阻塞。

        catch ( SocketException exc) {                  
        ActionMessages objMessages = new ActionMessages();
        ActionMessage objMessage = new ActionMessage("Common.SocketException",exc.getMessage());
        objMessages.add("Exception", objMessage);
        saveMessages(request, objMessages);
        saveToken(request);
        return mapping.findForward(FAILURE)

$ 这是堆栈跟踪。

  SystemErr R java.lang.ClassCastException: java.net.SocketException incompatible
  with java.sql.SQLException
  SystemErr     R     at 
  com.microsoft.sqlserver.jdbc.SQLServerPooledConnection.notifyEvent(Unknown Source)
  SystemErr     R    at  
  com.microsoft.sqlserver.jdbc.SQLServerConnection.notifyPooledConnection(Unknown Source)
  SystemErr     R  at 
  com.microsoft.sqlserver.jdbc.DBComms.receive(Unknown Source)
  SystemErr     R  at 
  com.microsoft.sqlserver.jdbc.IOBuffer.sendCommand(Unknown Source)
  0000001a SystemErr     R   at 
  com.microsoft.sqlserver.jdbc.SQLServerStatement.sendExecute(Unknown Source)
  0000001a SystemErr     R    at
  com.microsoft.sqlserver.jdbc.SQLServerStatement.doExecuteQuery(Unknown Source)
  0000001a SystemErr     R   at 
  com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.executeQuery(Unknown Source)
  0000001a SystemErr     R    at            
  com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.pmiExecuteQuery
 (WSJdbcPreparedStatement.java:1027)
  0000001a SystemErr     R    at 
 com.ibm.ws.rsadapter.jdbc.WSJdbcPreparedStatement.executeQuery(WSJdbcPreparedStatement.java:654)
  0000001a SystemErr     R     at
 com.Login.LoginForm.getHiddenRunningText(LoginForm.java:52)
 [ 0000001a SystemErr     R   at
 sun.reflect.GeneratedMethodAccessor15.invoke(Unknown Source)
 0000001a SystemErr     R   at 
 sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:37)
 0000001a SystemErr     R  at java.lang.reflect.Method.invoke(Method.java:599)

1 个答案:

答案 0 :(得分:0)

您的代码只有一个用于' java.net.SocketException'的catch块。 引发SQLException时,程序通过catch块处理SocketException的异常,但SQLException的类型与SocketException的类型不匹配。 这可能是您的代码中出现的情况。

为了处理你的情况,你的代码需要catch块来解决java.sql.SQLException'如下。

catch ( SocketException exc) { 
   ...code for SocketException
}
catch ( Exception exc) { // catch block for exceptions except Socket Exception
   ...code for unexpected exceptions
}

为每个代码中的意外异常准备catch块是轻松拍摄麻烦的好方法。