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