java.lang.IllegalStateException: Таймер уже отменен, когда webapp повторно развертывает на tomcat - PullRequest
2 голосов
/ 16 октября 2010

Использование Hibernate в веб-приложении struts2 при повторном развертывании приложения Я получаю эту ошибку при попытке получить доступ к страницам после повторного развертывания.

java.lang.IllegalStateException: Timer already cancelled.

Сразу после повторного развертывания журнала tomcat следующий вывод, указывающий на причину проблемы, заключается в том, что 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();

}

Что еще я могу сделать, чтобы предотвратить эту ошибку?

1 Ответ

6 голосов
/ 16 октября 2010

Это предупреждение является частью защиты от утечки памяти , поставляемой с Tomcat 6.0.26. В этой конкретной проблеме кажется, использует commons-pool в качестве пула соединений. Это не правильно завершает поток таймера. Об этом уже сообщалось как об ошибке: проблема POOL-161 . Это еще не исправлено.

Это на самом деле не вредит. Tomcat делает свою работу правильно, просто жить с этими предупреждениями. Если они действительно беспокоят вас, вы также можете заменить пул соединений другим. Я бы порекомендовал tomcat-jdbc .

Смотри также:

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...