Java 非法访问:此web应用程序实例已停止

Java 非法访问:此web应用程序实例已停止,java,mysql,hibernate,tomcat6,Java,Mysql,Hibernate,Tomcat6,我正在Tomcat6.0中使用GWT(基于XML的映射)和MySQL开发一个应用程序。IDE-Netbeans 6.9 我在Netbeans中设置了项目属性“保存时部署”选项 当我的应用程序在服务器上运行很长时间时,我的应用程序不时会无法连接到数据库,并引发以下异常 最终的后续堆栈跟踪是由出于调试目的以及试图终止线程而引发的错误引起的 这导致了非法访问,并且没有功能影响 java.lang.IllegalStateException at org.apache.catalin

我正在Tomcat6.0中使用GWT(基于XML的映射)和MySQL开发一个应用程序。IDE-Netbeans 6.9 我在Netbeans中设置了项目属性“保存时部署”选项

当我的应用程序在服务器上运行很长时间时,我的应用程序不时会无法连接到数据库,并引发以下异常

最终的后续堆栈跟踪是由出于调试目的以及试图终止线程而引发的错误引起的
这导致了非法访问,并且没有功能影响

java.lang.IllegalStateException  
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1273)  
        at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1233)  
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:316)  
        at com.mysql.jdbc.ConnectionImpl.realClose(ConnectionImpl.java:4273)  
        at com.mysql.jdbc.ConnectionImpl.close(ConnectionImpl.java:1444)  
        at org.hibernate.connection.DriverManagerConnectionProvider.close(DriverManagerConnectionProvider.java:152)  
        at org.hibernate.connection.DriverManagerConnectionProvider.finalize(DriverManagerConnectionProvider.java:142)  
        at java.lang.ref.Finalizer.invokeFinalizeMethod(Native Method)  
        at java.lang.ref.Finalizer.runFinalizer(Finalizer.java:83)  
        at java.lang.ref.Finalizer.access$100(Finalizer.java:14)  
        at java.lang.ref.Finalizer$FinalizerThread.run(Finalizer.java:160)  

当我重新启动tomcat服务器时,我可以再次连接数据库。请告诉我如何在不重新启动tomcat的情况下获得无缝性能并完成工作。

您可能正在打开越来越多的连接,并且从未关闭它们,最终达到数据库配置的最大连接数

找到打开连接的位置,并确保正在关闭连接。如果您为每个请求打开一个连接,但不关闭它,那么很容易找到和修复。或者,当出现错误时,您可能没有关闭连接-请检查异常处理代码

使用DB连接时,建议使用
try finally
尽最大努力关闭DB连接:

Connection con;
try {
   con = ...; // open connection
   // do work
catch (SQLException e) {
   // do whatever
} finally {
    if (con != null && !con.isClosed()) {
        try {
            con.close();
        catch (SQLException e) {
            // Don't throw from here or you'll lose any return/exception from above
            log.error("Failed to close connection", e);
        }
    }
}

IMHO,如果是这样的话,我预计会出现错误500,而不是报告的错误。事实上,不需要DB连接的Servlet应该仍在工作。然后寻找Bohemian的解决方案(但我仍然认为这是一个非常错误的消息…)我认为这对我来说已经解决了,谢谢大家的回复和评论