Chapitre 4. Outils et Astuces

4.1. Ressources pour assister à votre migration

4.1.1. Ressources pour assister à votre migration

Voici une liste des ressources qui pourraient vous aider quand vous faîtes migrer une application vers JBoss EAP 6.
Outils
Il y a plusieurs outils qui peuvent vous aider à automatiser certains changements de configuration. Voir Section 4.1.2, « Familiarisez-vous avec les outils qui pourraient avoir un impact sur votre migration » pour les détails.
Conseils de débogage
Pour obtenir une liste des causes les plus fréquentes et les résolutions des problèmes et erreurs qui peuvent s'afficher lorsque vous migrez votre application, consulter Section 4.2.1, « Déboguer et Résoudre les problèmes de migration ».
Exemples de migration
Pour obtenir des exemples d'applications migrées dans JBoss EAP 6, voir : Section 4.3.1, « Revue de la migration des exemples d'applications ».

4.1.2. Familiarisez-vous avec les outils qui pourraient avoir un impact sur votre migration

Résumé

Il existe d'autres outils qui peuvent vous assister dans vos efforts de migration. Voici une liste de ces outils, ainsi qu'une description de ce qu'ils peuvent faire.

Tattletale
Avec le changement au niveau du chargement des classes modulaires, vous devez trouver et corriger les dépendances d'applications. Tattletale peut vous aider à identifier les noms de modules dépendants et à générer la configuration XML de votre application.
Outil de migration IronJacamar
Dans JBoss EAP 6, les adaptateurs de ressources et sources de données ne sont plus configurés dans un fichier séparé. Ils sont maintenant définis dans le fichier de configuration et utilisent de nouveaux schémas. L'outil de migration IronJacamar peut vous aider à convertir l'ancienne configuration dans un format qui convient à JBoss EAP 6.

4.1.3. Utiliser Tattletale pour trouver des dépendances d'applications

Résumé

Compte tenu des changement au niveau chargement de classes dans JBoss EAP 6, vous verrez sans doute des traces ClassNotFoundException ou ClassCastException dans le journal de JBoss quand vous migrez votre application. Pour résoudre ces erreurs, vous aurez besoin de trouver les JAR qui contiennent les classes spécifiées par les exceptions.

Tattletale est un excellent outil de tierce partie qui scanne votre application de manière récursive et qui fournit des rapports détaillés sur son contenu. Tatlletale 1.2.0.Beta2 et versions supérieures contient un support supplémentaire pour le nouveau chargement de classe de JBoss Modules, qui est utilisé dans JBoss EAP 6. Le rapport « JBoss AS 7 » de Tattletale peut être utilisé pour identifier automatiquement et pour générer des noms de modules dépendants à inclure dans votre fichier d'application jboss-deployment-structure.xml.

Procédure 4.1. Installer et exécuter Tattletale pour trouver des dépendances d'application

Note

Tattletale est un outil de tierce partie et n'est pas supporté dans JBoss EAP 6. Pour obtenir la documentation la plus récente sur la façon d'installer et d'utiliser Tattletale, consulter le site Tattletale http://www.jboss.org/tattletale.

4.1.4. Télécharger et installer Tattletale

Procédure 4.2. Télécharger et installer Tattletale

  1. Télécharger Tattletale version 1.2.0.Beta2 ou version supérieure à partir de http://sourceforge.net/projects/jboss/files/JBoss%20Tattletale.
  2. Décompresser le fichier dans le répertoire de votre choix.
  3. Modifier le fichier TATTLETALE_HOME/jboss-tattletale.properties ainsi :
    1. Ajouter ee6 et as7 à la propriété profiles.
      profiles=java5, java6, ee6, as7
    2. Dé-commenter les propriétés scan et reports.

4.1.5. Créer et Réviser le Rapport Tattletale

  1. Créer le Rapport Tattletale par la commande : java -jar TATTLETALE_HOME/tattletale.jar APPLICATION_ARCHIVE OUTPUT_DIRECTORY
    Par exemple : java -jar tattletale-1.2.0.Beta2/tattletale.jar ~/applications/jboss-seam-booking.ear output-results/
  2. Dans le navigateur, ouvrir le fichier OUTPUT_DIRECTORY/index.html et cliquer sur la section "JBoss AS 7" sous la section "Reports".
    1. La colonne de gauche liste les archives qui sont utilisées par l'application. Cliquer sur le lien ARCHIVE_NAME pour voir des informations sur les archives, comme leurs emplacements, les informations sur le manifeste, et les classes qu'elles contiennent.
    2. Le lien jboss-deployment-structure.xml sur la colonne de droite indique comment spécifier la dépendance du module de l'archive nommée sur la colonne de droite. Cliquer dessus pour voir comment définir l'information de module de dépendance de déploiement pour cette archive.

4.1.6. Utilisation de l'outil IronJacamar pour migrer les Configurations d'aptateurs de ressources et de sources de données

Résumé

Dans les versions précédentes du serveur d'applications, les adaptateurs de ressources et de sources de données étaient configurés et déployés à l'aide d'un fichier avec un suffixe de *-ds.xml. La distribution IronJacamar 1.1 contient un outil de migration qui peut être utilisé pour convertir ces fichiers de configuration au format attendu par JBoss EAP 6. L'outil analyse le fichier de configuration source de la version précédente, puis crée et écrit la configuration XML dans un fichier de sortie dans le nouveau format. Ce fichier XML peut ensuite être copié et collé sous le sous-système correct dans le fichier de configuration du serveur JBoss EAP 6. Cet outil fait de son mieux pour convertir les anciens attributs et les éléments dans le nouveau format, toutefois, il peut être nécessaire d'apporter des modifications supplémentaires au fichier généré.

Note

L'outil de migration IronJacamar est un outil de tierce partie non pris en charge dans JBoss EAP 6. Pour obtenir plus d'informations sur IronJacamar, visiter http://www.ironjacamar.org/. Pour obtenir la documentation la plus récente sur la façon d'installer et d'utiliser cet outil, consulter http://www.ironjacamar.org/documentation.html.

4.1.7. Télécharger et Installer l'outil de migration IronJacamar

Note

L'outil de migration IronJacamar 1.1 n'est disponible que pour les versions 1.1 ou supérieures et requiert Java 7 ou version supérieure.
  1. Télécharger la dernière distribution d'IronJacamar à partir du lien suivant : http://www.ironjacamar.org/download.html
  2. Décompresser le fichier téléchargé dans un répertoire de votre choix.
  3. Trouver le script de conversion dans la distribution IronJacamar
    • Le script Linux se trouve ici : IRONJACAMAR_HOME/doc/as/converter.sh
    • Le fichier batch Windows se situe à l'adresse suivante : IRONJACAMAR_HOME/doc/as/converter.bat

4.1.8. Utiliser l'outil de migration IronJacamar pour convertir un Fichier de configuration de source de données

Note

Le script de conversion IronJacamar requiert Java 7 ou version supérieure.

Procédure 4.4. Comment convertir un Fichier de configuration de source de données

  1. Ouvrir une ligne de commande et naviguez vers le répertoire IRONJACAMAR_HOME/doc/as/.
  2. Exécuter le script de conversion en saisissant la commande suivante :
    • Dans Linux : ./converter.sh -ds SOURCE_FILE TARGET_FILE
    • Dans Microsoft Windows : ./converter.bat -ds SOURCE_FILE TARGET_FILE
    Le fichier SOURCE_FILE est le fichier datasource -ds.xml en provenance de la version précédente. Le fichier TARGET_FILE contient la nouvelle configuration.
    Ainsi, pour convertir le fichier de configuration d'adaptateur de ressources jboss-seam-booking-ds.xml qui se trouve dans le répertoire en cours, vous saisissez :
    • Dans Linux: ./converter.sh -ds jboss-seam-booking-ds.xml new-datasource-config.xml
    • Dans Microsoft Windows: ./converter.bat -ds jboss-seam-booking-ds.xml new-datasource-config.xml
    Notez que le paramètre de conversion de source de données est -ds.
  3. Copier l'élément <datasource> à partir du fichier cible et coller le dans le fichier de configuration du serveur sous l'élément <subsystem xmlns="urn:jboss:domain:datasources:1.1"><datasources>.

    Important

    Vous devez interrompre le serveur avant de modifier le fichier de configuration du serveur pour que votre changement puisse être persisté au redémarrage du serveur.
    • Si vous exécutez dans un domaine géré, copier l'XML dans le fichier EAP_HOME/domain/configuration/domain.xml.
    • Si vous exécutez dans un serveur autonome, copier l'XML dans le fichier EAP_HOME/standalone/configuration/standalone.xml.
  4. Modifier l'XML créé dans le nouveau fichier de configuration.
    Voici un exemple du fichier de configuration de source de données jboss-seam-booking-ds.xml pour l'exemple Seam 2.2 Booking fourni dans JBoss EAP 5.x:
    <?xml version="1.0" encoding="UTF-8"?>
    <datasources>
      <local-tx-datasource>
        <jndi-name>bookingDatasource</jndi-name>
        <connection-url>jdbc:hsqldb:.</connection-url>
        <driver-class>org.hsqldb.jdbcDriver</driver-class>
        <user-name>sa</user-name>
        <password></password>
      </local-tx-datasource>
    </datasources>
    Voici le fichier de configuration qui a été généré en exécutant le script de convertisseur. Le fichier généré contient un élément <driver-class>. La meilleure façon de définir la classe de pilote dans JBoss EAP 6 est par un élément <driver>. Voici l'XML qui en résulte dans le fichier de configuration JBoss EAP 6 avec des modifications pour décommenter l'élément <driver-class> et ajouter l'élément <driver> correspondant :
    <subsystem xmlns="urn:jboss:domain:datasources:1.1">
      <datasources>
        <datasource enabled="true" jndi-name="java:jboss/datasources/bookingDatasource" jta="true"
                pool-name="bookingDatasource" use-ccm="true" use-java-context="true">
          <connection-url>jdbc:hsqldb:.</connection-url>
          <!-- Comment out the following driver-class element 
               since it is not the preferred way to define this.
               <driver-class>org.hsqldb.jdbcDriver</driver-class>     -->
          <!-- Specify the driver, which is defined later in the datasource  -->
          <driver>h2<driver>
          <transaction-isolation>TRANSACTION_NONE</transaction-isolation>
          <pool>
            <prefill>false</prefill>
            <use-strict-min>false</use-strict-min>
            <flush-strategy>FailingConnectionOnly</flush-strategy>
          </pool>
          <security>
            <user-name>sa</user-name>
            <password/>
          </security>
          <validation>
            <validate-on-match>false</validate-on-match>
            <background-validation>false</background-validation>
            <use-fast-fail>false</use-fast-fail>
          </validation>
          <timeout/>
          <statement>
            <track-statements>false</track-statements>
          </statement>
        </datasource>
        <drivers>
          <!-- The following driver element was not in the 
         XML target file. It was created manually. -->
          <driver name="h2" module="com.h2database.h2">
            <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class>
            </driver>
          </drivers>
      </datasources>
    </subsystem>
    

4.1.9. Utiliser l'outil de migration IronJacamar pour convertir un Fichier de configuration d'adaptateur de ressources

Note

