4.2.5. Déboguer et résoudre les problèmes de migration

Les ClassCastExceptions apparaissent souvent quand une classe est chargée par un chargeur de classes qui diffère de la classe qu'il étend. Souvent le résultat d'une même classe qui peut exister dans plusieurs JAR.
  1. Chercher dans l'application pour trouver tous les JAR qui contiennent la classe nommée par l'exception ClassCastException. S'il y a un module défini pour la classe, chercher et supprimer les JAR en double des WAR et EAR de l'application.
  2. Chercher le module JBoss qui contient la classe et qui définit explicitement la dépendance dans le fichier MANIFEST.MF ou dans le fichier jboss-deployment-structure.xml. Pour plus d'informations sur le chargement de classes, voir Chargement de classes et Sous-déploiements (Class Loading and Subdeployments) dans le chapitre Class Loading and Modules du Development Guide de JBoss EAP 6 https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/.
  3. Si vous ne pouvez le résoudre par les étapes ci-dessus, vous pourrez souvent déterminer la cause du problème en imprimant les informations de chargement de classe dans le log. Par exemple, vous pourrez voir l'exception ClassCastException dans le journal :
    java.lang.ClassCastException: com.example1.CustomClass1 cannot be cast to com.example2.CustomClass2
    1. Dans votre code, imprimer les informations de chargement de classe des classes nommées par ClassCastException dans le journal, comme suit :
      logger.info("Class loader for CustomClass1: " + 
            com.example1.CustomClass1.getClass().getClassLoader().toString());
      logger.info("Class loader for CustomClass2: " + 
            com.example2.CustomClass2.getClass().getClassLoader().toString());
      
    2. L'information qui se trouve dans le journal montre les modules qui correspondent à des classes de chargement et, selon votre application, vous aurez besoin de retirer ou de déplacer les JAR qui entrent en conflit.