[JBoss] ClassNotFoundException lors du déploiement d'un WAR

ClassNotFoundException lors du déploiement d'un WAR [JBoss] - Java - Programmation

Marsh Posté le 20-06-2008 à 20:30:28    

Bonsoir,
 
J'ai un .war qui se déploie et qui tourne correctement sur un serveur JBoss 3.2.6, mais qui me fait un beau ClassNotFoundException lorsqu'elle est déployée sur un autre serveur JBoss (3.2.6 aussi).
Apparemment, le contenu des .war est identique sur les deux instances. Donc ça ressemble à un problème de Classloader.
 
J'ai fait un peu de travail de recherche la-dessus, sachant que JBoss a une gestion particulière par défaut, les environnements ne sont pas étanches, mais les libs sont partagées.
Je suis tombé la-dessus: http://www.theserverside.com/discu [...] d_id=31630
et sur les liens du bas de la page.
 
Et sinon, un gars a eu le même genre de pb sur ce forum et l'a résolu avec un truc du style de cette page:
http://wiki.jboss.org/wiki/ClassLoadingConfiguration
Mais j'ai pas trop compris comment configurer le jboss-web.xml ou le jboss-app.xml.
 
Quelqu'un a une idée ?


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Marsh Posté le 20-06-2008 à 20:30:28   

Reply

Marsh Posté le 20-06-2008 à 20:40:50    

La classe en question est sensée être dans quel classloader ?

Reply

Marsh Posté le 20-06-2008 à 22:06:11    

le liens que tu donne (le wiki) est pour le cas ou tu a une librairie dans ton war et qu'il y a une version différente dans le classpath jboss.Quel est le nom de la "ClassNotFoundException" ??
Est ce une classe dans une librairie que tu distribue dans ton war? Si non c'est juste que l'un des jboss à une lib en plus dans son répertoire lib

Reply

Marsh Posté le 21-06-2008 à 09:03:12    

verdoux a écrit :

La classe en question est sensée être dans quel classloader ?


tempo14 a écrit :

le liens que tu donne (le wiki) est pour le cas ou tu a une librairie dans ton war et qu'il y a une version différente dans le classpath jboss.Quel est le nom de la "ClassNotFoundException" ??
Est ce une classe dans une librairie que tu distribue dans ton war? Si non c'est juste que l'un des jboss à une lib en plus dans son répertoire lib


 
La classe introuvable, c'est (de mémoire)  quelquechose.jdom.Text qui doit se trouver dans jdom-1.0.jar, si je ne m'abuse. Or ce jar se trouve dans le WEB-INF/lib du war à déployer. L'erreur apparait au moment où le framework Spring "instancie" XFire.
 
J'ai fait un 'ls -al | wc' pour m'assurer que le contenu des répertoires WEB-INF/lib est identique, et il me semble avoir fait la même chose pour les libs top level de JBoss.  
Une différence importante entre les deux environnements, c'est que le premier (celui qui marche) inclut un war supplémentaire dans le répertoire de déploiement. D'après ce que je comprends, JBoss a un "universal classloader" qui centralise le contenu des jars des divers wars. Ce qui fait que le war récalcitrant pourrait aller taper chez le voisin.
Du coup, on a tenté une recopie partielle de l'autre war, en recopiant son WEB-INF/lib pour voir, mais ça n'a rien changé.


---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Marsh Posté le 21-06-2008 à 21:08:49    

effectivement tous ce qui est dans le même répertoire de déploiement est dans le même "classpath". C'est pratique pour les grosses applications pour déployer la partie web séparé de la partie ejb et de quand même garder des interface "locale" mais ça a des effets de bords et oblige à avoir un répertoire de déploiement "propre". (et c'est même parfois emm..dant pour ceux qui font du JSF 1.1 sur une version récente, on doit changer la partie tomcat...)
 
Donc oui le war supplémentaire ajoute ses librairies, et il pourrai y avoir un "conflit" du style 2 même librairies mais pas même version
 

Citation :

J'ai fait un 'ls -al | wc' pour m'assurer que le contenu des répertoires WEB-INF/lib est identique, et il me semble avoir fait la même chose pour les libs top level de JBoss.  


je suppose que tu veut dire "répertoire de déploiement/lib" , c'est là ou sont les librairies communes.

Reply

Marsh Posté le 22-06-2008 à 12:21:45    

Bon, le problème est résolu. Voilà ce qu'on fait:

 
Citation :

Hi all, From my experience, if you want to make your webapps to behave like with standalone Tomcat, that is, each webapp to use its own classes and/or libraries, just modify jboss-service.xml under JBoss' embbeded Tomcat. By updating JBoss' EARDeployer MBean, you're 1st isolating your deployables, so each one will have its own classloader, and 2nd forcing call by value then. In that cases, performance will decrease 10 times (as per JBoss' forum) whenever you need to call remote classes, since serialization is necessary. Besides, you'll need to provide full scheme JNDI names (jnp://localhost:1099/myComp) for your deployable components. In conclusion, you just need to tell Tomcat "do not use JBoss' UnifiedClassloader and do it as you know", and do not tweak anymore JBoss' setup. It worked fine for me. I hope it's useful... Regards


http://raibledesigns.com/rd/entry/ [...] ader_logic

 

En pratique, on a fait ceci:
<attribute name=”Java2ClassLoadingCompliance”>true</attribute>
<attribute name=”UseJBossWebLoader”>false</attribute>
dansjbossweb-tomcat41.sar/META-INF/jboss-service.xml.
http://wiki.jboss.org/wiki/ClassLoadingConfiguration


Message édité par el muchacho le 22-06-2008 à 12:45:51

---------------
Les aéroports où il fait bon attendre, voila un topic qu'il est bien
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed