4.3.8. Récapitulatif des changements à effectuer lors d'une Migration de l'application Seam 2.2 Booking

Bien que ce serait beaucoup plus efficace de déterminer à l'avance les dépendances et ajouter les dépendances implicites en une seule étape, cet exercice montre comment les problèmes apparaissent dans le journal et donne des informations sur la façon de les déboguer et de les résoudre. Ce qui suit est un résumé des modifications apportées à la demande lors de sa migration vers JBoss EAP 6.

Important

Les applications qui utilisent Hibernate directement avec Seam 2.2 utilisent sans doute une version d'Hibernate 3 empaquetée dans l'application. Hibernate 4, fourni par le module org.hibernate de JBoss EAP 6, n'est pas pris en charge par Seam 2.2. Cet exemple a pour but de vous aider à exécuter votre application dans JBoss EAP 6 comme première étape. Notez qu'empaqueter Hibernate 3 avec une application Seam 2.2 n'est pas une configuration prise en charge.
  1. Vous avez créé un fichier jboss-deployment-structure.xml dans le répertoire META-INF/ du EAR. Vous avez ajouté <dependencies> et <exclusions> pour résoudre ClassNotFoundExceptions. Ce fichier contient les données suivantes :
    <jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0">
      <deployment>
      	  <dependencies>
    	      <module name="javax.faces.api" slot="1.2" export="true"/>
    	      <module name="com.sun.jsf-impl" slot="1.2" export="true"/>
    	      <module name="org.apache.commons.logging" export="true"/>
        	      <module name="org.dom4j" export="true"/>
    	      <module name="org.apache.commons.collections" export="true"/>
    	    </dependencies>
      </deployment>
      <sub-deployment name="jboss-seam-booking.war">
      	<exclusions>
    	      <module name="javax.faces.api" slot="main"/>
    	      <module name="com.sun.jsf-impl" slot="main"/>
    	    </exclusions>
    	    <dependencies>
    	      <module name="javax.faces.api" slot="1.2"/>
    	      <module name="com.sun.jsf-impl" slot="1.2"/>
    	    </dependencies>
      </sub-deployment>
    </jboss-deployment-structure>
    
  2. Vous avez copié les JAR suivants du répertoire EAP5_HOME/jboss-eap-5.X/seam/lib/ (remplacer 5.X par la version EAP 5 à partir de laquelle vous allez migrer) dans le répertoire jboss-seam-booking.ear/lib/ afin de résoudre ClassNotFoundExceptions  :
    • hibernate-core.jar
    • hibernate-validator.jar
  3. Vous avez modifié le fichier jboss-seam-booking.jar/META-INF/persistence.xml comme suit.
    1. Vous avez changé l'élément jta-data-source pour qu'il utilise la base de données Exemple fourni dans JBoss EAP 6 :
      <!-- <jta-data-source>java:/bookingDatasource</jta-data-source> -->
      <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
      
    2. Vous avez dé-commenté la propriété hibernate.cache.provider_class :
      <!-- <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/> -->
      
  4. Vous avez modifié les fichiers lib/components.xml du WAR pour utiliser les nouvelles liaisons JNDI
    1. Vous avez remplacé l'élément existant core:init comme suit :
      <!-- <core:init jndi-pattern="jboss-seam-booking/#{ejbName}/local" debug="true" distributable="false"/> -->
      <core:init jndi-pattern="java:app/jboss-seam-booking.jar/#{ejbName}" debug="true" distributable="false"/>
      
    2. Vous avez ajouté des éléments de composants pour les liaisons JNDI "EjbSynchronizations" et les liaisons JNDI "TimerServiceDispatcher".
      <component class="org.jboss.seam.transaction.EjbSynchronizations" jndi-name="java:app/jboss-seam/EjbSynchronizations"/>
       <component class="org.jboss.seam.async.TimerServiceDispatcher" jndi-name="java:app/jboss-seam/TimerServiceDispatcher"/>