3.2.11. Aplicativos Seam 2.2 de Migração
3.2.11.1. Migração dos Arquivos Seam 2.2 para o JBoss Enterprise Application Plataform 6
Quando você migrar um aplicativo Seam 2.2, você precisa configurar a fonte de dados e especificar quaisquer dependências de módulo. Você precisa determinar também se o aplicativo possui quaisquer dependências em arquivos que não lançam o JBoss Enterprise Application Plataform 6 e copiar quaisquer JARs dependentes no diretório lib/
do aplicativo.
Importante
Procedimento 3.27. Migração dos Arquivos Seam 2.2
Atualização da configuração da fonte de dados
Algumas das amostras Seam 2.2 usam a fonte de dados JDBC default nomeadajava:/ExampleDS
. A fonte de dados default foi alterada no JBoss Enterprise Application Plataform 6 parajava:jboss/datasources/ExampleDS
. Caso seu aplicativo usar a fonte de dados da amostra, você pode realizar o seguinte:Para maiores informações de como configurar a fonte de dados, consulte a Seção 3.1.6.2, “Atualização da Configuração da Fonte de Dados”.- Caso você deseje usar um banco de dados de amostra que lança o JBoss Enterprise Application Plataform 6, modifique o arquivo
META-INF/persistence.xml
para substituir o elementojta-data-source
existente com o nome JNDI da fonte de dados do banco de dados de amostra:<!-- <jta-data-source>java:/ExampleDS</jta-data-source> --> <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
- Caso você preferir manter um banco de dados existente, você pode adicionar a definição da fonte de dados ao arquivo
EAP_HOME/standalone/configuration/standalone.xml
.Importante
Você deve interromper o servidor antes de editar o arquivo de configuração do servidor para a sua alteração ser persistente na iniciação do servidor.A seguinte definição é uma cópia da fonte de dados HSQL default definida no JBoss Enterprise Application Plataform 6:<datasource name="ExampleDS" jndi-name="java:/ExampleDS" enabled="true" jta="true" use-java-context="true" use-ccm="true"> <connection-url>jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</connection-url> <driver>h2</driver> <security> <user-name>sa</user-name> <password>sa</password> </security> </datasource>
- Você pode também adicionar a definição da fonte de dados usando a interface da linha de comando jbossadmin. Segue abaixo uma amostra da sintaxe que você deve usar para adicionar a fonte de dados. O "\" no final da linha indica a continuação do comando na linha seguinte.
Exemplo 3.1. Amostra da sintaxe para adição da definição da fonte de dados
$ EAP_HOME/bin/jboss-cli --connect [standalone@localhost:9999 /] data-source add --name=ExampleDS --jndi-name=java:/ExampleDS \ --connection-url=jdbc:h2:mem:test;DB_CLOSE_DELAY=-1 --driver-name=h2 \ --user-name=sa --password=sa
Adição de quaisquer dependências requeridas
Uma vez que os aplicativos Seam 2.2 usam o JSF 1.2, você precisa adicionar dependências para os módulos JSF 1.2 e excluir os módulos JSF 2.0. Para completar este procedimento, você precisa criar um arquivojboss-deployment-structure.xml
no diretórioMETA-INF/
do EAR que contém os seguintes dados:<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"/> </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>
Caso seu aplicativo usar frameworks de registro em log de terceiros, você precisa adicionar as dependências descritas na: Seção 3.1.4.1, “Modificação das Dependências de Registro em Log”.Caso o seu aplicativo usar o Hibernate 3.x, primeiro tente executar o aplicativo usando as bibliotecas do Hibernate 4
Caso o seu aplicativo não usar o Contexto Persistente Gerenciado Seam, busca Hibernate, validação ou quaisquer outros recursos com o Hibernate 4, você pode estar apto a executar com as bibliotecas do Hibernate 4. No entanto, caso você observar oClassNotFoundExceptions
ouClassCastExceptions
que direcionam às classes Hibernate ou verificar erros similares aos seguintes, você terá que seguir as instruções da próxima etapa e modificar o seu aplicativo para uso das bibliotecas do Hibernate 3.3.Caused by: java.lang.LinkageError: loader constraint violation in interface itable initialization: when resolving method "org.jboss.seam.persistence.HibernateSessionProxy.getSession(Lorg/hibernate/EntityMode;)Lorg/hibernate/Session;" the class loader (instance of org/jboss/modules/ModuleClassLoader) of the current class, org/jboss/seam/persistence/HibernateSessionProxy, and the class loader (instance of org/jboss/modules/ModuleClassLoader) for interface org/hibernate/Session have different Class objects for the type org/hibernate/Session used in the signature
Cópia dos arquivos dependentes a partir dos frameworks externos ou de outras localizações
Caso o seu aplicativo usar o Hibernate 3.x e você não estiver apto a usar o Hibernate 4 com sucesso no seu aplicativo, você precisará usar uma cópia do Hibernate 3-x JARs no diretório/lib
e excluir o módulo Hibernate na seção de implantações doMETA-INF/jboss-deployment-structure.xml
, conforme o seguinte:<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0"> <deployment> <exclusions> <module name="org.hibernate"/> </exclusions> <deployment> </jboss-deployment-structure>
Não existe nenhuma etapa adicional que você deve realizar quando você aplicar o bundle no seu aplicativo. Consulte a Seção 3.2.2.2, “Configuração das Alterações para Aplicativos que usam o Hibernate e o JPA” para maiores informações.Depuração e resolução dos erros Seam 2.2 JNDI
Quando você migrar o aplicativo Seam 2.2, você poderá ver errosjavax.naming.NameNotFoundException
no log conforme o seguinte:javax.naming.NameNotFoundException: Name 'jboss-seam-booking' not found in context ''
Caso você não deseje modificar as pesquisas JNDI através do código, você pode modificar o arquivocomponents.xml
do aplicativo, conforme abaixo:Substituição do elemento core-init existente
Primeiro, você pode substituir o elemento core-init existente, conforme abaixo:<!-- <core:init jndi-pattern="jboss-seam-booking/#{ejbName}/local" debug="true" distributable="false"/> --> <core:init debug="true" distributable="false"/>
Encontre as mensagens INFO JNDI binding INFO no log do servidor
A seguir, encontre as mensagens INFO binding JNDI que são emitidas no log do servidor quando o aplicativo é implantado. As mensages binding JNIDI devem parecer-se com o seguinte:INFO org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor (MSC service thread 1-1) JNDI bindings for session bean named AuthenticatorAction in deployment unit subdeployment "jboss-seam-booking.jar" of deployment "jboss-seam-booking.ear" are as follows: java:global/jboss-seam-booking/jboss-seam-booking.jar/AuthenticatorAction!org.jboss.seam.example.booking.Authenticator java:app/jboss-seam-booking.jar/AuthenticatorAction!org.jboss.seam.example.booking.Authenticator java:module/AuthenticatorAction!org.jboss.seam.example.booking.Authenticator java:global/jboss-seam-booking/jboss-seam-booking.jar/AuthenticatorAction java:app/jboss-seam-booking.jar/AuthenticatorAction java:module/AuthenticatorAction
Adição dos elementos do componente
Para cada mensagem INFO binding JNIDI, adicione um elementocomponent
correspondente ao arquivocomponents.xml
:<component class="org.jboss.seam.example.booking.AuthenticatorAction" jndi-name="java:app/jboss-seam-booking.jar/AuthenticatorAction" />
Para maiores informações sobre como depurar e resolver os problemas de migração, consulte a Seção 4.2.1, “Depuração e Solução dos Problemas de Migração”.Para uma lista de problemas de migração conhecidos com os arquivos, consulte a Seção 3.2.11.2, “Problemas de Migração do Seam 2.2 Archive”.
O arquivo Seam 2.2 é implantado e executado com êxito no JBoss Enterprise Application Plataform 6.