Спершу я б сказав, що запитання зроблено не повністю правильно, оскільки це фактично можна редагувати файл без перезавантаження 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, щоб перевірити всі доступні атрибути:
і перевірте всі доступні операції (одна з них показана нижче як приклад):