2009-08-25 34 views
13

Tengo un problema al desplegar una oreja con paquetes de guerras, jarras y archivos de configuración (archivos .properties) en JBoss 4.3-eap. Aquí está mi estructura del oído:JBoss: el archivo WAR en EAR no puede encontrar la biblioteca JAR en classpath

+app.ear 
    +lib 
    *.jar libraries that the war's use 
    +classes 
     *.properties and other configuration files 
    +META-INF 
    application.xml 
    jbos-app.xml 
    app.war 
    app2.war 
    appn.war 

Tengo el siguiente en mi jboss- app.xml:

<jboss-app> 
    <jmx-name>app.startup.JbossStartUpServer:service=JbossStartUpService</jmx-name> 
</jboss-app>  

Mi aplicacion.xml se ve así:

<application id="app_id"> 
    <display-name>App>/display-name> 
    <description>TheApp>/description> 
<!-- 
    <module id="core"> 
    <java>lib/core.jar</java> 
    </module> 

    <module id="tag"> 
    <java>lib/tag.jar</java> 
    </module> 
--> 
    <module id="app"> 
    <web> 
     <web-uri>app.war</web-uri> 
     <context-root>/</context-root> 
    </web> 
    </module> 

    <module id="app2"> 
    <web> 
     <web-uri>app2.war</web-uri> 
     <context-root>/app2</context-root> 
    </web> 
    </module> 

    <module id="appn"> 
    <web> 
     <web-uri>appn.war</web-uri> 
     <context-root>/appn</context-root> 
    </web> 
    </module> 

    <security-role id="secRole"> 
    <description>users</description> 
    <role-name id="appRoleName">users</role-name> 
    </security-role> 

    <library-directory>lib</library-directory> 

</application> 

Básicamente, una vez Al desplegar el oído, me encuentro con un problema donde una de mis guerras no puede encontrar una clase en el archivo core.jar (java.lang.NoClassDefFoundErro r). Creo que esto se debe al hecho de que la guerra no está encontrando esta biblioteca, aunque está en la carpeta/classpath lib. Si trato de descomentar los primeros dos módulos para agregar las primeras bibliotecas de parte (core.jar y tag.jar), de repente los archivos de propiedades ya no se pueden encontrar (se encuentran, por ahora, en lib/classes, por lo que, de todos modos , son recogidos por el cargador de clases. Idealmente, me gustaría poner las clases en su propio directorio y agregarlo a la ruta de clase por separado, pero por ahora solo estoy tratando de hacer que esto funcione).

que han intentado algunas otras cosas, como agregar manualmente core.jar de archivo manifest.mf de la guerra, el cambio de UseJBossWebLoader a true en el archivo jboss-service.xml bajo la jboss-web.deployer, y varias combinaciones de las anteriores, o ningún éxito. O pierdo el directorio classes de classpath (carpeta lib) y ninguno de mis archivos de propiedades es recogido, o la guerra no puede acceder a la clase adecuada desde el contenedor. Creo que debe haber alguna configuración incorrecta, y aunque he intentado leer sobre la forma en que JBoss realiza las implementaciones de EAR y la carga de clases, parece que no puedo adaptarla a mi configuración actual.

Cualquier sugerencia sería muy apreciada.

Éstos son algunos sitios que he estado mirando:
Raible Designs JBoss ClassLoader Logic

Estos son sólo algunos de los sitios que he mirado. Los problemas pueden deberse también a la configuración del proyecto, ya que este es un gran proyecto establecido que (en cierta medida) se migra de una implementación weblogic a Jboss. Entonces, si hay algo que DEBE funcionar, pero no funciona, podría ser un problema con parte de la configuración del código/proyecto. Desafortunadamente, todavía no estoy en el punto en el que puedo decir si es un problema relacionado con JBoss o un problema con el proyecto.

Respuesta

10

La etiqueta <library-directory> en application.xml es una característica de JavaEE5, y no creo que JBoss 4.3 sea totalmente compatible con JavaEE5 (puede hacer EJB3, sí, pero es solo compatibilidad parcial).

Así que hay que volver a usar los archivos JAR declaradas explícitamente:

<module> 
    <java>lib/core.jar</java> 
</module> 

En cuanto a los archivos de propiedades, es necesario agregar el directorio que están en un módulo de Java, por lo que por su ejemplo :

<module> 
    <java>lib/classes</java> 
</module> 
+0

¡Esto ha resuelto mi problema! ¡Muchas gracias! Sin embargo, me gustaría hacer una pregunta de seguimiento: si agrego esos módulos a la aplicación.xml, ¿significa eso que no necesito la propiedad class-path en los archivos manifest.mf de las guerras?¿O solo es este el caso si configuro el atributo UseJBossWebLoader en jboss-web.deployer como verdadero? – Mike

+0

No estoy seguro del problema del manifiesto, no lo he intentado yo mismo, siempre confío en el cargador de clases aplanado predeterminado. En cuanto a su formateo, no use las etiquetas core/pre, no funcionan muy bien. Use los íconos de formateo en el editor. – skaffman

Cuestiones relacionadas