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

10

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

Должен ли я перезапустить сервер Tomcat?

Могу ли я получить Tomcat для анализа и применения только что отредактированного server.xml?

Базилик Бурк
источник
@ Dawud Спасибо за ссылку, но мы говорим <Host>, нет <Context>.
Василий Бурк
2
В любом случае, важной частью является то, что server.xmlанализируется один раз при запуске. Он не может быть перезагружен без перезагрузки.
Дауд
@ 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.

Это происходит после создания загрузчика классов Bootstrap из движка сервлета (Catalina).

С этой информацией теперь ясно, когда в процессе запуска server.xmlфайл анализируется, но на самом деле он не отвечает на вопрос, почему требуется перезапустить Tomcat, чтобы применить изменения к этому файлу.

Ответ в том, что некоторая его часть может динамически изменяться во время выполнения с использованием JMX . Чтобы это было возможно, необходимо зарегистрировать соответствующий MBean (шаг b6 выше), а также принять операции SET (некоторые MBean имеют только интерфейс GET).

В вашем конкретном случае нет способа создать и зарегистрировать новый хост во время выполнения, потому что для него нет условий, и именно поэтому вам нужно перезапустить процесс Tomcat, чтобы загрузчик классов Bootstrap создал этот объект и зарегистрировал его в Агент JMX

После этого можно изменить этот хост из JMX-клиента, например, jconsoleкоторый поставляется в комплекте с любым JDK.

Подключите вас jconsoleк Tomcat с поддержкой JMX и просмотрите Host MBean, чтобы проверить все доступные атрибуты:

jconsole показывает атрибуты хоста MBean

и проверьте все доступные операции (одна из них показана ниже в качестве примера):

jconsole показывает пример операции на хосте 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, Василий Бурк Я добавил более подробный ответ, чтобы рассказать об этом в более общем виде. Надеюсь, это полезно.
Дауд