Я редактировал файл server.xml в Tomcat 8 conf
папка. Я добавил новый Host
тег для нового веб-сайта.
Я должен перезапустить сервер Tomcat?
Могу ли я заставить Tomcat проанализировать и применить недавно отредактированный server.xml
?
Я бы начал с того, что вопрос поставлен не совсем правильно, поскольку вполне возможно редактировать файл без перезапуска 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.
Это происходит после создания загрузчика классов Bootstrap движка сервлетов (Catalina).
С этой информацией теперь ясно, когда в процессе запуска server.xml
файл анализируется, но на самом деле он не отвечает на вопрос, почему необходимо перезапустить Tomcat, чтобы применить изменения к этому файлу.
Ответ в том, что некоторые его часть может быть изменена динамически во время выполнения используя JMX. Чтобы это было возможно, соответствующий MBean должен быть зарегистрирован (шаг b6 выше), а также должен принимать операции SET (некоторые MBean-компоненты имеют только интерфейс GET).
В вашем конкретном случае нет способа создать и зарегистрировать новый хост во время выполнения, потому что для него нет возможности, и это причина, по которой вам нужно перезапустить процесс Tomcat, чтобы загрузчик классов Bootstrap создал экземпляр этого объекта и зарегистрировал его с помощью Агент JMX.
Впоследствии можно изменить этот хост с помощью клиента JMX, такого как jconsole
который поставляется в комплекте с любым JDK.
Подключить вас jconsole
в Tomcat с поддержкой JMX и просмотрите Host MBean, чтобы проверить все доступные атрибуты:
и отметьте все доступные операции (одна из них показана ниже в качестве примера):
Страница документации Tomcat для <Context>
упоминает:
… Главный файл conf / server.xml нельзя перезагрузить без перезапуска Tomcat.