3.2.10. Seam 2.2 アプリケーションの移行
3.2.10.1. Seam 2.2 アーカイブの JBoss Enterprise Application Platform 6 への移行
概要
Seam 2.2 アプリケーションを移行する際、データソースを設定し、モジュール依存関係を指定する必要があります。また、JBoss Enterprise Application Platform 6 に同梱されないアーカイブにアプリケーションの依存関係があるかを判断し、依存している JAR をアプリケーションの lib/
ディレクトリにコピーする必要があります。
重要
この例は、最初にアプリケーションを JBoss Enterprise Application Platform 6 上で実行できるようにすることを目的としています。この設定はサポート対象ではなく、Hibernate 4 を使用するよう次の手順でアプリケーションをアップグレードする必要があります。
手順3.27 Seam 2.2 アーカイブの移行
データソース設定の更新
一部の Seam 2.2 の例は、java:/ExampleDS
という名前のデフォルトの JDBC データソースを使用します。このデフォルトデータソースは JBoss Enterprise Application Platform 6 ではjava:jboss/datasources/ExampleDS
に変更になりました。例のデータベースがアプリケーションによって使用される場合、以下の方法の 1 つ実行します。データソースの設定方法の詳細は 「DataSource 設定の更新」 を参照してください。- JBoss Enterprise Application Platform 6 に同梱されるデータベースの例を使用したい場合は、
META-INF/persistence.xml
ファイルを変更し、既存のjta-data-source
要素をデータベースのデータソース JNDI 名に置き換えます。<!-- <jta-data-source>java:/ExampleDS</jta-data-source> --> <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
- 既存のデータベースを維持したい場合は、データソースの定義を
EAP_HOME/standalone/configuration/standalone.xml
ファイルに追加することができます。以下の定義は JBoss Enterprise Application Platform 6 で定義されるデフォルトの HSQL データソースのコピーになります。<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>
- jbossadmin コマンドラインインターフェースを使用してデータソースの定義を追加することも可能です。データソースを追加するために使用しなければならない構文の例は次の通りです。行の最後にある "\" はコマンドが次の行に続くことを表しています。
例3.1 データソース定義を追加する構文の例
$ 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
必要な依存関係の追加
Seam 2.2 アプリケーションは JSF 1.2 を使用するため、JSF 1.2 モジュールの依存関係を追加し、 JSF 2.0 モジュールを除外する必要があります。これを実行するには、以下のデータが格納される EAR のMETA-INF/
ディレクトリにjboss-deployment-structure.xml
ファイルを作成する必要があります。<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>
アプリケーションがサードパーティーのロギングフレームワークを使用する場合は、 「ロギング依存関係の編集」 に記載されている依存関係を追加する必要があります。外部フレームワークまたは他の場所より依存するアーカイブをコピーする
Seam 2.2 アプリケーションが Hibernate 3.x を使用する場合でも、JBoss Enterprise Application Platform 6 にパッケージ化されている Hibernate 4 モジュールを使用してアプリケーションを実行することが可能ですが、存在しない Hibernate 3.x クラスがあるため、以前の Hibernate JAR を 1 つ以上/lib
ディレクトリへコピーする必要がある場合があります。Hibernate クラスを示すClassNotFoundExceptions
やClassCastExceptions
が発生した場合、次のようにMETA-INF/jboss-deployment-structure.xml
のデプロイメントセクションにある Hibernate モジュールを除外する必要があることがあります。<jboss-deployment-structure xmlns="urn:jboss:deployment-structure:1.0"> <deployment> <exclusions> <module name="org.hibernate"/> </exclusions> <deployment> </jboss-deployment-structure>
Seam 2.2 JNDI エラーのデバッグおよび解決
Seam 2.2 アプリケーションを移行する時に次のようなjavax.naming.NameNotFoundException
エラーがログに記録されることがあります。javax.naming.NameNotFoundException: Name 'jboss-seam-booking' not found in context ''
コード全体の JNDI ルックアップを変更したくない場合、次のようにアプリケーションのcomponents.xml
ファイルを変更することができます。既存の core-init 要素の置き換え
最初に、次のように既存の core-init 要素を置き換える必要があります。<!-- <core:init jndi-pattern="jboss-seam-booking/#{ejbName}/local" debug="true" distributable="false"/> --> <core:init debug="true" distributable="false"/>
サーバーログでの JNDI バインディング INFO メッセージの検索
次に、アプリケーションがデプロイされた時にサーバーログに出力された JNDI バインディング INFO メッセージを探します。以下のメッセージと似ているものが JNDI バインディングメッセージです。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
component 要素の追加
ログの各 JNDI バインディング INFO メッセージに対して、一致するcomponent
要素をcomponents.xml
ファイルに追加します。<component class="org.jboss.seam.example.booking.AuthenticatorAction" jndi-name="java:app/jboss-seam-booking.jar/AuthenticatorAction" />
移行の問題に関するデバッグや解決方法の詳細は 「移行の問題のデバッグと解決」 を参照してください。
結果
Seam 2.2 アーカイブが JBoss Enterprise Application Platform 6 上にデプロイされ、正常に実行されます。