2011-08-22 530 views
6

我正在开发一个应用程序,使用GWT,Hibernate(基于XML的映射),MySQL-在Tomcat6.0中。 IDE-Netbeans 6.9 我在Netbeans中设置了项目属性“在保存时部署”选项。非法访问:此Web应用程序实例已被停止

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

最终的以下堆栈跟踪被抛出调试的目的,以及一个错误引起的试图终止导致非法访问的线程
,并且没有功能影响。

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服务器,我又能够连接Database.Please告诉我,通过它我可以得到无缝的性能,并能得到无需重新启动Tomcat的完成工作的方式。

回答

5

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

找到你在哪里打开连接,并确保你关闭它们。如果您为每个请求打开一个连接但不关闭它,那么很容易找到并修复。或者当你遇到错误时你可能不会关闭你的连接 - 检查你的异常处理代码。

使用DB连接时推荐的方法是使用一个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); 
     } 
    } 
} 
+0

恕我直言,如果是这样的话,我会期待一个错误500,而不是一个据报道。事实上,不需要数据库连接的Servlet应该仍然​​可以工作。 – SJuan76

+0

事实上,不需要数据库的Servlets工作正常...... –

+0

然后寻找波希米亚的解决方案(但我仍然认为这是一条相当具有误导性的消息......) – SJuan76

相关问题