Edité el archivo "server.xml" en la conf
carpeta de Tomcat 8 . Agregué una nueva Host
etiqueta para un nuevo sitio web.
¿Debo reiniciar el servidor Tomcat?
¿Puedo hacer que Tomcat analice y aplique el recién editado server.xml
?
fuente
Edité el archivo "server.xml" en la conf
carpeta de Tomcat 8 . Agregué una nueva Host
etiqueta para un nuevo sitio web.
¿Debo reiniciar el servidor Tomcat?
¿Puedo hacer que Tomcat analice y aplique el recién editado server.xml
?
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.xml
sin 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.xml
se 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 jconsole
que viene incluido con cualquier JDK.
Conéctese jconsole
a un Tomcat habilitado para JMX y explore el MBean del host para verificar todos los atributos disponibles:
y verifique todas las operaciones disponibles (una de ellas se muestra a continuación como ejemplo):
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.
we’re talking about <Host>, not <Context>.
-1 lo siento, es raro que haga esto, pero allí tengo que ...
<Host>
, no<Context>
.server.xml
se analiza una vez al inicio. No se puede volver a cargar sin reiniciar.