У нас есть несколько MemoryLeaks (найдено в файле catalina.out), перезагружая контекст.Tomcat ServletContextListener.contextDestroyed not called
Чтобы очистить эти потоки, я создал реализацию ServletContextListener.
Метод contextInitialized()
успешно вызывается при создании контекста, поскольку я могу видеть записи журнала.
Но метод contextDestroyed()
не вызывается, поэтому мой код очистки не вызывается. Есть идеи, почему это происходит?
Должен ли я реализовать другой интерфейс, который нужно заметить, когда необходимо перезагрузить контекст?
public class MyContextListener implements ServletContextListener {
private static final Logger log = Logger.getLogger(MyContextListener.class);
@Override
public void contextDestroyed(final ServletContextEvent arg0) {
MyContextListener.log.info("destroying Servlet Context");
//Do stuff
MyContextListener.log.info("Servlet Context destroyed");
}
@Override
public void contextInitialized(final ServletContextEvent arg0) {
try {
MyContextListener.log.info("Creating Servlet Context");
//Do stuff
} finally {
MyContextListener.log.info("Servlet Context created");
}
}
}
Tomcat вызывает javax.servlet.ServletContextListener.contextDestroyed(), когда веб-приложение остановлено (если это не было серьезной ошибкой). Какие у вас есть доказательства того, что это не вызывается? –
Только логфайлы и результирующие предупреждения MemoryLeaks. Пожалуйста, взгляните на реализацию. – Mirko
Затем что-то в вашем коде сломано, так как Tomcat всегда вызывает методы contextDestroyed() зарегистрированных ServletContextListeners, когда веб-приложение остановлено. чтобы опубликовать код для вашего ServletContextListener и связанных журнальных выписок. –