4.3.3. Migración del ejemplo de reservas Seam 2.2 a JBoss EAP 6
Resumen
La migración EAR de reservas Seam 2.2 es más complicada que el ejemplo de Seam 2.2 JPA WAR. La documentación para la migración del ejemplo Seam 2.2 JPA WAR se puede encontrar aquí: Sección 4.3.2, “Migración del ejemplo Seam 2.2 JPA a JBoss EAP 6”. Para migrar la aplicación tiene que hacer la siguiente:
- Inicializar JSF 1.2 en lugar del JSF 2 predeterminado.
- Agrupe versiones antiguas de las JARs Hibernate en lugar de utilizar las que se envían junto con JBoss EAP 6.
- Cambie los enlaces JNDI para utilizar la nueva sintaxis portátil JNDI Java EE 6.
Importante
Las aplicaciones que usan Hibernate directamente con Seam 2.2 pueden usar una versión de Hibernate 3 empacada dentro de la aplicación. Hibernate 4, el cual se proporciona a través del módulo org.hibernate de JBoss EAP 6 no es soportado por parte de Seam 2.2. Este ejemplo tiene el propósito de ayudarle a empezar a ejecutar su JBoss EAP 6 como primer paso. Tenga en cuenta que el empacar Hibernate 3 con una aplicación Seam 2.2 no es una configuración soportada.
Procedimiento 4.7. Migración del ejemplo de reservas Seam 2.2
Cree el archivo
jboss-deployment-structure.xml
Cree un nuevo archivo llamadojboss-deployment-structure.xml
en eljboss-seam-booking.ear/META-INF/
y agregue el siguiente contenido:<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>
Modifique el archivo
jboss-seam-booking.jar/META-INF/persistence.xml
así:- Omita o borre el comentario de la propiedad hibernate para la clase del proveedor cache:
<!-- <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/> -->
- Agregue la propiedad del módulo proveedor al archivo
jboss-seam-booking.jar/META-INF/persistence.xml
:<property name="jboss.as.jpa.providerModule" value="hibernate3-bundled" />
- Cambie la propiedad
jta-data-source
para utilizar el nombre JNDI de la fuente de datos JDBC predeterminada:<jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
Copie las JARs de la distribución Seam 2.2
Copie las siguientes JARs de la distribución Seam 2.2EAP5.x_HOME/jboss-eap5.x/seam/lib/
en el directoriojboss-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
Cambie los nombres de búsqueda JNDI
Cambie las cadenas de búsqueda JNDI en el archivojboss-seam-booking.war/WEB-INF/components.xml
. Debido a las nuevas reglas portátiles JNDI, JBoss EAP 6 ahora enlaza EJBs usando reglas de sintaxis portátiles JNDI y no puede utilizar el jndiPattern que se utilizó en JBoss EAP 5. Así se deben cambiar las cadenas de búsqueda JNDI EJB de la aplicación para 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
Las cadenas de búsqueda JNDI para las EJBs del marco de trabajo Seam 2.2 se debn cambiar así: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
Puede tomar cualquiera de los siguientes enfoques:Agregar elementos del componente
Puede agregar unjndi-name
para todo EJB alWEB-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" />
- Puede modificar el código agregando la anotación
@JNDIName(value="")
especificando la ruta JNDI. A continuación puede ver un ejemplo del código cambiado del bean de sesión sin estado. Puede encontrar una descripción detallada de este proceso en la documentación de referencia de Seam 2.2.@Stateless @Name("authenticator") @JndiName(value="java:app/jboss-seam-booking/AuthenticatorAction") public class AuthenticatorAction implements Authenticator { ... }
Resultado:
La aplicación de reservas Seam 2.2 implementa y ejecuta de manera exitosa en JBoss EAP 6.