java.lang.IllegalStateException:当webapp在tomcat上重新部署时,计时器已取消

java.lang.IllegalStateException:当webapp在tomcat上重新部署时,计时器已取消,java,hibernate,tomcat,Java,Hibernate,Tomcat,当应用程序重新部署时,在struts2 Web应用程序中使用Hibernate,在重新部署后尝试访问页面时会出现此错误 java.lang.IllegalStateException: Timer already cancelled. 在重新部署tomcat日志之后,以下输出表明问题的原因是当webapp的第一个实例关闭时Hibernate没有正确关闭 Oct 15, 2010 8:58:34 PM org.apache.catalina.loader.WebappClassLoader cl

当应用程序重新部署时,在struts2 Web应用程序中使用Hibernate,在重新部署后尝试访问页面时会出现此错误

java.lang.IllegalStateException: Timer already cancelled.
在重新部署tomcat日志之后,以下输出表明问题的原因是当webapp的第一个实例关闭时Hibernate没有正确关闭

Oct 15, 2010 8:58:34 PM org.apache.catalina.loader.WebappClassLoader clearReferencesStopTimerThread
SEVERE: A web application appears to have started a TimerThread named [Timer-0] via the java.util.Timer API but has failed to stop it. To prevent a memory leak, the timer (and hence the associated thread) has been forcibly cancelled. 
我已经添加了一个ContextListener,它在contextDestroyed方法中包含以下内容,但没有任何效果

@Override
public void contextDestroyed(ServletContextEvent arg0) {

    HibernateUtil.getSessionFactory().close();

}
我还能做些什么来防止这个错误吗?

这个警告是Tomcat 6.0.26附带的一部分。在这个特定的问题中,您似乎正在使用commons池作为连接池。它没有正确终止计时器线程。这已被报告为错误:。它还没有修好

它实际上并不有害。Tomcat做得很好,只需接受这些警告。如果它们真的困扰着你,你也可以考虑用另一个来替换连接池。我推荐

另见: