Capítulo 4. Ferramentas e Dicas
4.1. Recursos que Podem Auxiliar na Migração
4.1.1. Recursos que Podem Assistí-lo na sua Migração
- Ferramentas
- Existem diversas ferramentas que ajudam a automatizar algumas das alterações de configuração. Consulte Seção 4.1.2, “Familiarize-se com as Ferramentas que Podem Assistí-lo com a Migração” para mais informações.
- Dicas de Depuração
- Consulte Seção 4.2.1, “Depuração e Solução de Problemas de Migração” para uma lista dos erros e das causas e resoluções de problemas mais comuns que você pode encontrar quando migrar seu aplicativo.
- Exemplo de Migrações
- Consulte Seção 4.3.1, “Revisão da Migração dos Aplicativos de Exemplo” para exemplos de aplicativos que foram migrados para o JBoss EAP 6.
4.1.2. Familiarize-se com as Ferramentas que Podem Assistí-lo com a 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
- Com a alteração para o carregamento de classe modular, você precisa encontrar e retificar as dependências dos aplicativos. Tattletale pode ajudá-lo a identificar os nomes dos módulos dependentes e gerar a configuração XML para seu aplicativo.
- Ferramenta de Migração IronJacamar
- No JBoss EAP 6, as fontes de dados e os adaptadores de recurso não são mais configurados em um arquivo separado. Eles são agora 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 no formato esperado pelo JBoss EAP 6.
4.1.3. Uso do Tattletale para Encontrar as Dependências dos Aplicativos
Devido às alterações para o carregamento de classe modular no JBoss EAP 6, você pode encontrar os rastreamentos ClassNotFoundException
ou ClassCastException
no log do JBoss quando 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 seu aplicativo.
Procedimento 4.1. Instale e execute Tattletale para encontrar as dependências do aplicativo
Nota
4.1.4. Baixe e Instale Tattletale
Procedimento 4.2. Baixe e Instale Tattletale
- Baixe Tattletale versão 1.2.0.Beta2, ou a mais recente, em http://sourceforge.net/projects/jboss/files/JBoss%20Tattletale.
- Descomprima o arquivo no diretório de sua escolha.
- Modifique o arquivo
TATTLETALE_HOME/jboss-tattletale.properties
realizando o seguinte:- Adicione
ee6
eas7
à propriedadeprofiles
.profiles=java5, java6, ee6, as7
- Remova os comentários das propriedades
scan
ereports
.
4.1.5. Criação e Revisão do Relatório Tattletale
- Crie o relatório Tattletale emitindo o 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/
- Em um navegador, abra o arquivo
OUTPUT_DIRECTORY/index.html
e clique em "JBoss AS 7" sob a seção "Reports" (Relatórios).- A coluna da esquerda lista os arquivos usados pelo aplicativo. Clique no link ARCHIVE_NAME para visualizar detalhes sobre o arquivo, tais como sua localização, informações de manifesto e as classes que contém.
- O link
jboss-deployment-structure.xml
na coluna da direita mostra como especificar a dependência do módulo para o arquivo nomeado na coluna da esquerda. Clique neste link para verificar como definir as informações de módulos de dependência da implantação para este arquivo.
4.1.6. Uso da Ferramenta IronJacamar para a Migração das Configurações do Adaptador de Recursos e das Fontes de Dados
Nas versões anteriores do servidor do aplicativo, as fontes de dados e os adaptadores de recursos eram configurados e implantados usando um arquivo com um 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 no formato esperado pelo JBoss EAP 6. A ferramenta analisa o arquivo de configuração da fonte a partir da versão anterior, cria e grava a configuração XML a um arquivo de saída no novo formato. Esse XML pode, então, ser copiado e colado sob o subsistema correto no arquivo de configuração do servidor do JBoss EAP 6. Essa ferramenta envida todos os esforços para converter atributos e elementos antigos no novo formato. No entanto, pode ser necessário realizar modificações adicionais no arquivo gerado.
Procedimento 4.3. Instalação e execução da ferramenta de Migração IronJacamar
Nota
4.1.7. Baixe e Instale a Ferramenta de Migração IronJacamar
Nota
- Baixe a distribuição mais recente do IronJacamar aqui: http://www.ironjacamar.org/download.html
- Descomprima o arquivo baixado em um diretório de sua escolha.
- Localize o script conversor na distribuição IronJacamar.
- O script Linux está localizado aqui:
IRONJACAMAR_HOME/doc/as/converter.sh
- O arquivo em lotes do Windows está localizado aqui:
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 comando e navegue até o diretório
IRONJACAMAR_HOME/doc/as/
. - Execute o script conversor digitando o seguinte comando:
- Para Linux:
./converter.sh -ds
SOURCE_FILE
TARGET_FILE
- Para Microsoft Windows:
./converter.bat -ds
SOURCE_FILE
TARGET_FILE
SOURCE_FILE
é o arquivo -ds.xml da fonte de dados da versão anterior.TARGET_FILE
contém a 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 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
Perceba que o parâmetro para a conversão da fonte de dados é-ds
. - Copie o elemento
<datasource>
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 ao reiniciar o servidor.- Caso você esteja executando em um domínio gerenciado, copie o XML no arquivo
EAP_HOME/domain/configuration/domain.xml
. - Caso você esteja executando como um servidor autônomo, copie o XML no arquivo
EAP_HOME/standalone/configuration/standalone.xml
.
- Modifique o XML gerado no novo arquivo de configuração.Segue abaixo um exemplo do arquivo de configuração da fonte de dados
jboss-seam-booking-ds.xml
para exemplo do Seam 2.2 Booking que foi enviado junto 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 melhor maneira de definir a classe de driver no JBoss EAP 6 é usando um elemento<driver>
. Segue abaixo o XML resultante no arquivo de configuração do JBoss EAP 6 com modificações para converter em comentário o elemento<driver-class>
e adicionar o elemento correspondente<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 de Migração IronJacamar para Converter um Arquivo de Configuração do Adaptador de Recursos
Nota
- Abra uma linha de comando e navegue até o diretório
IRONJACAMAR_HOME/docs/as/
. - Execute o script conversor digitando o seguinte comando:
- Para Linux:
./converter.sh -ra
SOURCE_FILE
TARGET_FILE
- Para Microsoft Windows:
./converter.bat -ra
SOURCE_FILE
TARGET_FILE
SOURCE_FILE
é o arquivo -ds.xml do adaptador de recursos da versão anterior.TARGET_FILE
contém a nova configuração.Por exemplo, para converter o arquivo de configuração do adaptador de recursosmttestadapter-ds.xml
localizado no diretório atual, você digitaria:- 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
Perceba que o parâmetro para a conversão do adaptador de recursos é-ra
. - Copie o elemento inteiro
<resource-adapters>
do arquivo de destino e cole-o no arquivo de configuração do servidor 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 ao reiniciar o servidor.- Caso você esteja executando em um domínio gerenciado, copie o XML no arquivo
EAP_HOME/domain/configuration/domain.xml
. - Caso você esteja executando como um servidor autônomo, copie o XML no arquivo
EAP_HOME/standalone/configuration/standalone.xml
.
- Modifique o XML gerado no novo arquivo de configuração.Segue abaixo um exemplo do arquivo de configuração do adaptador de recursos
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 fábrica de conexão gerenciada, neste caso "org.jboss.test.jca.adapter.TestManagedConnectionFactory". Este é o XML resultante no arquivo de configuração do JBoss EAP 6 com modificações no 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>