2009-09-24 8 views
2

Existe-t-il un portable pour demander la fermeture d'un conteneur Servlet gracieusement, à partir d'un servlet? Par portable, j'entends une technique qui fonctionnera sur tous les conteneurs compatibles standard (Tomcat, Jetty, Winstone, etc.).Comment arrêter un conteneur de servlet depuis un servlet?

Notez que c'est l'opposé de la méthode Servlet.destroy(), qui est appelée lorsque le servlet abaisse le servlet.

+4

Il n'y a pas de manière portable, parce que c'est une mauvaise idée. – skaffman

+0

Hmm .. Alors, comment puis-je ramener gracieusement le conteneur (pour les mises à niveau, la maintenance) de manière portable? – HRJ

+2

@HRJ: Pour le dire gentiment, ce n'est pas le cas. Vous utilisez la séquence d'arrêt spécifique du conteneur. – Powerlord

Répondre

1

System.exit();

Si vous utilisez sans SecurityManager.

EDIT: Est-ce gracieux? Cela dépend des conteneurs.

Sur Tomcat, si vous l'appelez avec 0

System.exit(0); 

Il est aussi gracieux que shutdown.sh ou Catalina.stop() parce que le crochet d'arrêt appelle simplement stop().

+0

Mais est-ce ** gracieux **? – HRJ

+0

Sur une autre réflexion, et en l'absence d'autres solutions, cela semble être un bon moyen. Le conteneur peut enregistrer des hooks d'arrêt avec le VM pour assurer la grâce. – HRJ

+0

Cependant, il n'y a aucune garantie que le serveur ait enregistré des hooks d'arrêt. Cela dépend de la façon dont le serveur est implémenté. Il présente également des problèmes de concurrence, car les requêtes effectuées simultanément avec la requête d'arrêt peuvent être supprimées dans un état incohérent. – gustafc

4

Il n'y a aucun moyen défini dans le Java EE Servlet Spec que je connais, dont il faudrait qu'il soit portable. Le lien vers les spécifications de l'API de servlet, donc s'il y a un tel chemin, il sera documenté quelque part là-bas. Je suis également d'accord que ce serait une très mauvaise idée pour une servlet de pouvoir fermer le conteneur!

+0

Ceci devrait être la réponse acceptée. –