4.3.3. Migração da Amostra do Seam 2.2 Booking para o JBoss Enterprise Application Plataform 6
Sumário
A migração do Seam 2.2 Booking EAR é mais complicada do que a amostra Seam 2.2 JPA WAR. A documentação para a migração da amostra Seam 2.2 JPA WAR pode ser encontrada na Seção 4.3.2, “Migração da Amostra Seam 2.2 JPA para o JBoss Enterprise Application Plataform 6”. Para migrar o aplicativo, você deve realizar o seguinte:
- Inicialize o JSF 1.2 ao invés do JSF 2 default.
- As versões antigas de bundle do Hibernate JARs
- Altere os bindings JNDI para uso da nova sintaxe portável do Java EE 6 JNDI.
Importante
Os aplicativos que usam o Hibernate diretamente com o Seam 2.2 podem usar a versão do Hibernate 3 empacotados dentro do aplicativo. O Hibernate 4, que é fornecido através do módulo org.hibernate do JBoss Enterprise Application Plataform 6, não é suportado pelo Seam 2.2. Esta amostra possui por intenção ajudá-lo executar o seu aplicativo no JBoss Enterprise Application Plataform 6 como primeira etapa. Por favor certifique-se de que o empacotamento do Hibernate 3 com o aplicativo Seam 2.2 não é uma configuração suportada.
Procedimento 4.13. Migração da amostra Seam 2.2 Booking
Crie o arquivo
jboss-deployment-structure.xml
Crie um novo arquivo nomeadojboss-deployment-structure.xml
nojboss-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="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"/> <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="booking-web.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>
Remova a propriedade
hibernate
para a classe do cacheRemova ou comente a propriedade hibernate para a classe do provedor do cache no arquivojboss-seam-booking.jar/META-INF/persistence.xml
:<!-- <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/> -->
Copie os JARs a partir da distribuição Seam 2.2
Copie os seguintes JARs a partir da distribuição Seam 2.2EAP5.x_HOME/jboss-eap5.x/seam/lib/
no diretóriojboss-seam-booking.ear/lib
.slf4j-api.jar slf4j-log4j12.jar hibernate-core.jar hibernate-entitymanager.jar hibernate-validator.jar hibernate-annotations.jar hibernate-commons-annotations.jar
Altere os nomes de pesquisa JNDI
Altere os strings de pesquisa JNDI no arquivojboss-seam-booking.war/WEB-INF/components.xml
. O JBoss Enterprise Application Plataform 6 efetua o binds nos EJBs usando as regras de sintaxe portável JNDI e você não pode usar o jndiPattern que era usado no JBoss Enterprise Application Plataform 5. Segue abaixo como os strings de pesquisa EJB JNDI do aplicativo devem ser alteradas ao JBoss Enterprise Application Plataform 6:java:global/seam-booking/booking-ejb/HotelSearchingAction!org.jboss.seam.example.booking.HotelSearching java:app/booking-ejb/HotelSearchingAction!org.jboss.seam.example.booking.HotelSearching java:module/HotelSearchingAction!org.jboss.seam.example.booking.HotelSearching java:global/seam-booking/booking-ejb/HotelSearchingAction java:app/booking-ejb/HotelSearchingAction java:module/HotelSearchingAction
Os strings de pesquisa para os EJBs de framework Seam 2.2 devem ser alteradas conforme abaixo:java:global/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/seam-booking/jboss-seam/EjbSynchronizations java:app/jboss-seam/EjbSynchronizations java:module/EjbSynchronizations
Você pode usar uma das seguintes abordagens:Adição dos elementos do componente
Você pode adicionar umjndi-name
para 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/booking-ejb/AuthenticatorAction" /> <component class="org.jboss.seam.example.booking.BookingListAction" jndi-name="java:app/booking-ejb/BookingListAction" /> <component class="org.jboss.seam.example.booking.RegisterAction" jndi-name="java:app/booking-ejb/RegisterAction" /> <component class="org.jboss.seam.example.booking.HotelSearchingAction" jndi-name="java:app/booking-ejb/HotelSearchingAction" /> <component class="org.jboss.seam.example.booking.HotelBookingAction" jndi-name="java:app/booking-ejb/HotelBookingAction" /> <component class="org.jboss.seam.example.booking.ChangePasswordAction" jndi-name="java:app/booking-ejb/ChangePasswordAction" />
- Você pode modificar o código pela adição da anotação
@JNDIName(value="")
especificando o caminho JNDI. Segue abaixo uma amostra alterada do código bean de sessão stateless. Uma descrição detalhada deste processo pode ser encontrada na documentação de referência Seam 2.2.@Stateless @Name("authenticator") @JndiName(value="java:app/booking-ejb/AuthenticatorAction") public class AuthenticatorAction implements Authenticator { ... }
Resultado:
O aplicativo Seam 2.2 Booking implanta e executa com êxito no JBoss Enterprise Application Plataform 6.