Capítulo 4. Herramientas y consejos

4.1. Recursos de ayuda con la migración

4.1.1. Recursos para ayudarle en su migración

La siguiente es una lista de los recursos que pueden ayudarle al migrar una aplicación a JBoss EAP 6.
Herramientas
Hay varias herramientas que ayudan a automatizar algunos de los cambios de la configuración. Para mayor información, consulte: Sección 4.1.2, “Familiarización con las herramientas que le ayudan con la migración”.
Consejos para la depuración
Para ver una lista de las causas más comunes y la resolución de problemas y errores que puede encontrar cuando migra su aplicación, consulte: Sección 4.2.1, “Depurar y resolver problemas de migración”.
Migraciones de ejemplo
Para ver ejemplos de aplicaciones que se han migrado a JBoss EAP 6, consulte: Sección 4.3.1, “Revise la migración de las aplicaciones de ejemplo”.

4.1.2. Familiarización con las herramientas que le ayudan con la migración

Resumen

Hay algunas herramientas que le pueden ayudar en realizar su migración. La siguiente es una lista de estas herramientas junto con una descripción de lo que hacen.

Tattletale
Con el cambio a la carga de clases de manera modular, necesita encontrar y rectificar las dependencias de aplicaciones. Tattletale le puede ayudar a identificar nombres de módulos dependientes y generar el XML de configuración para su aplicación.
Herramienta de migración IronJacamar
En JBoss EAP 6, las fuentes de datos y los adaptadores de recursos ya no se configuran en un archivo separado. Ahora se definen en el archivo de configuración del servidor y usan nuevos esquemas. La herramienta de migración IronJacamar puede ayudar a convertir la configuración antigua al formato que JBoss EAP 6 espera.

4.1.3. Uso de Tattletale para encontrar dependencias de aplicaciones

Resumen

Debido a los cambios en la carga modular de clases en JBoss EAP 6, puede que encuentre rastros ClassNotFoundException o ClassCastException en el registro de JBoss cuando migre su aplicación. Para resolver estos errores, necesita encontrar las JARs que contienen las clases especificadas por las excepciones.

Tattletale es una excelente herramienta de terceros que escanea de manera recursiva su aplicación y proporciona reportes detallados sobre su contenido. Tattletale 1.2.0.Beta2 o posterior contiene soporte adicional para ayudar con la nueva carga de clases de módulos JBoss utilizada en JBoss EAP 6. El reporte "JBoss AS 7" de Tattletale se puede utilizar para identificar de manera automática y generar nombres de módulos dependientes para incluir el archivo jboss-deployment-structure.xml de su aplicación.

Procedimiento 4.1. Instale y ejecute Tattletale para buscar dependencias de aplicaciones

Nota

Tattletale es una herramienta de terceros y no se soporta como parte de JBoss EAP 6. Para ver la documentación actualizada sobre cómo instalar y usar Tattletale, vaya al sitio web de Tattletale en http://www.jboss.org/tattletale.

4.1.4. Descarga e instalación de Tattletale

Procedimiento 4.2. Descarga e instalación de Tattletale

  1. Descargue Tattletale versión 1.2.0.Beta2 o posteriores de http://sourceforge.net/projects/jboss/files/JBoss%20Tattletale.
  2. Descomprima el archivo en el directorio que escoja.
  3. Modifique el archivo TATTLETALE_HOME/jboss-tattletale.properties haciendo lo siguiente:
    1. Agregue ee6 y as7 a la propiedad profiles.
      profiles=java5, java6, ee6, as7
    2. Borre el comentario de las propiedades scan y reports.

4.1.5. Creación y revisión del reporte Tattletale

  1. Cree el reporte Tattletale emitiendo el comando: java -jar TATTLETALE_HOME/tattletale.jar APPLICATION_ARCHIVE OUTPUT_DIRECTORY
    Por ejemplo: java -jar tattletale-1.2.0.Beta2/tattletale.jar ~/applications/jboss-seam-booking.ear ~/output-results/
  2. En un navegador, abra el archivo OUTPUT_DIRECTORY/index.html y haga clic en "JBoss AS 7" bajo la sección "Reports".
    1. La columna a la izquierda lista los archivos que la aplicación utiliza. Haga clic en el enlace ARCHIVE_NAME para ver los detalles sobre el archivo tal como la ubicación, la información del manifesto y las clases que contiene.
    2. El enlace jboss-deployment-structure.xml en la columna a la derecha muestra la manera de especificar la dependencia de módulos para el archivo nombrado en la columna izquierda. Haga clic en este enlace para ver la manera de definir la información del módulo de dependencias de implementación para este archivo.

4.1.6. Uso de la herramienta IronJacamar para migrar configuraciones del adapatador de recursos y la fuente de datos

Resumen

En versiones anteriores del servidor de aplicaciones, las fuentes de datos y los adaptadores de recursos se configuraban y se implementaban usando un archivo con el sufijo *-ds.xml. La distribución IronJacamar 1.1 contiene una herramienta de migración que se puede utilizar para convertir estos archivos de configuración en el formato que la JBoss EAP 6 espera. La herramienta analiza sintácticamente el archivo de configuración fuente del lanzamiento anterior y luego crea y escribe la configuración XML en un archivo de salida en el nuevo formato. Este XML luego se puede copiar y pegar bajo el subsistema correcto en el archivo de configuración del servidor de JBoss EAP 6. Esta herrmienta hace el mejor esfuerzo para convertir atributos y elementos antiguos al formato nuevo, sin embargo, puede que sea necesario el realizar modificaciones adicionales al archivo generado.

Nota

