Capítulo 4. Ferramentas e Dicas

4.1. Recursos para Assisti-lo com a Migração

4.1.1. Recursos que podem orientá-lo em sua Migração

Segue abaixo uma lista de recursos que podem orientá-lo na migração de um aplicativo para o JBoss EAP 6.
Ferramentas
Existem diversas ferramentas que ajudam automaticamente algumas das alterações da configuração. Consulte a Seção 4.1.2, “Familiarize-se com as Ferramentas que podem orientá-lo na Migração” para maiores informações.
Dicas de Depuração
Consulte a Seção 4.2.1, “Depuração e Solução dos Problemas de Migração” para a lista das causas e resoluções de problemas e erros possíveis na migração de seu aplicativo.
Amostra de Migração
Consulte a Seção 4.3.1, “Revise a Migração dos Aplicativos de Amostra” para amostras de aplicativos que foram migrados ao JBoss EAP 6.

4.1.2. Familiarize-se com as Ferramentas que podem orientá-lo na Migração

Sumário

Existem algumas ferramentas que podem assisti-lo no processo de sua migração. Segue abaixo uma lista dessas ferramentas juntamente com a descrição do que elas fazem.

Tattletale
Você precisa encontrar e retificar as dependências do aplicativo com a mudança no carregamento de classe modular. O Tattletale pode ajudá-lo a identificar os nomes do módulo de dependência e gerar o XML da configuração para seu aplicativo.
Ferramenta de Migração IronJacamar
No JBoss EAP 6, as fontes de dados e adaptadores de recurso não são mais configurados em um arquivo separado. Eles estão apenas definidos no arquivo de configuração do servidor e usam novos esquemas. A Ferramenta de Migração IronJacamar pode ajudar a converter a configuração antiga em um formato esperado pelo JBoss EAP 6.

4.1.3. Uso do Tattle para encontrar Dependências do Aplicativo

Sumário

Devido às alterações de carregamento de classe no JBoss EAP 6, você poderá ver os traços do ClassNotFoundException ou ClassCastException no log do Jboss quando você migrar o seu aplicativo. Para resolver esses erros, você precisa encontrar os JARs que contém as classes especificadas pelas exceções.

O Tattletale é uma ferramenta de terceiros que escaneia recursivamente seu aplicativo e fornece relatórios detalhados sobre seus conteúdos. O Tattletale 1.2.Beta2 ou mais avançado contém suporte adicional para ajudar com o novo carregamento de classe dos Módulos do JBoss usados no JBoss EAP 6. O relatório do "JBoss AS 7" do Tattletale pode ser usado para identificar automaticamente e gerar os nomes do módulo de dependência para incluir o seu arquivo jboss-deployment-structure.xml do aplicativo.

Procedimento 4.1. Instalação e execução do Tattletale para encontrar dependências do aplicativo

Nota

O Tattletale é uma ferramenta de terceiros e não é suportado com parte do EAP 6. Visite o website do Tattletale no http://www.jboss.org/tattletale para a documentação atual de como instalar e usar o Tattletale.

4.1.4. Download e Instalação do Tattletale

Procedimento 4.2. Download e Instalação do Tattletale

  1. Realize o download da versão 1.2.0.Beta2 do Tattletale ou mais recente a partir do http://sourceforge.net/projects/jboss/files/JBoss%20Tattletale.
  2. Descomprima o arquivo ao diretório de sua escolha.
  3. Modifique o arquivo TATTLETALE_HOME/jboss-tattletale.properties realizando o seguinte:
    1. Adicione o ee6 e as7 à propriedade profiles.
      profiles=java5, java6, ee6, as7
    2. Descomente as propriedades scan e reports.

4.1.5. Criação e Revisão do Relatório Tattletale

  1. Crie o relatório Tattletale pela emissão do comando: java -jar TATTLETALE_HOME/tattletale.jar APPLICATION_ARCHIVE OUTPUT_DIRECTORY
    Por exemplo: java -jar tattletale-1.2.0.Beta2/tattletale.jar ~/applications/jboss-seam-booking.ear ~/output-results/
  2. Num navegador, abra o arquivo OUTPUT_DIRECTORY/index.html e clique em "JBoss AS 7" sob a seção "Relatórios".
    1. A coluna na esquerda lista os arquivos usados pelo aplicativo. Clique no link ARCHIVE_NAME para detalhes de visualização sobre o arquivo, tal como sua localização, informação de manifesto e classes que isto contém.
    2. O link jboss-deployment-structure.xml na coluna da direita apresenta como especificar a dependência do módulo para o arquivo nomeado na coluna da esquerda. Clique neste link para verificar como definir a informação do módulo de dependência da implantação para este arquivo.

4.1.6. Uso da Ferramenta IronJacamar para Migração da Fonte de Dados e Configurações do Adaptador de Recurso

Sumário

Nas versões anteriores do servidor do aplicativo, as fontes de dados e adaptadores de recurso eram configurados e implantados usando um arquivo com sufixo *-ds.xml. A distribuição IronJacamar 1.1 contém uma ferramenta de migração que pode ser usada para converter esses arquivos de configuração ao formato esperado pelo JBoss EAP 6. As ferramentas analisam o arquivo de configuração da fonte a partir do lançamento anterior, criam e gravam a configuração XML a um arquivo resultante num novo formato. Esse XML pode ser copiado e colado sob o subsistema no arquivo de configuração do servidor do JBoss EAP 6. Essas ferramentas fazem o seu melhor trabalho para converter atributos e elementos antigos em novo formato. No entanto, pode ser necessário realizar modificações adicionais ao arquivo gerado.

Nota

