4.3.8. Revisión de un resumen de los cambios realizados al migrar la aplicación de reservas Seam 2.2

Aunque sería mucho más eficiente el determinar las dependencias por adelantado y agregar las dependencias implícitas en un paso, este ejercicio muestra la manera en que los problemas aparecen en el registro y proporciona algo de información sobre cómo depurar y resolverlos. El siguiente es un resumen de los cambios realizados a la aplicación al migrarla a JBoss EAP 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.
  1. Creó un archivo jboss-deployment-structure.xml en el directorio META-INF/ del EAR. Agregó <dependencies> y <exclusions> para resolver ClassNotFoundExceptions. Este archivo contiene los siguientes datos:
    <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. Copió las siguientes JARs del directorio EAP5_HOME/jboss-eap-5.X/seam/lib/ (reemplace 5.X con la versión de EAP 5 desde la cual está migrando) al directorio jboss-seam-booking.ear/lib/ para resolver ClassNotFoundExceptions:
    • hibernate-core.jar
    • hibernate-validator.jar
  3. Modificó el archivo jboss-seam-booking.jar/META-INF/persistence.xml así:
    1. Cambió el elemento jta-data-source para usar la base de datos de ejemplo que se envía junto con JBoss EAP 6:
      <!-- <jta-data-source>java:/bookingDatasource</jta-data-source> -->
      <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
      
    2. Borró el comentario de la propiedad hibernate.cache.provider_class:
      <!-- <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/> -->
      
  4. Modificó el archivo lib/components.xml del WAR para utilizar los nuevos enlaces JNDI
    1. Reemplazó el elemento existente core:init así:
      <!-- <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. Agregó los elementos de componentes para los enlaces JNDI "EjbSynchronizations" y "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"/>