¿Mejores prácticas para cargar JAR de terceros en la implementación independiente de JBoss AS7?

¿Cuál es la mejor práctica para cargar JAR de terceros en la implementación independiente de JBoss-as-7.0.x?

Yo he tratado:

  1. implementando cada JAR como un módulo independiente con su propio módulo.xml descriptor;
  2. implementar los JAR en el directorio WEB-INF / lib de un WAR;
  3. y el directorio foo.ear / lib para cualquier JAR compartido a través de múltiples WAR.

La ventaja obvia de acercarse a 1. más arriba es la reducción de la huella de memoria en el tiempo de implementación sobre la evaluación 2. y el acercamiento 3. Sin embargo, parece ser bastante arduo mantener ya que cada dependencia que tiene un JAR debe definirse explícitamente en el módulo.xml que no parece muy fácil de mantener con un gran número de bibliotecas de terceros.

Para las dependencias más pequeñas que son privadas para una implementación, guárdalas en WEB-INF/lib en tu .war , eso es para lo que .war . Si usa Maven, debería ser prácticamente automático y transparente para cualquier cosa en el ámbito .

Para dependencias o dependencias grandes y complejas que se compartirán entre varias aplicaciones, use la opción (4):

Implemente cada biblioteca lógica (como “OpenJPA” o “Log4J”) como un módulo, incluidos sus archivos api e impl y cualquier JAR de dependencia que no haya sido proporcionado por otros módulos AS7. Si ya hay un módulo, agregue una dependencia en lugar de agregar un JAR a su módulo. Si varias bibliotecas diferentes comparten algunas dependencias comunes, module.xml en módulos y agréguelos como dependencias de módulos en module.xml .

Utilice jboss-deployment-structure.xml para que su implementación .war / .ear / whatever declare una dependencia en el módulo si no se detecta automáticamente y se carga automáticamente.

Encuentro que es un enfoque de medio a bajo problema que funciona bien. Es más complicado que tirar todo en WEB-INF/lib dentro de la implementación, que es lo que se hace con Java EE estándar. Acelera las redespliegues y ahorra mucho tiempo de despliegue / prueba al reducir conflictos de clase / versión.

Puede usar Maven y el complemento maven-dependency para producir módulos con las dependencias transitivas ya incluidas si está dispuesto a trabajar un poco. Puede ver un ejemplo de eso en un módulo que escribí para la integración de EclipseLink en AS 7 . Automatizo la creación de módulos AS7 siempre que sea posible.