Назад | Перейти на главную страницу

Отредактировать «server.xml» в Tomcat без перезапуска сервера?

Я редактировал файл 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.