Hibernate 内存泄漏异常

Hibernate 内存泄漏异常,hibernate,tomcat,guice,c3p0,catalina.out,Hibernate,Tomcat,Guice,C3p0,Catalina.out,有人能帮我解决这个问题吗 Jul 23, 2012 11:00:57 AM org.apache.catalina.loader.WebappClassLoader loadClass INFO: Illegal access: this web application instance has been stopped already. Could not load com.mchange.v2.sql.SqlUtils. The eventual following stack trac

有人能帮我解决这个问题吗

Jul 23, 2012 11:00:57 AM org.apache.catalina.loader.WebappClassLoader loadClass
INFO: Illegal access: this web application instance has been stopped already.  Could not load com.mchange.v2.sql.SqlUtils.  The eventual following stack trace is caused by an error thrown for debugging purposes as well as to attempt to terminate the thread which caused the illegal access, and has no functional impact.
java.lang.IllegalStateException
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1597)
    at org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1556)
    at com.mchange.v2.c3p0.impl.C3P0PooledConnectionPool.checkoutPooledConnection(C3P0PooledConnectionPool.java:531)
    at com.mchange.v2.c3p0.impl.AbstractPoolBackedDataSource.getConnection(AbstractPoolBackedDataSource.java:128)
    at org.hibernate.connection.C3P0ConnectionProvider.getConnection(C3P0ConnectionProvider.java:78)
    at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)
    at org.hibernate.jdbc.ConnectionManager.getConnection(ConnectionManager.java:167)
    at org.hibernate.jdbc.JDBCContext.connection(JDBCContext.java:142)
    at org.hibernate.transaction.JDBCTransaction.begin(JDBCTransaction.java:85)
    at net.customware.gwt.dispatch.server.AbstractDispatch.doExecute(AbstractDispatch.java:81)
    at net.customware.gwt.dispatch.server.AbstractDispatch.execute(AbstractDispatch.java:68)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:601)
    at com.google.gwt.user.server.rpc.RPC.invokeAndEncodeResponse(RPC.java:569)
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processCall(RemoteServiceServlet.java:208)
    at com.google.gwt.user.server.rpc.RemoteServiceServlet.processPost(RemoteServiceServlet.java:248)
    at com.google.gwt.user.server.rpc.AbstractRemoteServiceServlet.doPost(AbstractRemoteServiceServlet.java:62)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:641)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
    at com.google.inject.servlet.ServletDefinition.doService(ServletDefinition.java:216)
    at com.google.inject.servlet.ServletDefinition.service(ServletDefinition.java:141)
    at com.google.inject.servlet.ManagedServletPipeline.service(ManagedServletPipeline.java:93)
    at com.google.inject.servlet.FilterChainInvocation.doFilter(FilterChainInvocation.java:63)
    at com.google.inject.servlet.ManagedFilterPipeline.dispatch(ManagedFilterPipeline.java:122)
    at com.google.inject.servlet.GuiceFilter.doFilter(GuiceFilter.java:110)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:243)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:225)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:927)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:999)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:565)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:309)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603)
    at java.lang.Thread.run(Thread.java:722)
并提供可能的解决方案


提前感谢…

基本问题是tomcat为每个Web应用程序创建一个新的类加载器,并在重置应用程序时禁用类加载器,例如通过热部署新版本。c3p0创建辅助线程。如果c3p0已加载到web应用程序的类加载器中,然后该应用程序被重置,则c3p0的线程可能仍然处于活动状态,并保留对从现已失效的类加载器加载的对象的引用,从而导致在必须加载新类时出现的错误

多线程组件和tomcat的“热”类加载方案之间的交互可能具有挑战性。一些建议:

1) 如果您的web应用构建自己的c3p0数据源(例如,在ContextListener中),请确保在应用关闭时(在同一ContextListener中),数据源也处于关闭状态

2) 尝试将c3p0和JDBC驱动程序类加载到web应用程序特定的类加载器之外的其他东西中。将C3P0JAR文件、ChangeCommons java jar文件和JDBC驱动程序jar文件放在公共、系统或引导类加载器可以找到的位置。确保将这些文件从webapp的lib目录中取出,因为webapp类加载器是先尝试的。更多信息,请参阅


我希望这有帮助

基本问题是tomcat为每个Web应用程序创建一个新的类加载器,并在重置应用程序时禁用类加载器,例如通过热部署新版本。c3p0创建辅助线程。如果c3p0已加载到web应用程序的类加载器中,然后该应用程序被重置,则c3p0的线程可能仍然处于活动状态,并保留对从现已失效的类加载器加载的对象的引用,从而导致在必须加载新类时出现的错误

多线程组件和tomcat的“热”类加载方案之间的交互可能具有挑战性。一些建议:

1) 如果您的web应用构建自己的c3p0数据源(例如,在ContextListener中),请确保在应用关闭时(在同一ContextListener中),数据源也处于关闭状态

2) 尝试将c3p0和JDBC驱动程序类加载到web应用程序特定的类加载器之外的其他东西中。将C3P0JAR文件、ChangeCommons java jar文件和JDBC驱动程序jar文件放在公共、系统或引导类加载器可以找到的位置。确保将这些文件从webapp的lib目录中取出,因为webapp类加载器是先尝试的。更多信息,请参阅

我希望这有帮助