Modifica "server.xml" in Tomcat senza riavviare il server?


10

Ho modificato il file "server.xml" nella cartella di Tomcat 8 conf. Ho aggiunto un nuovo Hosttag per un nuovo sito web.

Devo riavviare il server Tomcat?

Posso ottenere Tomcat per analizzare e applicare la nuova modifica server.xml?



@dawud Grazie per il link, ma stiamo parlando <Host>, non è <Context>.
Basil Bourque,

2
Indipendentemente da ciò, la parte importante è che server.xmlviene analizzata una volta all'avvio. Non può essere ricaricato senza un riavvio.
dawud,

@dawud Grazie. Vedo quella menzione ora. Ho reso questa una risposta in modo da poter chiudere questa domanda.
Basil Bourque,

Risposte:


14

Comincerei dicendo che la domanda non è stata fatta in modo completamente corretto, poiché è del tutto possibile modificare effettivamente il file senza riavviare Tomcat, ma le modifiche vengono ignorate dal processo in esecuzione.

La vera domanda sarebbe come applicare le modifiche server.xmlsenza riavviare Tomcat.

Raccogliendo informazioni dal processo di avvio e dalle pagine del caricatore di classi sulla documentazione online di Tomcat, è possibile comprenderlo in modo più dettagliato.

Più specificamente, è descritto in serverStartup.txt e nel diagramma UML del processo di avvio e le parti pertinenti possono essere riassunte come segue:

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.

Ciò accade dopo la creazione del classloader Bootstrap del motore servlet (Catalina).

Con queste informazioni, è chiaro ora quando nel processo di avvio server.xmlviene analizzato il file, ma non risponde realmente alla domanda sul perché è necessario riavviare Tomcat per applicare le modifiche a questo file.

La risposta è che una parte di essa può essere modificata in modo dinamico in fase di esecuzione utilizzando JMX . Perché ciò sia possibile, è stato necessario registrare l'MBean appropriato (passo b6 sopra) e anche accettare le operazioni SET (alcuni MBean hanno solo un'interfaccia GET).

Nel tuo caso specifico, non c'è modo di creare e registrare un nuovo host in fase di runtime perché non è previsto per questo, e questo è il motivo per cui devi riavviare il processo Tomcat per fare in modo che il classloader Bootstrap crei un'istanza di quell'oggetto e lo registri con Agente JMX.

Successivamente, è possibile modificare quell'host da un client JMX come jconsolequello fornito in bundle con qualsiasi JDK.

Connettiti jconsolea un Tomcat abilitato per JMX e sfoglia l'host MBean per verificare tutti gli attributi disponibili:

jconsole mostra gli attributi dell'host MBean

e controlla tutte le operazioni disponibili (una mostrata sotto come esempio):

jconsole mostra un'operazione di esempio sull'host MBean


1
+1 per avermi fatto conoscere JMX.
Raja Anbazhagan,

7

No. Riavvio richiesto.

La pagina di documenti Tomcat per <Context>menzioni:

... il file conf / server.xml principale non può essere ricaricato senza riavviare Tomcat.


1
Questi voti dovrebbero andare su @dawud ... non più commenti. Scarsa risposta per qualcuno che ha detto we’re talking about <Host>, not <Context>.-1 scusa, è raro che lo faccia, ma lì devo ...
KrisFR

@krisFR dawud era libero di scrivere una risposta in qualsiasi momento, allora o ora. Non tutti giocano a questo gioco per voti positivi.
Basil Bourque,

1
@krisFR, Basil Bourque Ho aggiunto una risposta più dettagliata per affrontarla in modo più generale. Spero sia utile.
Dawud,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.