4.3.3. Seam 2.2 Booking サンプルの JBoss EAP 6 への移行
概要
Seam 2.2 Booking EAR の移行は Seam 2.2 JPA WAR サンプルの移行よりも複雑です。Seam 2.2 JPA WAR サンプルの移行に関するドキュメントについては、「Seam 2.2 JPA サンプルの JBoss EAP 6 への移行」を参照してください。アプリケーションを移行するには、以下を実行する必要があります。
- デフォルトの JSF 2 の代わりに JSF 1.2 を初期化します。
- JBoss EAP 6 に同梱された Hibernate JAR を使用せずに、古いバージョンの Hibernate JAR をバンドルします。
- 新しい Java EE 6 JNDI の移植可能な構文を使用するよう JNDI バインディングを変更します。
重要
Seam 2.2 で Hibernate を直接使用するアプリケーションは、アプリケーション内部にパッケージ化された Hibernate 3 のバージョンを使用することがあります。JBoss EAP 6 の org.hibernate モジュールを介して提供される Hibernate 4 は、Seam 2.2 によってサポートされません。この例の目的は、最初の手順として JBoss EAP 6 でアプリケーションを実行させることです。Hibernate 3 を Seam 2.2 アプリケーションでパッケージ化する設定はサポートされないことに注意してください。
手順4.7 Seam 2.2 Booking サンプルの移行
jboss-deployment-structure.xml
ファイルを作成するjboss-deployment-structure.xml
という名前の新しいファイルをjboss-seam-booking.ear/META-INF/
で作成し、以下の内容を追加します。<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>
以下のように
jboss-seam-booking.jar/META-INF/persistence.xml
ファイルを変更する- キャッシュプロバイダークラスの hibernate プロパティーを削除またはコメントアウトします。
<!-- <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/> -->
- プロバイダーモジュールプロパティーを
jboss-seam-booking.jar/META-INF/persistence.xml
ファイルに追加します。<property name="jboss.as.jpa.providerModule" value="hibernate3-bundled" />
jta-data-source
プロパティーを変更し、デフォルトの JDBC データソース JNDI 名を使用するようにします。<jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
Seam 2.2 ディストリビューションより JAR をコピーする
以下の JAR を Seam 2.2 ディストリビューションのEAP5.x_HOME/jboss-eap5.x/seam/lib/
からjboss-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.jar
JNDI ルックアップ名を変更する
jboss-seam-booking.war/WEB-INF/components.xml
ファイルの JNDI ルックアップ文字列を変更します。新しい移植可能な JNDI のルールが導入されたため、JBoss EAP 6 は 移植可能な JNDI の構文ルールを使用して EJB をバインドします。JBoss EAP 5 で使用された単一の jndiPattern を使用することはできません。JBoss EAP 6 では、アプリケーションの EJB JNDI ルックアップ文字列を次のように変更する必要があります。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/HotelSearchingAction
Seam 2.2 フレームワーク EJB に対する JNDI ルックアップ文字列は、以下のように変更する必要があります。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/EjbSynchronizations
以下のどちらかの方法を使用できます。コンポーネント要素を追加する
各 EJB に対するjndi-name
をWEB-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" />
- JNDI パスを指定する
@JNDIName(value="")
アノテーションを追加してコードを変更することができます。変更されたステートレスセッション Bean のコード例は次のとおりです。この処理の詳細については、Seam 2.2 のリファレンスドキュメントを参照してください。@Stateless @Name("authenticator") @JndiName(value="java:app/jboss-seam-booking/AuthenticatorAction") public class AuthenticatorAction implements Authenticator { ... }
結果
Seam 2.2 JAP の Booking アプリケーションが JBoss EAP 6 上にデプロイされ、正常に実行されます。