Edytować „server.xml” w Tomcat bez restartowania serwera?

10

Edytowałem plik „server.xml” w conffolderze Tomcat 8 . Dodałem nowy Hosttag do nowej strony internetowej.

Czy muszę ponownie uruchomić serwer Tomcat?

Czy mogę zmusić Tomcat do przeanalizowania i zastosowania nowo edytowanej wersji server.xml?

Basil Bourque
źródło
@dawud Dzięki za link, ale mówimy o tym <Host>nie <Context>.
Basil Bourque
2
Niezależnie od tego ważną częścią jest to, że server.xmljest analizowane raz podczas uruchamiania. Nie można go ponownie załadować bez ponownego uruchomienia.
dawud
@dawud Thanks. Widzę teraz tę wzmiankę. Uczyniłem to jako odpowiedź, dzięki czemu mogę zamknąć to pytanie.
Basil Bourque

Odpowiedzi:

14

Zacznę od stwierdzenia, że ​​pytanie nie jest całkowicie poprawnie wykonane, ponieważ całkiem możliwe jest edytowanie pliku bez ponownego uruchamiania Tomcat, ale zmiany są ignorowane przez uruchomiony proces.

Prawdziwe pytanie brzmi: jak zastosować zmiany server.xmlbez ponownego uruchamiania Tomcat.

Gromadząc informacje z procesu uruchamiania i stron modułu ładującego klasy w dokumentacji online Tomcat, można to zrozumieć bardziej szczegółowo.

Mówiąc dokładniej, jest to opisane w serverStartup.txt i diagramie UML procesu uruchamiania, a odpowiednie części można streścić w następujący sposób:

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.

Dzieje się tak po utworzeniu modułu ładującego klasy Bootstrap silnika serwletu (Catalina).

Dzięki tym informacjom staje się jasne, że podczas procesu uruchamiania server.xmlplik jest analizowany, ale tak naprawdę nie odpowiada na pytanie, dlaczego należy ponownie uruchomić Tomcat, aby zastosować zmiany w tym pliku.

Odpowiedź jest taka, że pewną jego część można dynamicznie modyfikować w środowisku wykonawczym za pomocą JMX . Aby było to możliwe, konieczne było zarejestrowanie odpowiedniego komponentu MBean (krok b6 powyżej), a także zaakceptowanie operacji SET (niektóre komponenty MBean mają tylko interfejs GET).

W twoim konkretnym przypadku nie ma możliwości utworzenia i zarejestrowania nowego hosta w czasie wykonywania, ponieważ nie ma na to żadnego przepisu, i to jest powód, dla którego musisz zrestartować proces Tomcat, aby moduł ładujący klasy Bootstrap utworzył instancję tego obiektu i zarejestrował go w Agent JMX.

Następnie możliwe jest zmodyfikowanie tego hosta za pomocą klienta JMX, takiego jak jconsoledostarczany w pakiecie z dowolnym pakietem JDK.

Połącz jconsolesię z Tomcat obsługującym JMX i przejrzyj komponent MBean hosta, aby sprawdzić wszystkie dostępne atrybuty:

jconsole pokazuje atrybuty komponentu MBean hosta

i sprawdź wszystkie dostępne operacje (jedna z nich pokazana poniżej jako przykład):

jconsole pokazuje przykładową operację na komponencie MBean hosta

dawud
źródło
1
+1 za wprowadzenie mnie do JMX.
Raja Anbazhagan
7

Nie. Wymagane ponowne uruchomienie.

Strona dokumentu Tomcat dla <Context>wzmianek:

… Głównego pliku conf / server.xml nie można ponownie załadować bez ponownego uruchomienia Tomcat.

Basil Bourque
źródło
1
Te opinie powinny przejść do @dawud ... nigdy więcej komentarzy. Słaba odpowiedź dla kogoś, kto powiedział we’re talking about <Host>, not <Context>.-1 przepraszam, rzadko to robię, ale tam muszę ...
krisFR
@krisFR dawud mógł napisać odpowiedź w dowolnym momencie, wtedy lub teraz. Nie wszyscy grają w tę grę, aby uzyskać więcej głosów.
Basil Bourque,
1
@krisFR, Basil Bourque Dodałem bardziej szczegółową odpowiedź, aby ująć to w bardziej ogólny sposób. Mam nadzieję, że to się przyda.
dawud