Modifier "server.xml" dans Tomcat sans redémarrer le serveur?

10

J'ai édité le fichier "server.xml" dans le dossier de Tomcat 8 conf. J'ai ajouté une nouvelle Hostbalise pour un nouveau site Web.

Dois-je redémarrer le serveur Tomcat?

Puis-je demander à Tomcat d'analyser et d'appliquer la nouvelle modification server.xml?

Basil Bourque
la source
@dawud Merci pour le lien, mais nous en parlons <Host>, non <Context>.
Basil Bourque
2
Quoi qu'il en soit, la partie importante est que l' server.xmlanalyse est effectuée une fois au démarrage. Il ne peut pas être rechargé sans redémarrage.
dawud
@dawud Merci. Je vois cette mention maintenant. J'en ai fait une réponse pour pouvoir fermer cette question.
Basil Bourque

Réponses:

14

Je commencerais par dire que la question n'est pas complètement correctement posée, car il est tout à fait possible de modifier le fichier sans redémarrer Tomcat, mais les modifications sont ignorées par le processus en cours.

La vraie question serait de savoir comment appliquer les modifications server.xmlsans redémarrer Tomcat.

En rassemblant des informations sur le processus de démarrage et les pages du chargeur de classe sur la documentation en ligne de Tomcat, il est possible de comprendre cela plus en détail.

Plus précisément, il est décrit dans serverStartup.txt et le diagramme UML du processus de démarrage et les parties pertinentes peuvent être résumées comme suit:

Sequence 1. Start from Command Line
  ...
Sequence 2. Process command line argument (start, startd, stop, stopd)
Class: org.apache.catalina.startup.Bootstrap (assume command->start)
What it does:
a) Catalina.setAwait(true);
b) Catalina.load()
    b3) createStartDigester()
        Configures a digester for the main server.xml elements
    b4) Load the server.xml and parse it using the digester
        Parsing the server.xml using the digester is an automatic
        XML-object mapping tool, that will create the objects defined
        in server.xml
        Startup of the actual container has not started yet.
    b6) Calls initialize on all components, this makes each object
        register itself with the JMX agent.

Cela se produit après la création du chargeur de classe Bootstrap du moteur de servlet (Catalina).

Avec ces informations, il est clair maintenant quand dans le processus de démarrage le server.xmlfichier est analysé, mais cela ne répond pas vraiment à la question de savoir pourquoi il est nécessaire de redémarrer Tomcat pour appliquer les modifications à ce fichier.

La réponse est que certaines parties peut être modifiée dynamiquement lors de l' exécution en utilisant JMX . Pour que cela soit possible, le MBean approprié a dû être enregistré (étape b6 ci-dessus), et doit également accepter les opérations SET (certains MBeans n'ont qu'une interface GET).

Dans votre cas spécifique, il n'y a aucun moyen de créer et d'enregistrer un nouvel hôte au moment de l'exécution car il n'y a aucune disposition pour cela, et c'est la raison pour laquelle vous devez redémarrer le processus Tomcat pour que le chargeur de classe Bootstrap instancie cet objet et l'enregistre avec Agent JMX.

Ensuite, il est possible de modifier cet hôte à partir d'un client JMX tel que jconsolecelui fourni avec n'importe quel JDK.

Connectez-vous jconsoleà un Tomcat compatible JMX et parcourez le MBean hôte pour vérifier tous les attributs disponibles:

jconsole montrant les attributs du MBean hôte

et vérifiez toutes les opérations disponibles (l'une d'entre elles ci-dessous à titre d'exemple):

jconsole montrant un exemple d'opération sur le MBean hôte

dawud
la source
1
+1 pour m'avoir présenté JMX.
Raja Anbazhagan
7

Non. Redémarrage requis.

La page doc Tomcat pour les <Context>mentions:

… Le fichier principal conf / server.xml ne peut pas être rechargé sans redémarrer Tomcat.

Basil Bourque
la source
1
Ces votes positifs devraient aller à @dawud ... plus de commentaire. Mauvaise réponse pour quelqu'un qui a dit we’re talking about <Host>, not <Context>.-1 désolé, c'est rare que je fasse ça, mais là je dois ...
krisFR
@krisFR dawud était libre d'écrire une réponse à tout moment, alors ou maintenant. Tout le monde ne joue pas à ce jeu pour des votes positifs.
Basil Bourque
1
@krisFR, Basil Bourque J'ai ajouté une réponse plus détaillée pour couvrir cela de manière plus générale. J'espère que c'est utile.
dawud