2009-08-25 9 views
13

J'ai un problème pour déployer une oreille avec des guerres groupées, des fichiers jar et des fichiers de configuration (fichiers .properties) sur JBoss 4.3-eap. Voici ma structure de l'oreille:JBoss: le fichier WAR dans EAR ne trouve pas la bibliothèque JAR sur le chemin de classe

+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 

je suit dans mon jboss-app.xml:

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

Mon application.xml ressemble à ceci:

<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> 

Fondamentalement, sur déployant l'oreille, je rencontre un problème où une de mes guerres ne trouve pas de classe dans le fichier core.jar (java.lang.NoClassDefFoundErro r). Je pense que cela est dû au fait que la guerre ne trouve pas cette bibliothèque, même si elle se trouve dans le dossier/classpath lib. Si je tente de décommenter les deux premiers modules pour ajouter les premières bibliothèques parti (core.jar et tag.jar), tout à coup les fichiers de propriétés ne peuvent plus être trouvés (ils sont situés, pour l'instant, dans lib/classes, de sorte que, j'espère quand même , dans le meilleur des cas je voudrais mettre des classes dans son propre répertoire et l'ajouter au classpath séparément, mais pour l'instant j'essaye juste de faire ce travail).

J'ai essayé d'autres choses, y compris l'ajout manuel core.jar au fichier manifest.mf de la guerre, en changeant UseJBossWebLoader true dans le fichier jboss-service.xml sous le jboss-web.deployer, et diverses combinaisons de ce qui précède, pas de succès. Je perds le répertoire classes du dossier classpath (dossier lib) et aucun de mes fichiers de propriétés n'est récupéré, ou la guerre ne peut pas accéder à la classe appropriée à partir du fichier jar. Je pense qu'il doit y avoir une configuration qui ne va pas, et bien que j'aie essayé de lire la façon dont JBoss fait les déploiements EAR et la charge de classes, je n'arrive pas à l'adapter à mon installation actuelle.

Toutes les suggestions seraient grandement appréciées.

Voici quelques sites que j'ai regardé:
Raible Designs JBoss ClassLoader Logic

Ce ne sont que quelques-uns des sites que je l'ai regardé. Les problèmes peuvent également provenir de la configuration du projet, car il s'agit d'un grand projet établi qui est (dans une certaine mesure) migré d'un déploiement weblogic vers Jboss. Donc, s'il y a quelque chose qui DEVRAIT fonctionner, mais qui ne fonctionne pas, cela peut être un problème avec une partie de la configuration du code/projet. Malheureusement, je ne suis pas encore au point où je peux dire si c'est un problème lié à JBoss, ou un problème avec le projet.

Répondre

10

La balise <library-directory> dans application.xml est une fonctionnalité JavaEE5, et je ne pense pas que JBoss 4.3 soit entièrement compatible JavaEE5 (il peut faire l'EJB3, oui, mais ce n'est qu'un support partiel).

Vous avez donc besoin de revenir à l'utilisation des fichiers JAR explicitement déclarés:

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

En ce qui concerne les fichiers de vos propriétés, vous devez ajouter le répertoire qu'ils sont en tant que module java, donc pour votre exemple :

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

Cela a résolu mon problème! Merci beaucoup! Je voudrais cependant poser une question de suivi: si j'ajoute ces modules au fichier application.xml, cela signifie-t-il que je n'ai pas besoin de la propriété class-path dans les fichiers manifest.mf de la guerre?Ou est-ce seulement le cas si je mets l'attribut UseJBossWebLoader dans jboss-web.deployer à true? – Mike

+0

Je ne suis pas sûr du problème manifeste, je n'ai pas essayé moi-même, je me base toujours sur le classloader aplati par défaut. Quant à votre mise en forme, n'utilisez pas les balises core/pre, elles ne fonctionnent pas très bien. Utilisez les icônes de formatage dans l'éditeur. – skaffman

Questions connexes