Abbiamo più MemoryLeaks (trovati nel catalina.out), mentre ricarico il contesto.Tomcat ServletContextListener.contextDestroyed non chiamato
Per pulire questi thread, ho creato un'implementazione di ServletContextListener.
Il metodo contextInitialized()
viene richiamato correttamente quando viene creato un contesto, poiché è possibile visualizzare le voci del registro.
Ma il metodo contextDestroyed()
non viene chiamato, quindi il mio codice di pulizia non viene richiamato. Qualche idea per cui questo sta accadendo?
Devo implementare un'altra interfaccia per essere notata quando è necessario ricaricare un contesto?
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 chiama javax.servlet.ServletContextListener.contextDestroyed() quando un'applicazione Web viene arrestata (se ciò non comporterebbe un bug grave). Che prove hai che non è –
Solo i file di registro e gli avvertimenti di MemoryLeaks risultanti. Dai un'occhiata all'implementazione – Mirko
Quindi qualcosa nel codice è stato interrotto poiché Tomcat chiama sempre i metodi contextDestroyed() di ServletContextListeners registrati quando un'applicazione Web viene arrestata. per pubblicare il codice per ServletContextListener e gli estratti associati del registro. –