¿Editar "server.xml" en Tomcat sin reiniciar el servidor?

10

Edité el archivo "server.xml" en la confcarpeta de Tomcat 8 . Agregué una nueva Hostetiqueta para un nuevo sitio web.

¿Debo reiniciar el servidor Tomcat?

¿Puedo hacer que Tomcat analice y aplique el recién editado server.xml?

Albahaca Bourque
fuente
@dawud Gracias por el enlace, pero estamos hablando de eso <Host>, no <Context>.
Basil Bourque
2
Independientemente, la parte importante es que server.xmlse analiza una vez al inicio. No se puede volver a cargar sin reiniciar.
Dawud
@dawud Gracias. Veo esa mención ahora. Hice esta respuesta para poder cerrar esta pregunta.
Basil Bourque

Respuestas:

14

Comenzaría diciendo que la pregunta no está hecha correctamente, ya que es muy posible editar el archivo sin reiniciar Tomcat, pero el proceso en ejecución ignora los cambios.

La verdadera pregunta sería cómo aplicar los cambios server.xmlsin reiniciar Tomcat.

Recopilando información del proceso de inicio y las páginas del cargador de clases en la documentación en línea de Tomcat, es posible entender esto con más detalle.

Más específicamente, se describe en serverStartup.txt y el diagrama UML del proceso de inicio y las partes relevantes se pueden resumir de la siguiente manera:

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.

Esto sucede después de la creación del cargador de clases Bootstrap del motor servlet (Catalina).

Con esta información, ahora está claro cuando en el proceso de inicio server.xmlse analiza el archivo, pero en realidad no responde a la pregunta de por qué es necesario reiniciar Tomcat para aplicar cambios a este archivo.

La respuesta es que alguna parte de ella puede ser modificado dinámicamente en tiempo de ejecución utilizando JMX . Para que esto sea posible, se ha tenido que registrar el MBean apropiado (paso b6 anterior) y también debe aceptar las operaciones SET (algunos MBeans solo tienen una interfaz GET).

En su caso específico, no hay forma de crear y registrar un nuevo Host en tiempo de ejecución porque no hay ninguna disposición para ello, y esta es la razón por la que debe reiniciar el proceso de Tomcat para que el cargador de clases Bootstrap instanciar ese objeto y registrarlo con Agente JMX

Posteriormente, es posible modificar ese host desde un cliente JMX como el jconsoleque viene incluido con cualquier JDK.

Conéctese jconsolea un Tomcat habilitado para JMX y explore el MBean del host para verificar todos los atributos disponibles:

jconsole que muestra los atributos de Host MBean

y verifique todas las operaciones disponibles (una de ellas se muestra a continuación como ejemplo):

jconsole que muestra una operación de ejemplo en el host MBean

Dawud
fuente
1
+1 por presentarme a JMX.
Raja Anbazhagan
7

No. Se requiere reinicio.

La página de documentos de Tomcat para <Context>menciones:

... el archivo principal conf / server.xml no se puede volver a cargar sin reiniciar Tomcat.

Albahaca Bourque
fuente
1
Esos votos a favor deberían ir a @dawud ... no más comentarios. Mala respuesta para alguien que dijo we’re talking about <Host>, not <Context>.-1 lo siento, es raro que haga esto, pero allí tengo que ...
krisFR
@krisFR dawud era libre de escribir una Respuesta en cualquier momento, entonces o ahora. No todos juegan este juego por votos positivos.
Basil Bourque
1
@krisFR, Basil Bourque He agregado una respuesta más detallada para cubrir esto de una manera más general. Espero que sea útil.
Dawud