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):