26 votos

¿Por qué a tomcat le gusta borrar mi archivo context.xml?

Estoy desarrollando una aplicación Java basada en la web en el trabajo y (obviamente) tengo que ejecutarla localmente durante el desarrollo. He averiguado los documentos de Tomcat y tengo un archivo context.xml adecuado en /etc/tomcat6/Catalina/localhost/ pero de vez en cuando, Tomcat decide borrarlo. Lo que significa que tengo que volver a ponerlo y reiniciar Tomcat.

¿Por qué hace esto? He buscado en los documentos de Tomcat y no sé qué hacer.

(Ah, sí: en realidad no se llama context.xml pero owners.xml ya que ese es el prefijo de la ruta HTTP para esta aplicación).

Actualización

Ahora he visto que Tomcat elimina el archivo mientras se ejecutaba Tomcat . Creo que tengo que presentar un error...

0 votos

Tener este problema a. Parece que cuando se reemplaza la guerra que causa undeployment de la aplicación que provoca la eliminación del archivo de contexto. No tengo una solución, pero me gustaría tener una que sea más conveniente que reloadable=false stackoverflow.com/questions/4032773/

20voto

Jan Zyka Puntos 206

Resumen rápido El contexto: hay varias condiciones (como cambiar el archivo war, borrar la webapp o reemplazarla con un nuevo contenido) bajo las cuales tomcat deshará el despliegue del contexto incluyendo la eliminación del archivo de contexto.

Detalles : Si tomcat hace o no hace autoDeployment (significa la comprobación de los cambios en su descriptor .xml, así como la comprobación de los cambios en el directorio webapp) es impulsado por:

  1. server.xml localizado en la sección $CATALINA_HOME/conf/server.xml:

    <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">

  2. También puede establecer esta propiedad en su archivo de contexto sobrecargando el valor

Citando el documento para los casos en que autoDeploy=true puede causar la eliminación de su archivo de contexto:

  • La eliminación de un archivo WAR desencadenará un desdespliegue de la aplicación con la eliminación de cualquier directorio expandido asociado, archivo de contexto y el directorio de trabajo.
  • La eliminación de un directorio desencadenará un desdespliegue de la aplicación con la eliminación de cualquier archivo de contexto asociado y el directorio de trabajo.
  • La actualización de un archivo WAR desencadenará un desdespliegue de la aplicación con la eliminación de cualquier directorio expandido asociado, archivo de contexto y el directorio de trabajo.
  • La actualización de un directorio (no del contenido del directorio) desencadenará un desdespliegue de la aplicación con la eliminación de cualquier archivo de contexto asociado y el directorio de trabajo.

Detalles exhaustivos : http://tomcat.apache.org/tomcat-6.0-doc/config/host.html#Automatic%20Application%20Deployment

0 votos

Esta no es una respuesta completa - ver serverfault.com/faq#deletion

0 votos

:) por favor, ayúdate a ti mismo (parece que el resaltado de sintaxis funciona de forma ligeramente diferente que en stackoverflow, que borró parte de la respuesta antes)

0 votos

La cuestión es que si sólo añades un enlace, el objetivo del enlace puede desaparecer, haciendo que la respuesta sea inútil. Por eso serverfault.com te anima a publicar la respuesta real en lugar de sólo el enlace. Y cuando comenté, el resto del texto no era visible. Aún así, recomendaría publicar una respuesta más completa en lugar de un breve resumen del enlace.

6voto

Gabriel Glenn Puntos 21

Si usted no quiero autoDeploy en entornos de producción, por ejemplo, puede considerar los siguientes atributos en el archivo de contexto conf/Catalina/localhost:

  • autoDeploy="false"
  • y deployXML="false"

autoDeploy="false" puede no funcionar solo porque el context.xml de la aplicación (en META-INF) puede anular la configuración server.xml de autoDeploy.

  • El META-INF/context.xml de la aplicación se utilizará en el entorno de desarrollo, con autoDeploy
  • El contexto conf/Catalina/localhost en producción, sin autoDeploy.

Documentación del atributo deployXML vale la pena leer la documentación de los atributos (§ Implementación estándar).

Caso de usuario de autoDeploy exhaustivo, y cuando se elimina el contexto : es decir, la aplicación sin desplegar, el caso de usuario se documenta se puede encontrar aquí .

2voto

JoseK Puntos 425

No puede responder a la Por qué poco.

Sin embargo, Este enlace puede detener esto estableciendo el autoDeploy="false" en server.xml

1 votos

Bajo tomcat7 autoDeploy="false" no hace ninguna diferencia :(

1voto

TheDude Puntos 111

Sinceramente, no sé cuál es la razón por la que Tomcat hace esto, pero intente añadir el siguiente atributo XML a su elemento de contexto

reloadable="false"

Así que su contexto podría ser algo así:

<Context path="/" docBase="/some/path/name" reloadable="false">
<!-- Context related stuff -->
</Context>

Esto debería evitar que Tomcat borre el archivo

0 votos

Desgraciadamente, eso dificulta el desarrollo, ya que tendría que reiniciar Tomcat después de cada compilación.

0 votos

comprobar jrebel para ayudar con esto en el desarrollo: zeroturnaround.com/jrebel

1voto

artemb Puntos 108

Tener este problema a. Parece que cuando se reemplaza el war se produce el desdoblamiento de la aplicación, lo que provoca el borrado del archivo de contexto. No tengo una solución, pero me gustaría tener una que sea más conveniente que reloadable=false

http://stackoverflow.com/questions/4032773/why-does-tomcat-replace-context-xml-on-redeploy

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X