¿Hay razones para colocar una dependencia en el directorio lib de un servidor web en lugar de incluirlo en el archivo War?

StackOverflow https://stackoverflow.com/questions/1438738

Pregunta

Si tengo un Jar de dependencia para mi aplicación, ¿es mejor colocarlo en el directorio lib de war files o en el directorio lib del servidor global de aplicaciones (como Tomcat)? ¿Qué gano usando un enfoque sobre otro?

Me viene a la mente el espacio en disco, pero vivimos en una época en que el espacio en disco es barato. ¿Hay alguna diferencia en el uso de la memoria? ¿Puede alguien con más experiencia que yo enumerar los pros y los contras de ambas opciones?

¿Fue útil?

Solución

En términos generales, es mucho mejor tener WAR autocontenido para que no tenga que depender de la configuración del contenedor. Hace que la implementación sea mucho más fácil también. Así que intenta poner la biblioteca en WAR si puedes.

Sin embargo, me encontré con casos cuando instalar bibliotecas en contenedores tiene sentido. Por ejemplo,

  1. Tenemos algunas bibliotecas internas utilizadas por cada aplicación web y son enormes. Los instalamos en el contenedor para que todas las aplicaciones web utilicen la misma versión y también ahorre en memoria y espacio en disco.

  2. Las bibliotecas instaladas en WEB-INF / lib no están disponibles para el contenedor. Si necesita hacer referencia a estos en context.xml (como el controlador JDBC definido en Recursos), debe ponerlos en server / lib.

  3. Si desea enviar registros de log4j de todas las webapps al mismo archivo, debe colocar log4j jar en el servidor / lib. De lo contrario, cada aplicación web utiliza su propio registrador.

Otros consejos

Si desea utilizar las capacidades de gestión de recursos del contenedor, p. conectándose a una base de datos SQL y proporcionando una búsqueda JNDI y un grupo de conexiones para ello, entonces el software contenedor necesitará acceso a las bibliotecas y los controladores para administrar los recursos.

De lo contrario, probablemente no desee instalarlos en el directorio server / lib y suponga que están allí y funcionarán, ya que diferentes aplicaciones web pueden tener requisitos de versión sutilmente diferentes.

Para obtener una descripción detallada de la jerarquía del cargador de clases implementada por Catalina, debe consultar Instrucciones para los cargadores de clases . Esto lo ayudará a comprender cuándo poner los frascos a disposición del contenedor, de todas las aplicaciones web, de una sola aplicación web ... y dónde colocarlos.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top