我有一个在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)
答案 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块是轻松拍摄麻烦的好方法。