4.3.3. Migrer l'exemple de Seam 2.2 Booking dans JBoss EAP 6
Résumé
La migration du Seam 2.2 Booking EAR est plus compliquée que celle de l'exemple Seam 2.2 JPA WAR. On peut trouver la documentation pour l'exemple Seam 2.2 JPA WAR à cet endroit : Section 4.3.2, « Migrer l'exemple Seam 2.2 dans JBoss EAP 6 ». Pour migrer l'application, vous devez procéder ainsi :
- Initialiser JSF 1.2 à la place de JSF 2 (défaut).
- Regrouper les anciennes versions des JAR Hibernate plutôt que les JARS fournis dans Boss EAP 6.
- Changer les liaisons JNDI pour qu'elles utilisent la nouvelle syntaxe de Java EE 6 JNDI portable.
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.
Procédure 4.7. Migration de l'exemple Seam 2.2 Booking
Créer le fichier
jboss-deployment-structure.xml
Créer un nouveau fichier nomméjboss-deployment-structure.xml
dansjboss-seam-booking.ear/META-INF/
et ajouter le contenu suivant :<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.log4j" export="true"/> <module name="org.dom4j" export="true"/> <module name="org.apache.commons.logging" export="true"/> <module name="org.apache.commons.collections" export="true"/> </dependencies> <exclusions> <module name="org.hibernate" slot="main"/> </exclusions> </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>
Modifier le fichier
jboss-seam-booking.jar/META-INF/persistence.xml
comme suit.- Supprimer ou dé-commenter la propriété hibernate de la classe de fournisseur de cache :
<!-- <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/> -->
- Ajouter la propriété de module du fournisseur dans le fichier
jboss-seam-booking.jar/META-INF/persistence.xml
:<property name="jboss.as.jpa.providerModule" value="hibernate3-bundled" />
- Modifier la propriété
jta-data-source
pour utiliser le nom JNDI de la source de données JDBC par défaut :<jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
Copier les JAR de la distribution Seam 2.2
Copier les JAR suivants de la distribution Seam 2.2EAP5.x_HOME/jboss-eap5.x/seam/lib/
dans le répertoirejboss-seam-booking.ear/lib
.antlr.jar slf4j-api.jar slf4j-log4j12.jar hibernate-core.jar hibernate-entitymanager.jar hibernate-validator.jar hibernate-annotations.jar hibernate-commons-annotations.jar
Modification des noms de Recherche JNDI
Changer les chaînes de recherche JNDI dans le fichierjboss-seam-booking.war/WEB-INF/components.xml
. En raison de nouvelles règles portables JNDI, JBoss EAP 6 se relie maintenant aux EJB à l'aide de règles de syntaxe portables JNDI et vous ne pouvez pas utiliser jndiPattern utilisé dans JBoss EAP 5. Voici les changements requis pour JBoss EAP 6 :java:global/jboss-seam-booking/jboss-seam-booking/HotelSearchingAction!org.jboss.seam.example.booking.HotelSearching java:app/jboss-seam-booking/HotelSearchingAction!org.jboss.seam.example.booking.HotelSearching java:module/HotelSearchingAction!org.jboss.seam.example.booking.HotelSearching java:global/jboss-seam-booking/jboss-seam-booking/HotelSearchingAction java:app/jboss-seam-booking/HotelSearchingAction java:module/HotelSearchingAction
Les chaînes de recherche JNDI des EJB du framework Seam 2.2 doivent être modifiées ainsi :java:global/jboss-seam-booking/jboss-seam/EjbSynchronizations!org.jboss.seam.transaction.LocalEjbSynchronizations java:app/jboss-seam/EjbSynchronizations!org.jboss.seam.transaction.LocalEjbSynchronizations java:module/EjbSynchronizations!org.jboss.seam.transaction.LocalEjbSynchronizations java:global/jboss-seam-booking/jboss-seam/EjbSynchronizations java:app/jboss-seam/EjbSynchronizations java:module/EjbSynchronizations
Vous pouvez adopter une des approches suivantes :Ajouter des éléments de composants
Vous pouvez ajouter unjndi-name
pour chaque EJB duWEB-INF/components.xml
:<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"/> <component class="org.jboss.seam.example.booking.AuthenticatorAction" jndi-name="java:app/jboss-seam-booking/AuthenticatorAction" /> <component class="org.jboss.seam.example.booking.BookingListAction" jndi-name="java:app/jboss-seam-booking/BookingListAction" /> <component class="org.jboss.seam.example.booking.RegisterAction" jndi-name="java:app/jboss-seam-booking/RegisterAction" /> <component class="org.jboss.seam.example.booking.HotelSearchingAction" jndi-name="java:app/jboss-seam-booking/HotelSearchingAction" /> <component class="org.jboss.seam.example.booking.HotelBookingAction" jndi-name="java:app/jboss-seam-booking/HotelBookingAction" /> <component class="org.jboss.seam.example.booking.ChangePasswordAction" jndi-name="java:app/jboss-seam-booking/ChangePasswordAction" />
- Vous pouvez modifier le code en ajoutant l'annotation
@JNDIName(value="")
qui indique le chemin JNDI. Vous trouverez un exemple de modification de code de bean de session stateless ci-dessous. Vous trouverez également une description détaillée de ce processus dans la documentation de référence Seam 2.2.@Stateless @Name("authenticator") @JndiName(value="java:app/jboss-seam-booking/AuthenticatorAction") public class AuthenticatorAction implements Authenticator { ... }
Résultat :
L'exemple Seam 2.2 Booking déploie et exécute avec succès sur JBoss EAP 6.