コンテキストのリロード中に、複数の MemoryLeaks (catalina.out にある) が発生しています。
これらのスレッドをクリーンアップするために、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");
}
}
}