非法访问:此Web应用程序实例已被停止

Ama*_*ngh 6 java mysql hibernate tomcat6

我正在使用Tomcat6.0中的GWT,Hibernate(基于XML的映射),MySQL-开发应用程序.IDE- Netbeans 6.9我在Netbeans中设置项目属性"Deploy On Save"选项.

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

最终跟随堆栈跟踪是由于为调试目的而抛出的错误以及尝试终止
导致非法访问的线程引起的,并且没有功能影响.

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)  
Run Code Online (Sandbox Code Playgroud)

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

Boh*_*ian 6

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

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

使用数据库连接时建议的方法是使用a try finally尽最大努力关闭数据库连接:

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);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)