Appel de la méthode contextDestroyed lors de l’arrêt du serveur Web

J’ai créé une webapp qui n’a qu’un seul servletContext listner.

Voici le code: j’avais essayé avec Runtime.getRuntime() mais cela Runtime.getRuntime() pas fonctionné. Donc, alors que Google a rencontré ProcessBuilder cela ne fonctionnait pas non plus.

Je peux exécuter les scripts en exécutant depuis la console sur la boîte UNix.

Le but du code ci-dessous est d’exécuter un script sh comme capturer quelque chose comme echo Hello > test.txt chaque fois que le serveur tombe en panne. Mais ce script n’est pas exécuté lorsque le serveur tombe en panne. Vous ne savez pas pourquoi conextDestroyed n’est pas appelé ou si conextDestroyed se fait appeler pourquoi le script n’est pas exécuté.

 public class MyTestContextListener implements ServletContextListener{ @Override public void contextDestroyed(ServletContextEvent arg0) { // TODO Auto-generated method stub ProcessBuilder pb = new ProcessBuilder("/bin/bash","/local/test/tomcatContextTest/tomcatContextListener.sh"); try { pb.start(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public void contextInitialized(ServletContextEvent arg0) { // TODO Auto-generated method stub ProcessBuilder pb = new ProcessBuilder("/bin/bash","/local/test/tomcatContextTest/tomcatStartContextListener.sh"); try { pb.start(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } } 

Avez-vous mis votre ServletContextListener dans votre web.xml ?

Regardez cet exemple: http://www.javabeat.net/2009/02/servletcontextlistener-example/

Il y a plusieurs raisons pour lesquelles le serveur peut tomber en panne:

  • Une erreur interne (comme OutOfMemory) – dans ce cas, ServletContextListener n’est pas appelé
  • Quelqu’un tue le serveur d’applications – ServletContextListener n’est jamais appelé
  • Vous arrêtez explicitement le contexte (par exemple dans le gestionnaire) – ServletContextListener est appelé
  • Vous arrêtez explicitement le serveur d’applications entier – ServletContextListener est appelé

hth