2011-11-27 18 views
26

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

que he intentado:

  1. despliegue de cada frasco como un módulo independiente con su propio desriptor Module.xml;
  2. implementando los JAR en el directorio WEB-INF/lib de un WAR;
  3. y el directorio foo.ear/lib para cualquier JAR compartido en varios WAR.

La ventaja obvia de acercarse a 1. anterior es la huella de memoria reducida en el momento del despliegue sobre apprach 2. y 3. Sin embargo, el enfoque parece ser bastante ardua de mantener, ya que cada dependencia que tiene un JAR necesita ser explícitamente definido en el module.xml que no parece muy fácil de mantener con un gran número de bibliotecas de terceros.

+0

Estoy tratando de migrar a JBoss7 y sigo obteniendo un error de entrada de ruta de clase, por ej. "no apunta a un jar válido para una referencia de ruta de clase" - parece que usted resolvió/no encontró dicho error. Esto probablemente tiene algo que ver con la carga de clases de JBoss7, algunas personas tienen el mismo problema que yo pero no tienen ninguna solución, ¿tiene alguna idea? –

+0

Parece que su problema está en su archivo module.xml (si está cargando sus JAR como módulos) o en su archivo jboss-deploment-structure.xml. La mejor manera de hacer referencia a los JAR de la biblioteca estática es colocarlos en un subdirectorio del directorio de los módulos. Si intenta hacer referencia a "org.foo.bar.FooBar;" clase en su archivo FooBarJar.jar, entonces su estructura de directorios quiere ser "JBOSS_HOME/modules/org/foo/bar/main/FooBarJar.jar" y deberá incluir su "JBOSS_HOME/modules/org/foo/bar/main /modle.xml "archivo para definir la asignación al contenedor y a las dependencias que pueda tener ... – travega

+1

... (cont.) Su módulo.El archivo xml se verá así: " ". A continuación, puede agregar la referencia de su módulo a su archivo jboss-deploment-structure.xml que se encuentra en el directorio WEB-INF de su WAR. Esto se verá algo así como: "" ... – travega

Respuesta

16

Para dependencias más pequeñas que son privadas para una implementación, manténgalas en WEB-INF/lib en su .war, para eso sirve. Si está utilizando Maven, debería ser prácticamente automático y transparente para cualquier cosa en el ámbito < compilar/>.

Para grandes dependencias, dependencias complejas o que va a ser compartidos entre varias aplicaciones, la opción (4) Uso:

Implementar cada biblioteca lógica (como "OpenJPA" o "Log4J") como un módulo, incluyendo su api y impl jar 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, divídalas en módulos y agréguelos como dependencias de módulos en module.xml.

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

Me parece que es un enfoque de medio a bajo problema que funciona bien. Es más complicado que deshacerse de todo en WEB-INF/lib dentro de la implementación, que es lo estándar de Java EE que hay que hacer. 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-plugin 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 module I wrote for EclipseLink integration in AS 7. Automatizo la creación de módulos AS7 siempre que sea posible.

+0

En un entorno de clúster (dominio), ¿puede empaquetar su módulo en un .war u otro contenedor y desplegarlo en todos los esclavos desde el controlador de dominio? O bien, ¿copia manualmente los módulos en cada slavedirectory/modules/...? – Gregor

+0

@Gregor No he usado el modo de clúster, así que no sé. Sospecho que probablemente tengas que copiar manualmente, pero han pasado un par de años desde que hice algo con JBoss AS y Java EE (afortunadamente). Lo siento, no puedo ayudar. Intente publicar una nueva pregunta y vincularla a esta para el contexto. –

+0

@Gregor encontró una solución para el modo de dominio. Mi dominio no carga el módulo al reiniciar también – Aadam

Cuestiones relacionadas