A ferramenta de Migração do IronJacamar é uma ferramenta de terceiros e não é suportada como parte do JBoss EAP 6. Consulte http://www.ironjacamar.org/ para maiores informações sobre o IronJacar. Consulte http://www.ironjacamar.org/documentation.html para informações sobre como instalar e usar esta ferramenta.

4.1.7. Download e Instalação da Ferramenta de Migração IronJacamar

Nota

A ferramenta de migração está apenas disponível na versão Jacamar 1.1 ou mais avançada e requer o Java 7 ou mais avançado.
  1. Realize o download da mais recente distribuição do IronJacamar: http://www.ironjacamar.org/download.html
  2. Descomprime o arquivo baixado num diretório de sua escolha.
  3. Encontre o script conversor na distribuição IronJacamar.
    • O script Linux está localizado no: IRONJACAMAR_HOME/doc/as/converter.sh
    • O arquivo em lote do Windows está localizado no: IRONJACAMAR_HOME/doc/as/converter.bat

4.1.8. Uso da Ferramenta de Migração IronJacamar para converter um Arquivo de Configuração da Fonte de Dados

Nota

O script convertor IronJacamar requer o Java 7 ou mais avançado.

Procedimento 4.4. Conversão de um Arquivo de Configuração da Fonte de Dados

  1. Abra uma linha de comandos e navegue ao diretório IRONJACAMAR_HOME/doc/as/.
  2. Execute o script conversor digitando o seguinte comando:
    • No Linux: ./converter.sh -ds SOURCE_FILE TARGET_FILE
    • No Microsoft Windows: ./converter.bat -ds SOURCE_FILE TARGET_FILE
    O SOURCE_FILE é o arquivo -ds.xml da fonte de dados do lançamento anterior. O TARGET_FILE contém uma nova configuração.
    Por exemplo, para converter o arquivo de configuração da fonte de dados jboss-seam-booking-ds.xml localizado no diretório atual, você digitaria:
    • Para o Linux: ./converter.sh -ds jboss-seam-booking-ds.xml new-datasource-config.xml
    • Para o Microsoft Windows: ./converter.bat -ds jboss-seam-booking-ds.xml new-datasource-config.xml
    Perceba que o parâmetro para a conversão da fonte de dados é -ds.
  3. Copie o elemento <datasource> a partir do arquivo de destino e cole-o no arquivo de configuração do servidor sob o elemento <subsystem xmlns="urn:jboss:domain:datasources:1.1"><datasources>.

    Importante

    Você deve interromper o servidor antes de editar o arquivo de configuração do servidor para que sua alteração seja efetivada no reinício do servidor.
    • Caso você esteja executando um managed domain, copie o XML ao arquivo EAP_HOME/domain/configuration/domain.xml.
    • Caso você esteja executando num servidor autônomo, copie o XML no arquivo EAP_HOME/standalone/configuration/standalone.xml.
  4. Modificação do XML gerado ao novo arquivo de configuração.
    Segue abaixo uma amostra do arquivo de configuração da fonte de dados jboss-seam-booking-ds.xml para a amostra do Seam 2.2 Booking que foi lançado com o 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>
    
    Segue abaixo o arquivo de configuração que foi gerado pela execução do script conversor. O arquivo gerado contém um elemento <driver-class>. A maneira preferida de definir a classe do driver no JBoss EAP 6 é usar um elemento <driver>. Segue abaixo o XML resultando no arquivo de configuração do JBoss EAP 6 com modificações para comentar o elemento <driver-class> e adicionar o elemento <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 da Ferramenta IronJacamar para Converter um Arquivo de Configuração do Adaptador de Recurso

Nota

O script do convertor IronJacamar requer o Java 7 ou mais avançado.
  1. Abra uma linha de comando e navegue ao diretório IRONJACAMAR_HOME/docs/as/.
  2. Execute o script conversor digitando o seguinte comando:
    • No Linux: ./converter.sh -ra SOURCE_FILE TARGET_FILE
    • No Microsoft Windows: ./converter.bat -ra SOURCE_FILE TARGET_FILE
    O SOURCE_FILE é um arquivo -ds.xml adaptador de recurso do lançamento anterior. O TARGET_FILE contém uma nova configuração.
    Por exemplo, para converter o arquivo de configuração do adaptador de recurso mttestadapter-ds.xml localizado no diretório atual, você digitaria:
    • Para o Linux: ./converter.sh -ra mttestadapter-ds.xml new-adapter-config.xml
    • Para o Microsoft Windows: ./converter.bat -ra mttestadapter-ds.xml new-adapter-config.xml
    Perceba que o parâmetro para a conversão do adaptador de recurso é -ra.
  3. Copie todo o elemento <resource-adapters> do arquivo de destino e cole-o no arquivo de configuração sob o elemento <subsystem xmlns="urn:jboss:domain:resource-adapters:1.1">

    Importante

    Você deve interromper o servidor antes de editar o arquivo de configuração do servidor para que sua alteração seja efetivada no reinício do servidor.
    • Caso você esteja executando um managed domain, copie o XML ao arquivo EAP_HOME/domain/configuration/domain.xml.
    • Caso você esteja executando um servidor autônomo, copie o XML ao arquivo EAP_HOME/standalone/configuration/standalone.xml.
  4. Modificação do XML gerado ao novo arquivo de configuração.
    Segue abaixo um exemplo do arquivo de configuração do adaptador de recurso mttestadapter-ds.xml a partir do 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>
    
    Segue abaixo o arquivo de configuração que foi gerado pela execução do script conversor. Substitua o valor do atributo do nome da classe "FIXME_MCF_CLASS_NAME" no XML gerado com o nome de classe correto da alocação de conexão gerenciada, neste caso o "org.jboss.test.jca.adapter.TestManagedConnectionFactory". Segue abaixo o XML resultante no arquivo de configuração do JBoss EAP 6 com modificações ao valor do 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>