web-dev-qa-db-fra.com

Modifier "Server.XML" dans Tomcat sans redémarrer le serveur?

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

Dois-je redémarrer le serveur Tomcat?

Puis-je obtenir Tomcat pour analyser et appliquer le nouvellement modifié server.xml?

10
Basil Bourque

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

La vraie question serait de savoir comment appliquer des changements dans server.xml Sans redémarrer Tomcat.

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

Plus spécifiquement, il est décrit dans ServerStartututututututututup.txt et le diagramme UML du processus de démarrage et les portions 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 Bootstrap Classloader du moteur de servlet (Catalina).

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

La réponse est que Certains , une partie peut être modifiée de manière dynamique à l'exécution tilisation de JMX . Pour que cela soit possible, le MBean approprié a dû être enregistré (étape B6 ci-dessus), et doit également accepter les opérations définies (certaines MBEAN ne disposent que d'une interface GET).

Dans votre cas particulier, il n'ya 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 avoir le Bootstrap = Classloader Instaniez cet objet et enregistrez-le avec l'agent JMX.

Ensuite, il est possible de modifier cet hôte d'un client JMX tel que le jconsole qui est livré avec n'importe quel JDK.

Connectez-vous jconsole à un JMX activé TOMCAT et parcourez l'hôte Mbean de vérifier tous les attributs disponibles:

jconsole showing attributes of Host MBean

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

jconsole showing an example operation on the Host MBean

14
dawud

Non. Redémarrage requis.

La page DOC Tomcat pour - <Context> mention:

... Le fichier Conf/Server.xml principal ne peut pas être rechargé sans redémarrer Tomcat.

7
Basil Bourque