4.3.3. Migração de Exemplo do Seam 2.2 Booking para o JBoss EAP 6
A migração do Seam 2.2 Booking EAR é mais complicada do que o exemplo do Seam 2.2 JPA WAR. A documentação para a migração de exemplo do Seam 2.2 JPA WAR pode ser encontrada aqui Seção 4.3.2, “Migração do Exemplo Seam 2.2 JPA para o JBoss EAP 6”. Para migrar o aplicativo, por favor realize o seguinte:
- Inicialize JSF 1.2 ao invés do JSF 2 padrão.
- Empacote as versões antigas dos JARs Hibernate ao invés de usar aquelas que foram enviadas junto com o JBoss EAP 6.
- Altere as vinculações JNDI para uso da nova sintaxe portátil do Java EE 6 JNDI.
Importante
Procedimento 4.7. Migração de exemplo do Seam 2.2 Booking
Crie o arquivo
jboss-deployment-structure.xmlCrie um novo arquivo nomeadojboss-deployment-structure.xmlnojboss-seam-booking.ear/META-INF/e adicione o seguinte conteúdo:<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"/> <module name="org.apache.log4j" export="true"/> <module name="org.dom4j" export="true"/> <module name="org.apache.commons.logging" export="true"/> <module name="org.apache.commons.collections" export="true"/> </dependencies> <exclusions> <module name="org.hibernate" slot="main"/> </exclusions> </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>Modifique o arquivo
jboss-seam-booking.jar/META-INF/persistence.xmlcomo a seguir.- Remova ou converta em comentário a propriedade hibernate para a classe do provedor do cache:
<!-- <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/> --> - Adicione a propriedade de módulo do provedor ao arquivo
jboss-seam-booking.jar/META-INF/persistence.xml:<property name="jboss.as.jpa.providerModule" value="hibernate3-bundled" /> - Altere a propriedade
jta-data-sourcepara usar o nome JNDI da fonte de dados JDBC padrão:<jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
Copie os JARs da distribuição Seam 2.2
Copie os JARs a seguir da distribuição Seam 2.2EAP5.x_HOME/jboss-eap5.x/seam/lib/no diretóriojboss-seam-booking.ear/lib.antlr.jar slf4j-api.jar slf4j-log4j12.jar hibernate-core.jar hibernate-entitymanager.jar hibernate-validator.jar hibernate-annotations.jar hibernate-commons-annotations.jarAltere os nomes de pesquisa JNDI
Altere as cadeias de pesquisa JNDI no arquivojboss-seam-booking.war/WEB-INF/components.xml. Devido a novas regras portáteis JNDI, o JBoss EAP 6 agora vincula EJBs usando as regras de sintaxe portáteis JNDI e não é possível usar o jndiPattern que era usado no JBoss EAP 5. Segue abaixo as cadeias de pesquisa JNDI EJB do aplicativo que devem ser alteradas para o JBoss EAP 6:As cadeias de pesquisa JNDI para os EJBs de estrutura Seam 2.2 devem ser alteradas conforme abaixo:java:global/jboss-seam-booking/jboss-seam-booking/HotelSearchingAction!org.jboss.seam.example.booking.HotelSearching java:app/jboss-seam-booking/HotelSearchingAction!org.jboss.seam.example.booking.HotelSearching java:module/HotelSearchingAction!org.jboss.seam.example.booking.HotelSearching java:global/jboss-seam-booking/jboss-seam-booking/HotelSearchingAction java:app/jboss-seam-booking/HotelSearchingAction java:module/HotelSearchingActionVocê pode usar uma das seguintes abordagens:java:global/jboss-seam-booking/jboss-seam/EjbSynchronizations!org.jboss.seam.transaction.LocalEjbSynchronizations java:app/jboss-seam/EjbSynchronizations!org.jboss.seam.transaction.LocalEjbSynchronizations java:module/EjbSynchronizations!org.jboss.seam.transaction.LocalEjbSynchronizations java:global/jboss-seam-booking/jboss-seam/EjbSynchronizations java:app/jboss-seam/EjbSynchronizations java:module/EjbSynchronizationsAdicionar os elementos do componente
Você pode adicionar umjndi-namepara cada EJB aoWEB-INF/components.xml:<component class="org.jboss.seam.transaction.EjbSynchronizations" jndi-name="java:app/jboss-seam/EjbSynchronizations"/> <component class="org.jboss.seam.async.TimerServiceDispatcher" jndi-name="java:app/jboss-seam/TimerServiceDispatcher"/> <component class="org.jboss.seam.example.booking.AuthenticatorAction" jndi-name="java:app/jboss-seam-booking/AuthenticatorAction" /> <component class="org.jboss.seam.example.booking.BookingListAction" jndi-name="java:app/jboss-seam-booking/BookingListAction" /> <component class="org.jboss.seam.example.booking.RegisterAction" jndi-name="java:app/jboss-seam-booking/RegisterAction" /> <component class="org.jboss.seam.example.booking.HotelSearchingAction" jndi-name="java:app/jboss-seam-booking/HotelSearchingAction" /> <component class="org.jboss.seam.example.booking.HotelBookingAction" jndi-name="java:app/jboss-seam-booking/HotelBookingAction" /> <component class="org.jboss.seam.example.booking.ChangePasswordAction" jndi-name="java:app/jboss-seam-booking/ChangePasswordAction" />- Você pode modificar o código adicionando a anotação
@JNDIName(value="")e especificando o caminho JNDI. Segue abaixo um exemplo do código de bean de sessão sem monitorização de estado alterado. Uma descrição detalhada deste processo está disponível na documentação de referência do Seam 2.2.@Stateless @Name("authenticator") @JndiName(value="java:app/jboss-seam-booking/AuthenticatorAction") public class AuthenticatorAction implements Authenticator { ... }
O aplicativo Seam 2.2 Booking é implantado e executado com êxito no JBoss EAP 6.