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
- 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
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
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.
jboss-deployment-structure.xml
do aplicativo.
Procedimento 4.1. Instalação e execução do Tattletale para encontrar dependências do aplicativo
Nota
4.1.4. Download e Instalação do Tattletale
Procedimento 4.2. Download e Instalação do Tattletale
- 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.
- Descomprima o arquivo ao diretório de sua escolha.
- Modifique o arquivo
TATTLETALE_HOME/jboss-tattletale.properties
realizando o seguinte:- Adicione o
ee6
eas7
à propriedadeprofiles
.profiles=java5, java6, ee6, as7
- Descomente as propriedades
scan
ereports
.
4.1.5. Criação e Revisão do Relatório Tattletale
- 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/
- Num navegador, abra o arquivo
OUTPUT_DIRECTORY/index.html
e clique em "JBoss AS 7" sob a seção "Relatórios".- 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.
- 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
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.
Procedimento 4.3. Instalação e execução da ferramenta de Migração IronJacamar
Nota
4.1.7. Download e Instalação da Ferramenta de Migração IronJacamar
Nota
- Realize o download da mais recente distribuição do IronJacamar: http://www.ironjacamar.org/download.html
- Descomprime o arquivo baixado num diretório de sua escolha.
- 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
Procedimento 4.4. Conversão de um Arquivo de Configuração da Fonte de Dados
- Abra uma linha de comandos e navegue ao diretório
IRONJACAMAR_HOME/doc/as/
. - 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
OSOURCE_FILE
é o arquivo -ds.xml da fonte de dados do lançamento anterior. OTARGET_FILE
contém uma nova configuração.Por exemplo, para converter o arquivo de configuração da fonte de dadosjboss-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
. - 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
.
- 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
- Abra uma linha de comando e navegue ao diretório
IRONJACAMAR_HOME/docs/as/
. - 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
OSOURCE_FILE
é um arquivo -ds.xml adaptador de recurso do lançamento anterior. OTARGET_FILE
contém uma nova configuração.Por exemplo, para converter o arquivo de configuração do adaptador de recursomttestadapter-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
. - 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
.
- 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>