La herramienta de migración IronJacamar es una herramienta de terceros y no se soporta como parte de JBoss EAP 6. Para mayor información sobre IronJacamar, vaya a http://www.ironjacamar.org/. Para ver la documentación actualizada sobre cómo instalar y usar esta herramienta vaya a http://www.ironjacamar.org/documentation.html.

4.1.7. Descarga e instalación de la herramienta de migración IronJacamar

Nota

La herramienta de migración solo está disponible en la versión IronJacamar 1.1 o posteriores y requiere Java 7 o posteriores.
  1. Descargue la última distribución de IronJacamar de aquí: http://www.ironjacamar.org/download.html
  2. Descomprima el archivo descargado en el directorio que escoja.
  3. Busque el script convertidor en la distribución IronJacamar.
    • El script Linux se encuentra aquí: IRONJACAMAR_HOME/doc/as/converter.sh
    • El archivo de agrupación Windows se encuentra aquí: IRONJACAMAR_HOME/doc/as/converter.bat

4.1.8. Use la herramienta de migración IronJacamar para convertir un archivo de configuración de la fuente de datos

Nota

El script convertidor IronJacamar requiere Java 7 o posteriores.

Procedimiento 4.4. Convertir un archivo de configuración de la fuente de datos

  1. Abra una línea de comandos y navegue al directorio IRONJACAMAR_HOME/doc/as/.
  2. Ejecute el script convertidor con el siguiente comando:
    • Para Linux: ./converter.sh -ds SOURCE_FILE TARGET_FILE
    • Para Microsoft Windows: ./converter.bat -ds SOURCE_FILE TARGET_FILE
    El SOURCE_FILE es el atchivo -ds.xml de la fuente de datos del lanzamiento anterior. El TARGET_FILE contiene la nueva configuración.
    Por ejemplo, para convertir el archivo de configuración de la fuente de datos jboss-seam-booking-ds.xml en el directorio actual escribiría:
    • Para Linux: ./converter.sh -ds jboss-seam-booking-ds.xml new-datasource-config.xml
    • Para Microsoft Windows: ./converter.bat -ds jboss-seam-booking-ds.xml new-datasource-config.xml
    Note que el parámetro para la conversión de la fuente de datos es -ds.
  3. Copie el elemento <datasource> del archivo de destino y péguelo en el archivo de configuración del servidor bajo el elemento <subsystem xmlns="urn:jboss:domain:datasources:1.1"><datasources>.

    Importante

    Tiene que detener el servidor antes de modificar el archivo de configuración del servidor para que su cambio persista al reiniciar el servidor.
    • Si está ejecutando en un dominio administrado, copie el XML en el archivo EAP_HOME/domain/configuration/domain.xml.
    • Si está ejecutando como un servidor autónomo, copie el XML en el archivo EAP_HOME/standalone/configuration/standalone.xml.
  4. Modifique el XML generado en el nuevo archivo de configuración.
    Este es un ejemplo del archivo de configuración de la fuente de datos jboss-seam-booking-ds.xml para el ejemplo de reservas de Seam 2.2 que se envía junto con 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>
    El siguiente es el archivo de configuración que se generó ejecutando el script convertidor. El archivo generado contiene u elemento <driver-class>. La manera preferida de definir la clase controladora en JBoss EAP 6 es utilizar un elemento <driver>. Este es el XML que resulta en el archivo de configuración de JBoss EAP 6 con modificaciones para borrar el comentario del elemento <driver-class> y agregar el elemento correspondiente <driver>:
    <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. Uso de la herramienta de migración IronJacamar para convertir un archivo de configuración del adaptador de recursos

Nota

El script convertidor IronJacamar requiere Java 7 o posteriores.
  1. Abra una línea de comandos y navegue al directorio IRONJACAMAR_HOME/docs/as/.
  2. Ejecute el script convertidor con el siguiente comando:
    • Para Linux: ./converter.sh -ra SOURCE_FILE TARGET_FILE
    • Para Microsoft Windows: ./converter.bat -ra SOURCE_FILE TARGET_FILE
    El SOURCE_FILE es el archivo -ds.xml del adaptador de recursos del lanzamiento anterior. El TARGET_FILE contiene la nueva configuración.
    Por ejemplo, para convertir el archivo de configuración del adaptador de recursos mttestadapter-ds.xml en el directorio actual escribiría:
    • Para Linux: ./converter.sh -ra mttestadapter-ds.xml new-adapter-config.xml
    • Para Microsoft Windows: ./converter.bat -ra mttestadapter-ds.xml new-adapter-config.xml
    Note que el parámetro para la conversión del adaptador de recursos es -ra.
  3. Copie el elemento <resource-adapters> del archivo de destino y péguelo en el archivo de configuración del servidor bajo el elemento <subsystem xmlns="urn:jboss:domain:resource-adapters:1.1">.

    Importante

    Tiene que detener el servidor antes de modificar el archivo de configuración del servidor para que su cambio persista al reiniciar el servidor.
    • Si está ejecutando en un dominio administrado, copie el XML en el archivo EAP_HOME/domain/configuration/domain.xml.
    • Si está ejecutando como un servidor autónomo, copie el XML en el archivo EAP_HOME/standalone/configuration/standalone.xml.
  4. Modifique el XML generado en el nuevo archivo de configuración.
    Este es un ejemplo del archivo de configuración del adaptador de recursos 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>
    El siguiente es el archivo de configuración que se generó ejecutando el script convertidor. Reemplace el valor del atributo nombre-clase "FIXME_MCF_CLASS_NAME" en el XML generado con el nombre de clase correcto de la fábrica de conexiones administrada, en este caso, "org.jboss.test.jca.adapter.TestManagedConnectionFactory". Este es el XML que resulta en el archivo de configuración de JBoss EAP 6 con modificaciones para el valor del elemento <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>