2014-05-13 1 views
1

Quelle est la bonne façon de déboguer ces problèmes?WildFly 8/JBoss: Manière générale de déboguer les erreurs de liaison du chargeur de classes Java EE

Dans mon cas, j'ai des problèmes énormes avec un LinkageError dans mon projet web Java EE:

Problème

I API JSF inclus (jboss-jsf-api_2.2_spec-2.2.5.jar) dans mon répertoire de modules wildfly, c'est-à-dire qu'il sera chargé par le chargeur de classes Wildfly. J'ai des bibliothèques externes qui dépendent également de cette implémentation JSF (par exemple Primefaces et OmniFaces). De plus, pour laisser le processus de construction s'exécuter sans erreur, je dois ajouter la bibliothèque en tant que bibliothèque EAR séparée.

La manière étrange consiste à ajouter un haricot qui implémente la fonction avec des paramètres d'événement de face, par ex.

public void myValueChangeListener(ValueChangeEvent e) { 
// do sth. 
} 

mettre en œuvre ces fonctions dans les résultats ...

10:22:18,571 WARN [org.jboss.modules] (MSC service thread 1-1) Failed to define class javax.faces.event.ValueChangeEvent in Module "javax.faces.api:main" from local module loader @468a169f (finder: local module finder @13d344e7 (roots: /home/user/app-server/wildfly8/modules,/home/user/app-server/wildfly8/modules/system/layers/base)): java.lang.LinkageError: loader constraint violation: loader (instance of org/jboss/modules/ModuleClassLoader) previously initiated loading for a different type with name "javax/faces/event/ValueChangeEvent" 

... point de départ de mon GRAVES

10:22:18,578 SEVERE [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-1) Critical error during deployment: : java.lang.LinkageError: loader constraint violation: loader (instance of org/jboss/modules/ModuleClassLoader) previously initiated loading for a different type with name "javax/faces/event/ValueChangeEvent" 

(suppression du paramètre permet de construire le projet sans erreurs)

Question

Comment faire face à de tels problèmes? J'aurais besoin d'un aperçu de l'ordre dans lequel les classes sont chargées. Probablement il y a un moyen d'afficher une arborescence entière de classloader ou n'importe quel outil de profilage qui fera la même chose.

Répondre

2

Vous pouvez activer le débogage ou la consignation de trace sur les modules JBoss, mais cela risque d'être une trop grande quantité d'informations.

Dans votre cas, pourquoi ajoutez-vous un module (c'est-à-dire jboss-jsf-api_2.2_spec-2.2.5.jar) contenu dans WildFly (exactement la même version dans 8.0.0.Final)? C'est pourquoi le chargeur de module se plaint des classes en double.

Il existe une liste des dépendances de modules implicites pour les déploiements WildFly (qui inclut jsf-api pour les déploiements JSF). Si vous avez besoin de dépendances supplémentaires de la distribution WildFly, vous devez simplement déclarer cette dépendance au lieu de dupliquer le module.

Voir Class Loading in WildFly pour plus de détails.

+0

Eh bien, vous avez raison de ne pas ajouter la bibliothèque manuellement dans le projet. Un autre problème était une séparation manquante entre la logique métier et le niveau Web. Maintenant j'ai supprimé l'implémentation de jsf particulière mais quand j'essaye d'attraper mon événement dans mon implémentation d'écouteur d'action, mon bean n'est pas instancié pendant le déploiement à cause d'une erreur de chargement de classe: Tapez javax.faces.event.ValueChangeEvent de [Module "deployment.myApp .ear.appCore.jar: principal "de Service Module Loader] introuvable. –

Questions connexes