Editar “server.xml” no Tomcat sem reiniciar o servidor?

10

Eu editei o arquivo "server.xml" na pasta conf do Tomcat 8. Eu adicionei uma nova tag Host para um novo site.

Preciso reiniciar o servidor Tomcat?

Posso fazer com que o Tomcat analise e aplique o recém-editado server.xml ?

    
por Basil Bourque 30.05.2015 / 22:29

2 respostas

12

Eu começaria dizendo que a pergunta não é feita completamente corretamente, já que é possível editar o arquivo sem reiniciar o Tomcat, mas as mudanças são ignoradas pelo processo em execução.

A verdadeira questão seria como aplicar as alterações em server.xml sem reiniciar o Tomcat.

Reunindo informações do processo de inicialização e do class-loader páginas na documentação on-line do Tomcat, é possível entender isso em mais detalhes.

Mais especificamente, é descrito em serverStartup.txt e o Diagrama UML do processo de inicialização e as partes relevantes podem ser resumidas da seguinte forma:

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.

Isso acontece após a criação do carregador de classes Bootstrap do mecanismo de servlet (Catalina).

Com essas informações, fica claro agora que, no processo de inicialização, o arquivo server.xml é analisado, mas não responde realmente à pergunta de por que é necessário reiniciar o Tomcat para aplicar alterações a esse arquivo.

A resposta é que alguma parte dela pode ser modificada dinamicamente em tempo de execução usando o JMX . Para que isto seja possível, o MBean apropriado teve que ser registrado (b6 passo acima), e também tem que aceitar operações SET (alguns MBeans somente possuem uma interface GET).

No seu caso específico, não há como criar e registrar um novo Host em tempo de execução porque não há provisão para ele, e esta é a razão pela qual você precisa reiniciar o processo Tomcat para que o carregador de classe Bootstrap instancie esse objeto e registre-o com o agente JMX.

Posteriormente, é possível modificar esse host de um cliente JMX, como o jconsole que vem junto com qualquer JDK.

Conecte você jconsole a um Tomcat habilitado para JMX e navegue no MBean do host para verificar todos os atributos disponíveis:

everifiquetodasasoperaçõesdisponíveis(umadelasmostradaabaixocomoexemplo):

    
por 31.05.2015 / 14:12
4

Não. Reinício necessário.

A página de documentos do Tomcat para <Context> menciona:

…the main conf/server.xml file cannot be reloaded without restarting Tomcat.

    
por 31.05.2015 / 00:21