Le script de conversion IronJacamar requiert Java 7 ou version supérieure.
  1. Ouvrir une ligne de commande et naviguer vers le répertoire IRONJACAMAR_HOME/docs/as/.
  2. Exécuter le script de conversion en saisissant la commande suivante :
    • Dans Linux: ./converter.sh -ra SOURCE_FILE TARGET_FILE
    • Dans Microsoft Windows: ./converter.bat -ra SOURCE_FILE TARGET_FILE
    Le fichier SOURCE_FILE est le fichier d'adaptateur de ressource -ds.xml en provenance de la version précédente. Le fichier TARGET_FILE contient la nouvelle configuration.
    Ainsi, pour convertir le fichier de configuration d'adaptateur de ressources mttestadapter-ds.xml qui se trouve dans le répertoire en cours, vous saisissez :
    • Dans Linux: ./converter.sh -ra mttestadapter-ds.xml new-adapter-config.xml
    • Dans Microsoft Windows: ./converter.bat -ra mttestadapter-ds.xml new-adapter-config.xml
    Notez que le paramètre de conversion d'adaptateur de ressources est -ra.
  3. Copier l'élément <resource-adapters> à partir du fichier cible et coller le dans le fichier de configuration du serveur sous l'élément <subsystem xmlns="urn:jboss:domain:resource-adapters:1.1">.

    Important

    Vous devez interrompre le serveur avant de modifier le fichier de configuration du serveur pour que votre changement puisse être persisté au redémarrage du serveur.
    • Si vous exécutez dans un domaine géré, copier l'XML dans le fichier EAP_HOME/domain/configuration/domain.xml.
    • Si vous exécutez dans un serveur autonome, copier l'XML dans le fichier EAP_HOME/standalone/configuration/standalone.xml.
  4. Modifier l'XML créé dans le nouveau fichier de configuration.
    Voici un exemple de fichier de configuration d'adaptateur de ressources mttestadapter-ds.xml de JBoss EAP 5.x TestSuite:
    <?xml version="1.0" encoding="UTF-8"?>
      <!-- ==================================================================== -->
      <!-- ConnectionManager setup for jboss test adapter                       -->
      <!-- Build jmx-api (build/build.sh all) and view for config documentation -->
      <!-- ==================================================================== -->
    <connection-factories>
      <tx-connection-factory>
        <jndi-name>JBossTestCF</jndi-name>
        <xa-transaction/>
        <rar-name>jbosstestadapter.rar</rar-name>
        <connection-definition>javax.resource.cci.ConnectionFactory</connection-definition>
        <config-property name="IntegerProperty" type="java.lang.Integer">2</config-property>
        <config-property name="BooleanProperty" type="java.lang.Boolean">false</config-property>
        <config-property name="DoubleProperty" type="java.lang.Double">5.5</config-property>
        <config-property name="UrlProperty" type="java.net.URL">http://www.jboss.org</config-property>
        <config-property name="sleepInStart" type="long">200</config-property>
        <config-property name="sleepInStop" type="long">200</config-property>
      </tx-connection-factory>
      <tx-connection-factory>
        <jndi-name>JBossTestCF2</jndi-name>
        <xa-transaction/>
        <rar-name>jbosstestadapter.rar</rar-name>
        <connection-definition>javax.resource.cci.ConnectionFactory</connection-definition>
        <config-property name="IntegerProperty" type="java.lang.Integer">2</config-property>
        <config-property name="BooleanProperty" type="java.lang.Boolean">false</config-property>
        <config-property name="DoubleProperty" type="java.lang.Double">5.5</config-property>
        <config-property name="UrlProperty" type="java.net.URL">http://www.jboss.org</config-property>
        <config-property name="sleepInStart" type="long">200</config-property>
        <config-property name="sleepInStop" type="long">200</config-property>
      </tx-connection-factory>
      <tx-connection-factory>
        <jndi-name>JBossTestCFByTx</jndi-name>
        <xa-transaction/>
        <track-connection-by-tx>true</track-connection-by-tx>
        <rar-name>jbosstestadapter.rar</rar-name>
        <connection-definition>javax.resource.cci.ConnectionFactory</connection-definition>
        <config-property name="IntegerProperty" type="java.lang.Integer">2</config-property>
        <config-property name="BooleanProperty" type="java.lang.Boolean">false</config-property>
        <config-property name="DoubleProperty" type="java.lang.Double">5.5</config-property>
        <config-property name="UrlProperty" type="java.net.URL">http://www.jboss.org</config-property>
        <config-property name="sleepInStart" type="long">200</config-property>
        <config-property name="sleepInStop" type="long">200</config-property>
      </tx-connection-factory>
    </connection-factories>
    Voici le fichier de configuration qui a été généré en exécutant le script de convertisseur. Remplacez la valeur de l'attribut de nom de classe « FIXME_MCF_CLASS_NAME » dans le code XML généré par le nom correct de la fabrique de connexions, dans ce cas, « org.jboss.test.jca.adapter.TestManagedConnectionFactory ». Voici le document XML obtenu dans le fichier de configuration de JBoss EAP 6 sous réserve de modifications de la valeur de l'élément <class-name> :
    <subsystem xmlns="urn:jboss:domain:resource-adapters:1.1">
      <resource-adapters>
        <resource-adapter>
          <archive>jbosstestadapter.rar</archive>
          <transaction-support>XATransaction</transaction-support>
          <connection-definitions>
      <!-- Replace the "FIXME_MCF_CLASS_NAME" class-name value with the correct class name
      <connection-definition class-name="FIXME_MCF_CLASS_NAME" enabled="true"
        jndi-name="java:jboss/JBossTestCF" pool-name="JBossTestCF" 
        use-ccm="true" use-java-context="true"> -->
      <connection-definition 
        class-name="org.jboss.test.jca.adapter.TestManagedConnectionFactory" 
        enabled="true"
        jndi-name="java:jboss/JBossTestCF" pool-name="JBossTestCF" 
        use-ccm="true" use-java-context="true">
        <config-property name="IntegerProperty">2</config-property>
        <config-property name="sleepInStart">200</config-property>
        <config-property name="sleepInStop">200</config-property>
        <config-property name="BooleanProperty">false</config-property>
        <config-property name="UrlProperty">http://www.jboss.org</config-property>
        <config-property name="DoubleProperty">5.5</config-property>
        <pool>
          <prefill>false</prefill>
          <use-strict-min>false</use-strict-min>
          <flush-strategy>FailingConnectionOnly</flush-strategy>
        </pool>
        <security>
          <application/>
        </security>
        <timeout/>
        <validation>
          <background-validation>false</background-validation>
          <use-fast-fail>false</use-fast-fail>
        </validation>
      </connection-definition>
          </connection-definitions>
        </resource-adapter>
        <resource-adapter>
          <archive>jbosstestadapter.rar</archive>
          <transaction-support>XATransaction</transaction-support>
          <connection-definitions>
      <!-- Replace the "FIXME_MCF_CLASS_NAME" class-name value with the correct class name
       <connection-definition class-name="FIXME_MCF_CLASS_NAME" enabled="true"
        jndi-name="java:jboss/JBossTestCF2" pool-name="JBossTestCF2" 
        use-ccm="true" use-java-context="true"> -->
      <connection-definition 
        class-name="org.jboss.test.jca.adapter.TestManagedConnectionFactory" 
        enabled="true"
        jndi-name="java:jboss/JBossTestCF2" pool-name="JBossTestCF2" 
        use-ccm="true" use-java-context="true">
        <config-property name="IntegerProperty">2</config-property>
        <config-property name="sleepInStart">200</config-property>
        <config-property name="sleepInStop">200</config-property>
        <config-property name="BooleanProperty">false</config-property>
        <config-property name="UrlProperty">http://www.jboss.org</config-property>
        <config-property name="DoubleProperty">5.5</config-property>
        <pool>
          <prefill>false</prefill>
          <use-strict-min>false</use-strict-min>
          <flush-strategy>FailingConnectionOnly</flush-strategy>
        </pool>
        <security>
          <application/>
        </security>
        <timeout/>
        <validation>
          <background-validation>false</background-validation>
          <use-fast-fail>false</use-fast-fail>
        </validation>
      </connection-definition>
          </connection-definitions>
        </resource-adapter>
        <resource-adapter>
          <archive>jbosstestadapter.rar</archive>
          <transaction-support>XATransaction</transaction-support>
          <connection-definitions>
      <!-- Replace the "FIXME_MCF_CLASS_NAME" class-name value with the correct class name
      <connection-definition class-name="FIXME_MCF_CLASS_NAME" enabled="true"
         jndi-name="java:jboss/JBossTestCFByTx" pool-name="JBossTestCFByTx" 
         use-ccm="true" use-java-context="true"> -->
      <connection-definition 
        class-name="org.jboss.test.jca.adapter.TestManagedConnectionFactory" 
        enabled="true"
        jndi-name="java:jboss/JBossTestCFByTx" pool-name="JBossTestCFByTx" 
        use-ccm="true" use-java-context="true">
        <config-property name="IntegerProperty">2</config-property>
        <config-property name="sleepInStart">200</config-property>
        <config-property name="sleepInStop">200</config-property>
        <config-property name="BooleanProperty">false</config-property>
        <config-property name="UrlProperty">http://www.jboss.org</config-property>
        <config-property name="DoubleProperty">5.5</config-property>
        <pool>
          <prefill>false</prefill>
          <use-strict-min>false</use-strict-min>
          <flush-strategy>FailingConnectionOnly</flush-strategy>
        </pool>
        <security>
          <application/>
        </security>
        <timeout/>
        <validation>
          <background-validation>false</background-validation>
          <use-fast-fail>false</use-fast-fail>
        </validation>
      </connection-definition>
          </connection-definitions>
        </resource-adapter>
      </resource-adapters>
    </subsystem>