Редагувати "server.xml" у Tomcat без перезавантаження сервера?


10

Я відредагував файл "server.xml" у confпапці Tomcat 8 . Я додав новий Hostтег для нового веб-сайту.

Потрібно перезапустити сервер Tomcat?

Чи можу я змусити Tomcat розібратися та застосувати нещодавно відредагований server.xml?



@dawud Дякую за посилання, але ми говоримо про це <Host>, ні <Context>.
Василь Бурк

2
Незважаючи на те, важлива частина полягає в тому, що server.xmlаналізується один раз при запуску. Його неможливо перезавантажити без перезавантаження.
dawud

@dawud Дякую Я зараз бачу цю згадку. Я зробив це на відповідь, щоб я міг закрити це питання.
Василь Бурк

Відповіді:


14

Спершу я б сказав, що запитання зроблено не повністю правильно, оскільки це фактично можна редагувати файл без перезавантаження Tomcat, але зміни, ігноруючи процес, ігнорується.

Справжнє питання полягало б у тому, як застосувати зміни server.xmlбез перезавантаження Tomcat.

Збираючи інформацію з процесу запуску та сторінок завантажувача класів у онлайн-документації Tomcat, можна зрозуміти це більш детально.

Більш конкретно, це описано в serverStartup.txt та UML-діаграмі процесу запуску і відповідних частин можна узагальнити так:

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.

Це відбувається після створення завантажувача завантажувачів сервлет-двигуна (Каталіна).

З цією інформацією зараз зрозуміло, коли в процесі запуску server.xmlфайл розбирається, але він насправді не відповідає на питання, чому потрібно перезапустити Tomcat, щоб застосувати зміни до цього файлу.

Відповідь полягає в тому, що деяку його частину можна динамічно змінювати під час виконання за допомогою JMX . Щоб це стало можливим, необхідно було зареєструвати відповідний MBean (крок b6 вище), а також повинен прийняти операції SET (деякі MBeans мають лише інтерфейс GET).

У вашому конкретному випадку немає способу створити та зареєструвати новий Хост під час виконання, оскільки для нього немає жодних положень, і це причина, чому вам доведеться перезапустити процес Tomcat, щоб завантажувач завантажувачів Bootstrap ініціював цей об’єкт і зареєстрував його Агент JMX.

Згодом можна змінити цей хост від клієнта JMX, такого як той, jconsoleщо постачається в комплекті з будь-яким JDK.

Підключіть вас jconsoleдо Tomcat з підтримкою JMX та перегляньте Host MBean, щоб перевірити всі доступні атрибути:

jconsole, що показує атрибути Host MBean

і перевірте всі доступні операції (одна з них показана нижче як приклад):

jconsole, що показує приклад операції на Host MBean


1
+1 за ознайомлення з JMX.
Раджа Анбаджаган

7

Ні. Потрібен перезапуск.

Сторінка документа Tomcat <Context>згадує:

… Основний файл conf / server.xml не може бути завантажений без перезавантаження Tomcat.


1
Ці оновлення повинні перейти до @dawud ... більше коментарів немає. Погана відповідь для когось, хто сказав we’re talking about <Host>, not <Context>.-1 Вибачте, це я рідко роблю, але там мені доводиться ...
krisFR

@krisFR dawud міг написати відповідь у будь-який час, тоді чи зараз. Не всі грають у цю гру для голосування.
Василь Бурк

1
@krisFR, Василь Бурк Я додав більш детальну відповідь, щоб висвітлити це в більш загальному вигляді. Сподіваюся, що це корисно.
dawud
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.