"Server.xml" in Tomcat bearbeiten, ohne den Server neu zu starten?

10

Ich habe die Datei "server.xml" im confOrdner von Tomcat 8 bearbeitet . Ich habe ein neues HostTag für eine neue Website hinzugefügt .

Muss ich den Tomcat-Server neu starten?

Kann ich Tomcat dazu bringen, das neu bearbeitete zu analysieren und anzuwenden server.xml?

Basil Bourque
quelle
@dawud Danke für den Link, aber wir reden <Host>nicht darüber <Context>.
Basil Bourque
2
Unabhängig davon ist der wichtige Teil, dass server.xmlbeim Start einmal analysiert wird. Es kann nicht ohne Neustart neu geladen werden.
Dawn
@dawud Danke. Ich sehe diese Erwähnung jetzt. Ich habe dies zu einer Antwort gemacht, damit ich diese Frage schließen kann.
Basil Bourque

Antworten:

14

Ich würde zunächst sagen, dass die Frage nicht vollständig richtig gestellt ist, da es durchaus möglich ist, die Datei tatsächlich zu bearbeiten, ohne Tomcat neu zu starten, aber die Änderungen werden vom laufenden Prozess ignoriert.

Die eigentliche Frage wäre, wie Änderungen übernommen werden können, server.xmlohne Tomcat neu zu starten.

Durch das Sammeln von Informationen aus dem Startvorgang und den Klassenlade- Seiten in der Online-Dokumentation von Tomcat ist es möglich, dies genauer zu verstehen.

Insbesondere wird es in serverStartup.txt beschrieben und das UML-Diagramm des Startvorgangs sowie die relevanten Teile können wie folgt zusammengefasst werden:

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.

Dies geschieht nach der Erstellung des Bootstrap-Klassenladeprogramms der Servlet-Engine (Catalina).

Mit diesen Informationen ist jetzt klar, wann die server.xmlDatei beim Start analysiert wird, aber sie beantwortet nicht wirklich die Frage, warum Tomcat neu gestartet werden muss, um Änderungen an dieser Datei anzuwenden.

Die Antwort ist, dass ein Teil davon zur Laufzeit mit JMX dynamisch geändert werden kann . Damit dies möglich ist, musste die entsprechende MBean registriert werden (Schritt b6 oben) und SET-Operationen akzeptieren (einige MBeans haben nur eine GET-Schnittstelle).

In Ihrem speziellen Fall gibt es keine Möglichkeit, einen neuen Host zur Laufzeit zu erstellen und zu registrieren, da dies nicht vorgesehen ist. Aus diesem Grund müssen Sie den Tomcat-Prozess neu starten, damit der Bootstrap-Klassenladeprogramm dieses Objekt instanziiert und registriert JMX-Agent.

Anschließend ist es möglich, diesen Host von einem JMX-Client aus zu ändern, z. B. dem jconsole, der mit einem beliebigen JDK geliefert wird.

Verbinden Sie sich jconsolemit einem JMX-fähigen Tomcat und durchsuchen Sie die Host-MBean, um alle verfügbaren Attribute zu überprüfen:

jconsole zeigt Attribute der Host-MBean an

und überprüfen Sie alle verfügbaren Vorgänge (einer davon wird unten als Beispiel gezeigt):

jconsole zeigt eine Beispieloperation auf der Host-MBean

dawud
quelle
1
+1 für die Einführung in JMX.
Raja Anbazhagan
7

Neustart erforderlich.

Die Tomcat-Dokumentseite für <Context>Erwähnungen:

… Die Hauptdatei conf / server.xml kann nicht neu geladen werden, ohne Tomcat neu zu starten.

Basil Bourque
quelle
1
Diese Upvotes sollten an @dawud gehen ... kein Kommentar mehr. Schlechte Antwort für jemanden, der sagte we’re talking about <Host>, not <Context>.-1 Entschuldigung, es ist selten, dass ich das tue, aber da muss ich ...
krisFR
@krisFR dawud konnte jederzeit, damals oder heute, eine Antwort schreiben. Nicht jeder spielt dieses Spiel für Up-Votes.
Basil Bourque
1
@krisFR, Basil Bourque Ich habe eine detailliertere Antwort hinzugefügt, um dies allgemeiner zu behandeln. Hoffe es ist nützlich.
Dawud