移行ガイド
JBoss Enterprise Application Platform 6 向け
エディッション 2
Sande Gilda
Eamon Logue
Darrin Mison
David Ryan
Misty Stanley-Jones
Keerat Verma
Tom Wells
概要
前書き
1. 表記方法
1.1. 印刷における表記方法
等幅の太字
現在作業中のディレクトリ内のファイルmy_next_bestselling_novel
の内容を表示させるには、 シェルプロンプトでcat my_next_bestselling_novel
コマンドを入力してから Enter を押してそのコマンドを実行します。
Enter を押してコマンドを実行します。Press Ctrl+Alt+F2 to switch to a virtual terminal.
等幅の太字
で表示します。 例えば、
ファイル関連のクラス群はファイルシステムに対してはfilesystem
、 ファイルにはfile
、 ディレクトリにはdir
をそれぞれ含みます。 各クラスは個別に関連する権限セットを持っています。
メインメニューバーから システム > 個人設定 > マウス の順で選択し マウスの個人設定 を起動します。 ボタン タブ内で 左ききのマウス チェックボックスをクリックしてから 閉じる をクリックしマウスの主要ボタンを左から右に切り替えます (マウスを左ききの人が使用するのに適した設定にする)。To insert a special character into a gedit file, choose Applications → Accessories → Character Map from the main menu bar. Next, choose Search → Find… from the Character Map menu bar, type the name of the character in the Search field and click Next. The character you sought will be highlighted in the Character Table. Double-click this highlighted character to place it in the Text to copy field and then click the Copy button. Now switch back to your document and choose Edit → Paste from the gedit menu bar.
等幅の太字で且つ斜体
または プロポーショナルの太字で且つ斜体
ssh を使用してリモートマシンに接続するには、 シェルプロンプトでssh username@domain.name
と入力します。 リモートマシンがexample.com
であり、 そのマシンで使用しているユーザー名が john ならssh john@example.com
と入力します。mount -o remount file-system
コマンドは指定したファイルシステムを再マウントします。 例えば、/home
ファイルシステムを再マウントするコマンドはmount -o remount /home
になります。現在インストールされているパッケージのバージョンを表示するには、rpm -q package
コマンドを使用します。 結果として次を返してきます、package-version-release
。
Publican は DocBook の発行システムです。
1.2. 引用における表記方法
mono-spaced roman
(等幅の Roman) にセットされるので以下のように表示されます。
books Desktop documentation drafts mss photos stuff svn books_tests Desktop1 downloads images notes scripts svgs
mono-spaced roman
(等幅の Roman) でセットされますが、以下のように強調表示されます。
package org.jboss.book.jca.ex1;
import javax.naming.InitialContext;
public class ExClient
{
public static void main(String args[])
throws Exception
{
InitialContext iniCtx = new InitialContext();
Object ref = iniCtx.lookup("EchoBean");
EchoHome home = (EchoHome) ref;
Echo echo = home.create();
System.out.println("Created Echo");
System.out.println("Echo.echo('Hello') = " + echo.echo("Hello"));
}
}
1.3. 注記および警告
注記
重要
警告
第1章 はじめに
1.1. 移行ガイドについて
第2章 移行の準備
2.1. 移行の準備
JBoss Enterprise Application Platform 6 の新機能と変更内容の確認
本リリースには、JBoss Enterprise Application Platform 5 のアプリケーションのデプロイメントに影響する可能性がある変更が複数あります。これには、ファイルディレクトリ構造、スクリプト、デプロイメント設定、クラスローディング、JNDI ルックアップなどの変更が含まれます。詳細は 「JBoss Enterprise Application Platform 6 の新機能と変更内容」 を参照してください。スタートガイドの確認
JBoss Enterprise Application Platform 6 の 開発ガイドに記載されている、アプリケーション開発の開始に関する章を読むようにしてください。この章には以下に関する重要な情報が含まれています。- Java EE 6
- 新しいモジュラークラスローディングシステム
- ファイル構造の変更
- JBoss Enterprise Application Platform 6 のダウンロードおよびインストール方法
- JBoss Developer Studio のダウンロードおよびインストール方法
- 開発環境に対応する Maven の設定方法
- 製品に同梱されるクイックスタートサンプルアプリケーションのダウンロードおよび実行方法
アプリケーションの分析および理解
アプリケーションはそれぞれ異なるため、移行を開始する前に既存アプリケーションのコンポーネントやアーキテクチャーについて十分に理解する必要があります。
重要
2.2. JBoss Enterprise Application Platform 6 の新機能と変更内容
JBoss Enterprise Application Platform 6 が以前のリリースと顕著に異なる点は次の通りです。
- モジュールベースのクラスローディング
- JBoss Enterprise Application Platform 5 ではクラスローディングのアーキテクチャーは階層的でした。JBoss Enterprise Application Platform 6 ではクラスローディングが JBoss モジュールベースとなりました。これにより、正確にアプリケーションを分離できるようになったため、サーバー実装クラスを隠し、アプリケーションが必要なクラスのみをロードできるようになりました。より良いパフォーマンスを実現するため、クラスローディングは平行して実行されます。JBoss Enterprise Application Platform 5 向けに書かれたアプリケーションはモジュールの依存関係を指定するため変更する必要があります。場合によってはアーカイブを再パッケージ化する必要があることもあります。詳細は、JBoss Enterprise Application Platform 6 開発ガイドの「アプリケーションの開発」の章に記載されている、クラスローディングおよびモジュールの概要を参照してください。
- ドメイン管理
- JBoss Enterprise Application Platform 6 ではサーバーをスタンドアロンサーバーとして実行したり、管理ドメインで実行することが可能です。管理ドメインではサーバーグループ全体を一度に設定できるため、サーバーのネットワーク全体で設定を同期化することが可能です。これにより前リリース向けに構築されたアプリケーションが影響を受けることはありませんが、複数サーバーへのデプロイメントの管理を簡素化することができます。詳細は、JBoss Enterprise Application Platform 6 開発ガイドの「アプリケーションの開発」の章に記載されている管理ドメインに関する説明を参照してください。
注記
ドメインモードは次の Boss Enterprise 製品ではサポートされていません。- JBoss Portal Platform 6
- デプロイメント設定
- スタンドアロンサーバーと管理ドメイン
- JBoss Enterprise Application Platform 5 ではプロファイルベースのデプロイメント設定を使用し、これらのプロファイルは
EAP_HOME/server/
ディレクトリにありました。多くのアプリケーションにはセキュリティーやデータベース、リソースアダプターなどの設定に対する複数の設定ファイルが含まれていました。JBoss Enterprise Application Platform 6 では 1 つのファイルを使用してデプロイメントを設定できるようになりました。このファイルはデプロイメントに使用されるすべてのサービスやサブシステムを設定するために使用されます。スタンドアロンサーバーはEAP_HOME/standalone/configuration/standalone.xml
ファイルを使用して設定されます。管理ドメインで実行されているサーバーでは、サーバーはEAP_HOME/domain/configuration/domain.xml
ファイルを使用して設定されます。JBoss Enterprise Platform 5 の複数の設定ファイルに含まれる情報は、新しい単一の設定ファイルへ移行する必要があります。 - デプロイメントの順序付け
- JBoss Enterprise Application Platform 6 はデプロイメントに対して高速で平行した初期化を実行するため、パフォーマンスと効率性が向上します。ほとんどの場合でアプリケーションサーバーは自動的に依存関係を事前判断し、最も効率的なデプロイメントストラテジーを選択します。しかし、EAR としてデプロイされた複数のモジュールで構成され、CDI 挿入やリソース参照エントリーの代わりにレガシーの JNDI ルックアップを使用する JBoss Enterprise Application Platform 5 のアプリケーションは、設定の変更が必要になります。
- ディレクトリー構造とスクリプト
- 前述の通り、JBoss Enterprise Application Platform 6 はプロファイルベースのデプロイメント設定を使用しません。そのため、
EAP_HOME/server/
ディレクトリは存在しません。スタンドアロンサーバーの設定ファイルはEAP_HOME/standalone/configuration/
ディレクトリ、デプロイメントはEAP_HOME/standalone/deployments/
ディレクトリにあります。管理ドメインで実行されているサーバーの設定ファイルはEAP_HOME/domain/configuration/
ディレクトリ、デプロイメントはEAP_HOME/domain/deployments/
ディレクトリにあります。JBoss Enterprise Application Platform 5 では、Linux スクリプトEAP_HOME/bin/run.sh
または Windows スクリプトEAP_HOME/bin/run.bat
を使用してサーバーを起動しました。JBoss Enterprise Application Platform 6 では、サーバーの起動方法によってサーバー起動スクリプトが異なります。 スタンドアロンサーバーを使用する場合は、Linux スクリプトEAP_HOME/bin/standalone.sh
または Windows スクリプトEAP_HOME/bin/standalone.bat
を使用します。 管理ドメインを起動する場合は、Linux スクリプトEAP_HOME/bin/domain.sh
または Windows スクリプトEAP_HOME/bin/domain.bat
を使用します。 - JNDI ルックアップ
- JBoss Enterprise Application Platform 6 は標準化された移植可能な JNDI 名前空間を使用するようになりました。JBoss Enterprise Application Platform 5 向けに書かれた JNDI ルックアップを使用するアプリケーションは、新しい JNDI 名前空間の慣習に従って変更する必要があります。JNDI のネーミング構文についての詳細は 「移植可能な JNDI ネーミング構文」 を参照してください。
第3章 アプリケーションの移行
3.1. ほとんどのアプリケーションで必要な変更
3.1.1. ほとんどのアプリケーションで必要な変更の確認
3.1.2. クラスローディングの変更
3.1.2.1. クラスローディングの変更によるアプリケーションの更新
- 最初に、アプリケーションのパッケージと依存関係を確認します。詳細は 「クラスローディングの変更によるアプリケーション依存関係の更新」を参照してください。
- アプリケーションがロギングを行う場合、正しいモジュールの依存関係を指定する必要があります。手順の詳細は 「ロギング依存関係の編集」 を参照してください。
- モジュラークラスローディングの変更により、EAR または WAR のパッケージ構造を変更する必要がある場合があります。詳細は 「EAR および WAR パッケージの編集」 を参照してください。
3.1.2.2. モジュールの依存関係を理解する
モジュールは独自のクラスと、明示的または暗黙的な依存関係を持つモジュールのクラスのみにアクセスすることが可能です。
手順3.1 タスク
暗黙的な依存関係を理解する
サーバー内のデプロイヤーは、javax.api
やsun.jdk
などの一般的に使用されるモジュール依存関係を暗黙的かつ自動的に追加します。これにより、ランタイム時にデプロイメントに対してクラスを可視化でき、開発者が依存関係を明示的に追加する作業が軽減されます。暗黙的な依存関係がいつどのように追加されるかについては、 JBoss Enterprise Application Platform 6 開発ガイドの「クラスローディングとモジュール」の章に記載されている暗黙的なモジュール依存関係の説明を参照してください。明示的な依存関係を理解する
その他のクラスに対してはモジュールを明示的に指定する必要があります。明示的に指定しないと、欠落している依存関係が原因でデプロイメントエラーやランタイムエラーが発生します。依存関係が欠落していると、サーバーログにClassNotFoundExceptions
やNoClassDefFoundErrors
トレースが記録されます。複数のモジュールが同じ JAR をロードしたり、異なるモジュールによってロードされるクラスを拡張するクラスを 1 つのモジュールがロードすると、サーバーログにClassCastExceptions
トレースが記録されます。依存関係を明示的に指定するには、MANIFEST.MF
を変更するか、JBoss 固有のデプロイメント記述子ファイルjboss-deployment-structure.xml
を作成します。モジュール依存関係の詳細は、JBoss Enterprise Application Platform 6 開発ガイドに記載されている、クラスローディングとモジュールの概要を参照してください。
3.1.2.3. クラスローディングの変更によるアプリケーション依存関係の更新
JBoss Enterprise Application Platform 6 のクラスローディングは以前のバージョンの JBoss Application Server とは大きく異なっています。JBoss Enterprise Application Platform 6 のクラスローディングは JBoss モジュールプロジェクトが基盤となっています。すべての JAR をフラットなクラスパスにロードする単一の階層的なクラスローダーではなく、各ライブラリが依存するモジュールに対してのみリンクするモジュールとなります。また、Enterprise Application Platform 6 のデプロイメントもモジュールで、クラスの依存関係が明示的に定義されている場合を除き、アプリケーションサーバーの JAR に定義されているクラスへアクセスできません。アプリケーションサーバーによって定義されるモジュール依存関係の一部は自動的に設定されます。例えば、Java EE アプリケーションをデプロイする場合、Java EE API の依存関係は自動的にモジュールに追加されます。自動的に追加される依存関係の完全一覧は、JBoss Enterprise Application Platform 6 開発ガイドの「クラストーディングとモジュール」の章に記載されている暗黙的なモジュール依存関係の説明を参照してください。
アプリケーションを JBoss Enterprise Application Platform 6 に移行する際、モジュラークラスローディングの変更に伴い、以下のタスクを 1 つ以上実行する必要がある場合があります。
3.1.3. 設定ファイルの変更
3.1.3.1. JBoss Enterprise Application Platform 6 のクラスローディングを制御するファイルの作成または変更
モジュラークラスローディングを使用する JBoss Enterprise Application Platform 6 の変更に伴い、依存関係を追加したり自動的な依存関係がロードされないようにするため、1 つ以上のファイルを作成または変更する必要がある場合があります。クラスローディングの優先度については、JBoss Enterprise Application Platform 6 開発ガイドの「クラスローディングとモジュール」の章を参照してください。
- jboss-web.xml
jboss-web.xml
ファイルの<class-loading>
要素が定義されている場合はこれを削除する必要があります。 JBoss Enterprise Application Platform 5 でこの要素によって引き起こされた動作は、JBoss Enterprise Application Platform 6 ではクラスローディングのデフォルト動作ととなっているため、この要素が必要なくなりました。この要素を削除しないと、サーバーログに ParseError と XMLStreamException が記録されます。これは、コメントアウトされたjboss-web.xml
ファイルの<class-loading>
要素の例になります。<jboss-web> <!-- <class-loading java2ClassLoadingCompliance="false"> <loader-repository> seam.jboss.org:loader=MyApplication <loader-repository-config>java2ParentDelegation=false</loader-repository-config> </loader-repository> </class-loading> --> </jboss-web>
- MANIFEST.MF
- 手作業による編集
- アプリケーションが使用するコンポーネントやモジュールによって異なりますが、このファイルに 1 つ以上の依存関係を追加する必要がある場合があります。依存関係は
Dependencies
かClass-Path
エントリのどちらかに追加します。開発者によって編集されたMANIFEST.MF
の例は次の通りです。Manifest-Version: 1.0 Dependencies: org.jboss.logmanager Class-Path: OrderManagerEJB.jar
このファイルを編集する時、必ずファイルの最後にニューライン文字があるようにしてください。 - Maven を使用した生成
- Maven を使用する場合、
pom.xml
ファイルを編集してMANIFEST.MF
ファイルの依存関係を生成する必要があります。アプリケーションによって EJB 3.0 が使用される場合、pom.xml
ファイルに次のようなセクションが含まれることがあります。<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-ejb-plugin</artifactId> <configuration> <ejbVersion>3.0</ejbVersion> </configuration> </plugin>
EJB 3.0 コードがorg.apache.commons.log
を使用する場合、MANIFEST.MF
ファイルにこの依存関係が存在しなければなりません。この依存関係を生成するには、次のように<plugin>
要素をpom.xml
ファイルに追加します。<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-ejb-plugin</artifactId> <configuration> <ejbVersion>3.0</ejbVersion> <archive> <manifestFile>src/main/resources/META-INF/MANIFEST.MF</manifestFile> </archive> </configuration> </plugin>
上記の例では、次の依存関係エントリのみがsrc/main/resourcres/MANIFEST.MF
ファイルに含まれる必要があります。Dependencies: org.apache.commons.logging
Maven は完全なMANIFEST.MF
ファイルを生成します。Manifest-Version: 1.0 Dependencies: org.apache.commons.logging
- jboss-deployment-structure.xml
- このファイルは、クラスローディングを細かく制御するために使用される JBoss 固有のデプロイメント記述子です。
MANIFEST.MF
と同様に、このファイルを使用して依存関係を追加することが可能です。また、自動的な依存関係が追加されないようにしたり、追加のモジュールを定義することが可能で、EAR デプロイメントの分離されたクラスローディング動作を変更したり、追加のリソースルートをモジュールへ追加することもできます。JSF 1.2 モジュールの依存関係を追加し、JSF 2.0 モジュールが自動的にローディングされないようにする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>
このファイルに関する詳細は 「Jboss-deployment-structure.xml」 を参照してください。 - application.xml
- 以前のバージョンの JBoss Enterprise Application Platform では、
jboss-app.xml
ファイルを使用して EAR 内でデプロイメントの順番を制御しました。本バージョンより Java EE6 仕様がapplication.xml
に<initialize-in-order>
要素を提供するようになり、これにより EAR 内の Java EE モジュールがデプロイされる順番を制御することができます。ほとんどの場合、デプロイメントの順番を指定する必要はありません。依存関係の挿入と、外部モジュールのコンポーネントを参照する resource-refs がアプリケーションによって使用される場合、アプリケーションサーバーは適切で最適なコンポーネントの順番を暗黙的に決定できるため、ほとんどの場合で<initialize-in-order>
要素は必要ありません。myApp.ear
内にmyBeans.jar
とmyApp.war
を持つアプリケーションがあるとしましょう。myApp.war
@EJB
のサーブレットがmyBeans.jar
より Bean を挿入します。この場合、必ずサーブレットが起動する前に EJB コンポーネントを使用できるようにし、<initialize-in-order>
要素を使用する必要がないことをアプリケーションサーバーが適切に認識します。しかし、次のようなレガシーの JNDI ルックアップスタイルのリモート参照を使用し、Bean へアクセスする場合はモジュールの順番を指定する必要がある場合があります。init() { Context ctx = new InitialContext(); ctx.lookup("TheBeanInMyBeansModule"); }
この場合、EJB コンポーネントがmyBeans.jar
にあることをサーバーが判断できないため、myBeans.jar
のコンポーネントがmyApp.war
のコンポーネントの前に初期化され開始されるよう強制する必要があります。これには、<initialize-in-order>
要素をtrue
に設定し、myBeans.jar
モジュールとmyApp.war
モジュールの順番をapplication.xml
ファイルに指定します。以下は<initialize-in-order>
要素を使用してデプロイメントの順番を制御する例になります。myBeans.jar
はmyApp.war
ファイルの前にデプロイされます。<application xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="6" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/application_6.xsd"> <application-name>myApp</application-name> <initialize-in-order>true</initialize-in-order> <module> <ejb>myBeans.jar</ejb> </module> <module> <web> <web-uri>myApp.war</web-uri> <context-root>myApp</context-root> </web> </module> </application>
application.xml
ファイルのスキーマは http://java.sun.com/xml/ns/javaee/application_6.xsd を参照してください。注記
<initialize-in-order>
要素をtrue
に設定するとデプロイメントの速度が遅くなることに注意してください。デプロイメントを最適化するためのコンテナの柔軟性が高いため、依存関係の挿入や resource-refs を使用して適切な依存関係を定義する方法が推奨されます。 - jboss-ejb3.xml
- Java Enterprise Edition (EE) によって定義される
ejb3-jar.xml
デプロイメント記述子によって提供される機能を上書きしたり追加するため、jboss.xml
はjboss-ejb3.xml
デプロイメント記述子に置き換えられました。この新ファイルはjboss.xml
との互換性がないため、jboss.xml
はデプロイメントで無視されます。 - login-config.xml
login-config.xml
ファイルはセキュリティー設定で使用されないようになりました。セキュリティーはサーバー設定ファイルの<security-domain>
要素に設定されるようになりました。スタンドアロンサーバーではstandalone/configuration/standalone.xml
ファイルになります。管理ドメインでサーバーを実行している場合はdomain/configuration/domain.xml
ファイルになります。
3.1.3.2. Jboss-deployment-structure.xml
EAP_HOME/docs/schema/jboss-deployment-structure-1_0.xsd
にあります。
3.1.3.3. 新しいモジュラークラスローディングシステムのパッケージリソース
以前のバージョンの Enterprise Application Platform では、WEB-INF/
ディレクトリ内のすべてのリソースが WAR クラスパスに追加されました。JBoss Enterprise Application Platform 6 では、Web アプリケーションのアーティファクトは WEB-INF/classes
および WEB-INF/lib
ディレクトリからのみロードされます。指定の場所でアプリケーションアーティファクトのパッケージ化に失敗した場合、ClassNotFoundException
や NoClassDefError
などのランタイムエラーが発生します。
- リソースパッケージの編集
- アプリケーションのみがリソースを使用できるようにするには、プロパティーファイル、JAR、およびその他のアーティファクトを
WEB-INF/classes/
またはWEB-INF/lib/
ディレクトリへ移動し、WAR とバンドルします。この方法の詳細は 「ResourceBundle プロパティーの場所変更」 を参照してください。 - カスタムモジュールの作成
- Enterprise Application Platform サーバー上で実行されているすべてのアプリケーションが、カスタムリソースを使用できるようにするには、カスタムモジュールを作成する必要があります。この方法の詳細は 「カスタムモジュールの作成」 を参照してください。
3.1.3.4. ResourceBundle プロパティーの場所変更
以前のバージョンの JBoss Enterprise Application Platform では、EAP_HOME/server/SERVER_NAME/conf/
ディレクトリはクラスパスに存在し、アプリケーションによる使用が可能でした。このプロパティーを JBoss Enterprise Application Platform 6 のアプリケーションのクラスパスで使用できるようにするには、アプリケーション内でパッケージ化する必要があります。
手順3.2
- WAR アーカイブをデプロイする場合、これらのプロパティーを WAR の
WEB-INF/classes/
フォルダーでパッケージ化する必要があります。 - これらのプロパティーを EAR のすべてのコンポーネントに対してアクセス可能にするには、JAR のルートでパッケージ化し、EAR の
lib/
フォルダーに置く必要があります。
3.1.3.5. カスタムモジュールの作成
手順3.3 カスタムモジュールの作成
module/
ディレクトリ構造を作成し、ファイルを追加します。EAP_HOME/module
ディレクトリ下にディレクトリ構造を作成し、ファイルや JAR が含まれるようにします。例は次の通りです。$ cd EAP_HOME/modules/
$ mkdir -p myorg-conf/main/properties
- 作成した
EAP_HOME/modules/myorg-conf/main/properties/
ディレクトリにプロパティーファイルを移動します。 - 次の XML が含まれる
module.xml
ファイルをEAP_HOME/modules/myorg-conf/main/
ディレクトリに作成します。<module xmlns="urn:jboss:module:1.1" name="myorg-conf"> <resources> <resource-root path="properties"/> </resources> </module>
- サーバー設定ファイルの
ee
サブシステムを編集します。JBoss CLI を使用するか、手作業でファイルを編集します。- 次の手順に従って JBoss CLI を使用し、サーバー設定ファイルを編集します。
- サーバーを起動し、管理 CLI へ接続します。
- Linux の場合は、コマンドラインで以下を入力します。
$ EAP_HOME/bin/jboss-cli.sh --connect $ Connected to standalone controller at localhost:9999
- Windows の場合は、コマンドラインで以下を入力します。
C:\>EAP_HOME\bin\jboss-cli.bat --connect C:\> Connected to standalone controller at localhost:9999
ee
サブシステムにmyorg-conf
<global-modules> 要素を作成するには、コマンドラインで以下を入力します。/subsystem=ee:write-attribute(name=global-modules, value=[{"name"=>"myorg-conf","slot"=>"main"}])
次の結果が表示されるはずです。{"outcome" => "success"}
- サーバー設定ファイルを手作業で編集したい場合は、次の手順に従ってください。
- サーバーを停止し、テキストエディターでサーバー設定ファイルを開きます。スタンドアロンサーバーを実行している場合は、
EAP_HOME/standalone/configuration/standalone.xml
ファイルになります。管理ドメインを実行している場合は、EAP_HOME/domain/configuration/domain.xml
ファイルになります。 ee
サブシステムを見つけ、myorg-conf
のグローバルモジュールを追加します。以下は、myorg-conf
要素が含まれるように編集されたee
サブシステム要素の例になります。<subsystem xmlns="urn:jboss:domain:ee:1.0" > <global-modules> <module name="myorg-conf" slot="main" /> </global-modules> </subsystem>
my.properties
という名前のファイルを正しいモジュールの場所にコピーしたとします。すると、以下のようなコードを使用してプロパティーファイルをロードできるようになります。Thread.currentThread().getContextClassLoader().getResource("my.properties");
3.1.4. ロギングの変更
3.1.4.1. ロギング依存関係の編集
JBoss LogManager はすべてのロギングフレームワークのフロントエンドをサポートするため、現在のロギングコードを保持することも、新しい JBoss のロギングインフラストラクチャーへ移行することも可能です。モジュラークラスローディングが変更されたため、いずれの場合でもアプリケーションを変更して必要な依存関係を追加する必要があるでしょう。
手順3.4 アプリケーションロギングコードの更新
- 「サードパーティーロギングフレームワークのアプリケーションコードの更新」 に従ってアプリケーションコードを更新します。
- 「新しい JBoss ロギングフレームワークを使用したコードの変更」 に従ってコードを編集します。
3.1.4.2. サードパーティーロギングフレームワークのアプリケーションコードの更新
JBoss Enterprise Application Platform 6 では Apache Commons Logging、Apache log4j、SLF4J、Java Logging などの一般的なサードパーティーフレームワークのロギング依存関係はデフォルトで追加されています。しかし、log4j を使用し、ロギングサブシステムを使用してハンドラー (アペンダー) を設定したくない場合は Enterprise Application Platform の log4j モジュールを除外する必要があります。
手順3.5 log4j.properties または log4j.xml ファイルを使用するよう Enterprise Application Platform 6 を設定する
- 次の内容が含まれる
jboss-deployment-structure.xml
を作成します。<jboss-deployment-structure> <deployment> <!-- Exclusions allow you to prevent the server from automatically adding some dependencies --> <exclusions> <module name="org.apache.log4j" /> </exclusions> </deployment> </jboss-deployment-structure>
- WAR をデプロイする場合は
jboss-deployment-structure.xml
ファイルをWEB-INF/
ディレクトリに置きます。EAR をデプロイする場合はjboss-deployment-structure.xml
ファイルをMETA-INF/
ディレクトリに置きます。 - デプロイメントの
lib/
ディレクトリにlog4j.properties
またはlog4j.xml
ファイルが含まれるようにします。 - アプリケーションをデプロイします。
注記
3.1.4.3. 新しい JBoss ロギングフレームワークを使用したコードの変更
新しいフレームワークを使用するには、次のようにインポートとコードを変更します。
手順3.6 タスク
インポートとロギングコードの変更
新しい JBoss ロギングフレームワークを使用するコードの例は次の通りです。import org.jboss.logging.Level; import org.jboss.logging.Logger; private static final Logger logger = Logger.getLogger(MyClass.class.toString()); if(logger.isTraceEnabled()) { logger.tracef("Starting...", subsystem); }
ロギング依存関係の追加
JBoss ロギングクラスが含まれる JAR はorg.jboss.logging
という名前のモジュールにあります。MANIFEST-MF
ファイルは次のようになるはずです。Manifest-Version: 1.0 Dependencies: org.jboss.logging
モジュール依存関係の検索方法に関する詳細は 「クラスローディングの変更によるアプリケーション依存関係の更新」 と 「移行の問題のデバッグと解決」 を参照してください。
3.1.5. アプリケーションパッケージの変更
3.1.5.1. EAR および WAR パッケージの編集
アプリケーションを移行する際、モジュラークラスローディングの変更に伴い、EAR または WAR のパッケージ構造を変更する必要がある場合があります。モジュール依存関係は次の順序でロードされます。
- システム依存関係
- ユーザー依存関係
- ローカルリソース
- デプロイメント間の依存性
手順3.7 アーカイブパッケージの編集
WAR のパッケージ化
WAR は単一のモジュールで、WAR のすべてのクラスは同じクラスローダーでロードされます。そのためWEB-INF/lib/
ディレクトリにパッケージされるクラスは、WEB-INF/classes
ディレクトリのクラスと同様に処理されます。EAR のパッケージ化
EAR は複数のモジュールによって構成されます。EAR/lib/
ディレクトリは単一のモジュールで、EAR 内の各 WAR や EJB jar サブデプロイメントは個別のモジュールになります。依存関係が明示的に定義された場合を除き、クラスは EAR 内の他のモジュールにあるクラスへアクセスすることはできません。サブデプロイメントは常に親モジュール上で自動的な依存関係を持ち、親モジュールはEAR/lib/
ディレクトリのクラスへのアクセスを許可します。しかし、サブデプロイメントはお互いのアクセスを許可するため常に自動的な依存関係を持っているわけではありません。この挙動は次のようにee
サブシステム設定の<ear-subdeployments-isolated>
要素を設定すると制御することができます。<subsystem xmlns="urn:jboss:domain:ee:1.0" > <ear-subdeployments-isolated>false</ear-subdeployments-isolated> </subsystem></subsystem>
デフォルトでは false に設定され、EAR 内の他のサブデプロイメント属するクラスがサブデプロイメントに対して可視化されます。クラスローディングについての詳細は、JBoss Enterprise Application Platform 6 開発ガイドの「クラスローディングとモジュール」の章を参照してください。
3.1.6. データソースおよびリソースアダプター設定の変更
3.1.6.1. 設定変更によるアプリケーションの更新
- アプリケーションがデータソースを使用する場合は 「DataSource 設定の更新」を参照してください。
- アプリケーションが JPA を使用し、現在 Hibernate JAR をバンドルする場合は、 「Hibernate または JPA に対するデータソースの設定」を参照し、移行のオプションについて確認してください。
- アプリケーションがリソースアダプターを使用する場合は、 「リソースアダプター設定の更新」を参照してください。
- 「アプリケーションセキュリティーの変更設定」 を参照し、基本的なセキュリティーの設定変更方法について確認してください。
3.1.6.2. DataSource 設定の更新
以前のバージョンの JBoss Enterprise Application Platform では、ファイル名の最後に *-ds.xml
が付くファイルに JCA データソースの設定が定義されていました。このファイルはサーバーの deploy/
ディレクトリにデプロイされるか、アプリケーションによってパッケージ化されました。JDBC ドライバーは server/lib/
ディレクトリにコピーされるか、アプリケーションの WEB-INF/lib/
ディレクトリにパッケージ化されました。この設定方法は開発環境では今でもサポートされていますが、JBoss の管理ツールではサポートされていないため実稼働環境では推奨されません。
domain/configuration/domain.xml
ファイルに設定されます。Enterprise Application Platform インスタンスがスタンドアロンサーバーとして実行されている場合、データソースは standalone/configuration/standalone.xml
ファイルに設定されます。このように設定されたデータソースは、Web 管理コンソールやコマンドラインインターフェース (CLI) などが含まれる JBoss 管理インターフェースを使用して管理および制御されます。これらのツールはデプロイメントの管理や、管理ドメインで実行されている複数のサーバーの設定を容易にします。
JDBC 4.0 対応のドライバーはデプロイメントまたはコアモジュールとしてインストールすることができます。JDBC 4.0 対応のドライバーには、ドライバークラス名を指定する META-INF/services/java.sql.Driver
ファイルが含まれています。JDBC 4.0 対応でないドライバーには追加の設定が必要となります。ドライバーを JDBC 4.0 対応にする方法や、現在のデータソース設定を Web 管理コンソールや CLI によって管理可能な設定に更新する方法の詳細については 「JDBC ドライバーのインストールと設定」 を参照してください。
「IronJacamar ツールを使用してデータソースとリソースアダプターの設定を移行する」 の通り、IronJacamar ツールを使用してデータソースやリソースアダプター設定を移行することが可能です。このツールは *-ds.xml
スタイルの設定ファイルを JBoss Enterprise Application Platform 6 が想定する形式に変換します。
3.1.6.3. JDBC ドライバーのインストールと設定
次の 2 つの方法の 1 つを用いて JDBC ドライバーをコンテナにインストールすることができます。
- デプロイメントとしてのインストール
- コアモジュールとしてのインストール
domain/configuration/domain.xml
ファイルに設定されます。Enterprise Application Platform インスタンスがスタンドアロンサーバーとして実行されている場合、データソースは standalone/configuration/standalone.xml
ファイルに設定されます。両モードで同じであるスキーマ参照情報は JBoss Enterprise Application Platform 6 インストールの doc/
ディレクトリにあります。ここでは説明上、サーバーがスタンドアロンサーバーとして稼働し、データソースが standalone.xml
ファイルに設定されていると仮定します。
手順3.8 JDBC ドライバーのインストールと設定
JDBC ドライバーのインストール
JDBC ドライバーのデプロイメントとしてのインストール
これはドライバーのインストールに推奨される方法です。JDBC ドライバーがデプロイメントとしてインストールされると、普通の JAR としてデプロイされます。JBoss Enterprise Application Platform インスタンスがスタンドアロンサーバーとして実行されている場合は、 JDBC 4.0 対応の JAR をEAP_HOME/standalone/deployments/
ディレクトリへコピーします。サーバーが管理ドメインとして実行されている場合は、JAR をEAP_HOME/domain/deployments/
ディレクトリへコピーします。スタンドアロンサーバーにデプロイメントとしてインストールされた MySQL JDBC ドライバーの例は次の通りです。$cp mysql-connector-java-5.1.15.jar
EAP_HOME/standalone/deployments/
JDBC 4.0 対応のドライバーは自動的に認識され、名前とバージョンによってシステムへインストールされます。JDBC 4.0 対応の JAR にはドライバーのクラス名を指定するMETA-INF/services/java.sql.Driver
という名前のテキストファイルが含まれてます。ドライバーが 4.0 対応でない場合は、次の方法の 1 つを用いてデプロイ可能にすることができます。java.sql.Driver
ファイルを作成し、META-INF/services/
パス下の JAR に追加します。次の例のように、このファイルにはドライバークラス名が含まれていなければなりません。com.mysql.jdbc.Driver
java.sql.Driver
ファイルをデプロイメントディレクトリに作成します。スタンドアロンサーバーとして実行されている JBoss Enterprise Application Platform 6 のインスタンスの場合、このファイルをEAP_HOME/standalone/deployments/META-INF/services/java.sql.Driver
に置く必要があります。サーバーが管理ドメインで実行されている場合、EAP_HOME/domain/deployments/META-INF/services/java.sql.Driver
に置く必要があります。
この方法の利点は次の通りです。この方法の難点は次の通りです。- モジュールを定義する必要がないため、最も簡単な方法になります。
- サーバーが管理ドメインで実行されている場合、この方法を使用するデプロイメントは自動的にドメインの全サーバーへ伝播されます。そのため、管理者が手作業で ドライバー JAR を配布する必要がありません。
- ドライバーと依存ライセンス JAR を持つ JARなど、JDBC ドライバーが複数の JAR で構成されている場合、ドライバーをデプロイメントとしてインストールすることができません。この場合、JDBC ドライバーをコアモジュールとしてインストールする必要があります。
- ドライバーが JDBC 4.0 対応でない場合、ドライバークラス名が含まれるファイルを作成して JAR へインポートするか、
deployments/
ディレクトリにオーバーレイする必要があります。
コアモジュールとしての JDBC ドライバーのインストール
EAP_HOME/modules/
ディレクトリ下にファイルパス構造を作成します。この構造にはドライバー JAR とモジュールを定義するmodule.xml
ファイルが含まれます。例えば、前述の MySQL JDBC ドライバーを使用して次のようなディレクトリ構造を作成します。EAP_HOME/modules/com/mysql/main/
main/
サブディレクトリに次のmodule.xml
ファイルを作成します。<module xmlns="urn:jboss:module:1.0" name="com.mysql"> <resources> <resource-root path="mysql-connector-java-5.1.15.jar"/> </resources> <dependencies> <module name="javax.api"/> </dependencies> </module>
モジュール名「com.mysql」はこのモジュールのディレクトリ構造と一致します。<dependencies>
要素は、このモジュールの他のモジュールへの依存関係を指定するために使用されます。この場合、全 JDBC データソースの場合と同様に、javax.api
という名前の他のモジュールによって定義される Java JDBC API に依存します。このモジュールはmodules/javax/api/main/
ディレクトリに存在します。注記
module.xml
ファイルの最初に空白文字が存在しないようにしてください。空白文字が存在すると、このドライバーに対して 「New missing/unsatisfied dependencies」エラーが発生します。- MySQL JDBC ドライバー JAR を
EAP_HOME/modules/com/mysql/main/
ディレクトリへコピーします。$cp mysql-connector-java-5.1.15.jar
EAP_HOME/modules/com/mysql/main/
この方法の利点は次の通りです。この方法の難点は次の通りです。- JDBC ドライバーが複数の JAR で構成される場合に唯一使用できる方法です。
- この方法では、ドライバー JAR を変更したりファイルオーバーレイを作成せずに、JDBC 4.0 対応でないドライバーをインストールすることができます。
- モジュールの設定が難しくなります。
- 管理ドメインで実行されている各サーバーへモジュールを手作業でコピーする必要があります。
データソースの設定
データベースドライバーの追加
<driver>
要素を同じファイルの<drivers>
要素に追加します。以前*-ds.xml
ファイルに定義されたデータソース情報と同じ情報が一部含まれます。最初にドライバー JAR が JDBC 4.0 対応であるか判断します。JDBC 4.0 対応の JAR にはドライバークラス名を指定するMETA-INF/services/java.sql.Driver
ファイルが含まれています。サーバーはこのファイルを使用して JAR のドライバークラス名を探します。JDBC 4.0 対応の ドライバーの JAR には既に<driver-class>
要素が指定されているため、この要素は必要ありません。JDBC 4.0 対応 MySQL ドライバーのドライバー要素の例は次の通りです。<driver name="mysql-connector-java-5.1.15.jar" module="com.mysql"/>
JDBC 4.0 対応でないドライバーにはドライバークラス名を指定するMETA-INF/services/java.sql.Driver
がないため、ドライバークラスを識別するために<driver-class>
が必要となります。JDBC 4.0 に対応していないドライバーのドライバー要素の例は次の通りです。<driver name="mysql-connector-java-5.1.15.jar" module="com.mysql"> <driver-class>com.mysql.jdbc.Driver</driver-class></driver>
データソースの作成
standalone.xml
ファイルの<datasources>
セクションに<datasource>
要素を作成します。このファイルには、以前*-ds.xml
に定義されたデータソース情報と同じ情報の多くが含まれています。standalone.xml
ファイルの MySQL データソース要素の例は次の通りです。<datasource jndi-name="java:/YourDatasourceName" pool-name="YourDatasourceName"> <connection-url>jdbc:mysql://localhost:3306/YourApplicationURL</connection-url> <driver>mysql-connector-java-5.1.15.jar</driver> <transaction-isolation>TRANSACTION_READ_COMMITTED</transaction-isolation> <pool> <min-pool-size>100</min-pool-size> <max-pool-size>200</max-pool-size> </pool> <security> <user-name>USERID</user-name> <password>PASSWORD</password> </security> <statement> <prepared-statement-cache-size>100</prepared-statement-cache-size> <share-prepared-statements/> </statement> </datasource>
3.1.6.4. Hibernate または JPA に対するデータソースの設定
アプリケーションが JPA を使用し、現在 Hibernate JAR をバンドルする場合、JBoss Enterprise Application Platform 6 に含まれる Hibernate を使用した方がよい場合があります。このバージョンの Hibernate を使用するには、アプリケーションより古いバージョンの Hibernate バンドルを削除する必要があります。
手順3.9 Hibernate バンドルの削除
- アプリケーションライブラリーフォルダーより Hibernate JAR を削除します。
persistence.xml
ファイルの<hibernate.transaction.manager_lookup_class>
要素は必要がないため、削除またはコメントアウトします。
3.1.6.5. リソースアダプター設定の更新
以前のバージョンのアプリケーションサーバーでは、リソースアダプター設定は、ファイル名の最後に *-ds.xml
が付くファイルで定義されました。JBoss Enterprise Application Platform 6 ではリソースアダプターはサーバー設定ファイルで設定されます。管理ドメインで実行されている場合、設定ファイルは EAP_HOME/domain/configuration/domain.xml
ファイルになります。スタンドアロンサーバーとして実行されている場合、EAP_HOME/standalone/configuration/standalone.xml
ファイルのリソースアダプターを設定します。Resource adapter descriptors のスキーマ参照情報は両モード共通です。
リソースアダプター記述子の情報は、サーバー設定ファイルの次のサブシステム要素下に定義されます。
<subsystem xmlns="urn:jboss:domain:resource-adapters:1.0"/>以前リソースアダプター
*-ds.xml
ファイルに定義された情報と同じものの一部を使用します。
<resource-adapters> <resource-adapter> <archive>multiple-full.rar</archive> <config-property name="Name">ResourceAdapterValue</config-property> <transaction-support>NoTransaction</transaction-support> <connection-definitions> <connection-definition class-name="org.jboss.jca.test.deployers.spec.rars.multiple.MultipleManagedConnectionFactory1" enabled="true" jndi-name="java:/eis/MultipleConnectionFactory1" pool-name="MultipleConnectionFactory1"> <config-property name="Name">MultipleConnectionFactory1Value</config-property> </connection-definition> <connection-definition class-name="org.jboss.jca.test.deployers.spec.rars.multiple.MultipleManagedConnectionFactory2" enabled="true" jndi-name="java:/eis/MultipleConnectionFactory2" pool-name="MultipleConnectionFactory2"> <config-property name="Name">MultipleConnectionFactory2Value</config-property> </connection-definition> </connection-definitions> <admin-objects> <admin-object class-name="org.jboss.jca.test.deployers.spec.rars.multiple.MultipleAdminObject1Impl" jndi-name="java:/eis/MultipleAdminObject1"> <config-property name="Name">MultipleAdminObject1Value</config-property> </admin-object> <admin-object class-name="org.jboss.jca.test.deployers.spec.rars.multiple.MultipleAdminObject2Impl" jndi-name="java:/eis/MultipleAdminObject2"> <config-property name="Name">MultipleAdminObject2Value</config-property> </admin-object> </admin-objects> </resource-adapter> </resource-adapters>
3.1.7. セキュリティーの変更
3.1.7.1. アプリケーションセキュリティーの変更設定
UsersRolesLoginModule
は常にクラスパスのプロパティーファイルを検索しました。以前のバージョンのJBoss Enterprise Application Platform では、EAP_HOME/server/SERVER_NAME/conf/
ディレクトリに置かれたプロパティーファイルはクラスパス上にあり、UsersRolesLoginModule
によって簡単に見つかりました。JBoss Enterprise Application Platform 6 ではディレクトリ構造が変更になりました。プロパティーファイルをアプリケーション内でパッケージ化し、クラスパスで使用できるようにする必要があります。
security-domains
下の新しいセキュリティードメインを standalone/configuration/standalone.xml
または domain/configuration/domain.xml
サーバー設定ファイルに追加します。
<security-domain name="example"> <authentication> <login-module code="UsersRoles" flag="required"> <module-option name="usersProperties" value="${jboss.server.config.dir}/example-users.properties"/> <module-option name="rolesProperties" value="${jboss.server.config.dir}/example-roles.properties"/> </login-module> </authentication> </security-domain>
${jboss.server.config.dir}
は EAP_HOME/standalone/configuration/
ディレクトリを参照します。インスタンスが管理ドメインで実行されている場合、 ${jboss.server.config.dir}
は EAP_HOME/domain/configuration/
ディレクトリを参照します。
JBoss Enterprise Application Platform 6 では、セキュリティードメインの名前の最初に java:/jaas/
が付かないようになりました。
- Web アプリケーションでは
jboss-web.xml
のセキュリティー設定よりこのプレフィックスを削除する必要があります。 - エンタープライズアプリケーションでは、
jboss-ejb3.xml
ファイルのセキュリティードメイン設定よりこのプレフィックスを削除する必要があります。JBoss Enterprise Application Platform 6 ではjboss.xml
はこのファイルに置き換えられました。
3.1.8. JNDI の変更
3.1.8.1. アプリケーションの JNDI 名前空間名の更新
EJB 3.1 は標準化されたグローバル JNDI 名前空間や、Java EE アプリケーションの様々なスコープへマップする複数の関連名前空間を導入しました。移植可能な EE アプリケーションに使用される JNDI 名前空間は java:global
、 java:module
、 java:app
の 3 つです。JNDI ルックアップを使用するアプリケーションを変更し、新しい標準 JNDI 名前空間の慣例に従うようにする必要があります。
手順3.10 JNDI ルックアップの変更
- 「移植可能な JNDI ネーミング構文」 について学ぶ
以前のリリースにおける JNDI 名前空間の例や、 JBoss Enterprise Application Platform 6 で指定する方法については 「以前のリリースにおける JNDI 名前空間の例、また JBoss Enterprise Application Platform 6 での名前空間の指定方法」 を参照してください。
3.1.8.2. 移植可能な JNDI ネーミング構文
論理的な名前空間は 4 つあり、それぞれ独自のスコープを持っています。このうち 3 つは移植可能な JNDI ルックアップに利用されます。以下の表は各名前空間をいつどのように使用するかを説明しています。
表3.1 移植可能な JNDI 名前空間
JNDI 名前空間 | 詳細 |
---|---|
java:global |
この名前空間の名前はアプリケーションサーバーインスタンス内にデプロイされている全アプリケーションで共有されます。この名前空間の名前を使いリモートの EJB を検索します。
以下は java:global 名前空間の例になります。
java:global/jboss-seam-booking/jboss-seam-booking.jar/HotelBookingAction
|
java:module |
この名前空間の名前は、1 つの EJB モジュールにある全エンタープライズ Bean や Web モジュールにある全コンポーネントなど、モジュール内の全コンポーネントで共有されます。
java:module 名前空間の例は次の通りです。
java:module/HotelBookingAction!org.jboss.seam.example.booking.HotelBooking
|
java:app |
この名前空間の名前は、1つのアプリケーション内にある全モジュールのコンポーネントすべてで共有されます。例えば、同じ EAR ファイルにある WAR や EJB jar ファイルは java:app namespace のリソースにアクセスできます。
以下は java:app 名前空間の例になります。
java:app/jboss-seam-booking.jar/HotelBookingAction
|
3.1.8.3. JNDI 名前空間のルールの確認
JBoss Enterprise Application Platform 6 では JNDI 名前空間の名前が改良され、アプリケーションにバインドされた名前に対して一貫した予測可能なルールを提供するだけでなく、将来的に互換性の問題が起こらないよう対処されます。そのため、現在の名前空間が新しいルールに準拠しない場合、問題が発生することがあります。
DefaultDS
やjdbc/DefaultDS
のような修飾されていない相対名は、コンテキストに応じてjava:comp/env
やjava:module/env
、java:jboss/env
のいずれかに相対的に修飾されなければなりません。/jdbc/DefaultDS
などの修飾されていないabsolute
名はjava:jboss/root
名に相対的に修飾されなければなりません。java:/jdbc/DefaultDS
などの修飾されたabsolute
名は、前述の修飾されていないabsolute
名と同様に修飾されなければなりません。- 特殊な
java:jboss
名前空間は AS サーバーインスタンス全体で共有されます。 - プレフィックスが
java:
であるrelative
名は、comp
、module
、app
、global
、 プロプラエタリjboss
の 5 つの名前空間の 1 つでなければなりません。 名前がjava:xxx
で始まり、xxx が前述の 5 つの名前空間と一致しない場合、無効な名前エラーが発生する原因となります。
3.1.8.4. 新しい JNDI 名前空間ルールに準拠するようアプリケーションを変更する
- JBoss Enterprise Application Platform 5.1 の JNDI ルックアップの例は次の通りです。通常、このコードは初期化メソッドに存在します。
private ProductManager productManager; try { context = new InitialContext(); productManager = (ProductManager) context.lookup("OrderManagerApp/ProductManagerBean/local"); } catch(Exception lookupError) { throw new ServletException("Unable to find the ProductManager bean", lookupError); }
ルックアップ名はOrderManagerApp/ProductManagerBean/local
になります。 - 次の例は、JBoss Enterprise Application Platform 6 では同じルックアップがどのようにコード化されるかを表しています。
@EJB(lookup=“java:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager") private ProductManager productManager;
ルックアップ値はメンバー変数として定義され、新しい移植可能なjava:app
JNDI 名前空間名であるjava:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager
が使用されます。
3.1.8.5. 以前のリリースにおける JNDI 名前空間の例、また JBoss Enterprise Application Platform 6 での名前空間の指定方法
表3.2
JBoss Enterprise Application Platform 5.x の名前空間 | JBoss Enterprise Application Platform 6 の名前空間 | 追加コメント |
---|---|---|
OrderManagerApp/ProductManagerBean/local | java:module/ProductManagerBean!services.ejb.ProductManager | EE6 標準のバインディング、同じモジュール内でのみアクセス可能 |
OrderManagerApp/ProductManagerBean/local | java:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager | EE6 標準のバインディング、同じアプリケーション内でのみアクセス可能 |
OrderManagerApp/ProductManagerBean/local | java:global/OrderManagerApp/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager | EE6 標準のバインディング、グローバルにアクセス可能 |
java:comp/UserTransaction | java:comp/UserTransaction | アプリケーションが直接作成するスレッドなど、EE 以外のスレッド対してアクセス可能 |
java:comp/UserTransaction | java:jboss/UserTransaction | グローバルにアクセス可能。java:comp/UserTransaction を利用できない場合に使用。 |
java:/TransactionManager | java:jboss/TransactionManager | |
java:/TransactionSynchronizationRegistry | java:jboss/TransactionSynchronizationRegistry |
3.2. アプリケーションのアーキテクチャーやコンポーネントによって異なる変更
3.2.1. アプリケーションのアーキテクチャーやコンポーネントによって異なる変更の確認
- Hibernate と JPA
- アプリケーションが Hibernate または JPA を使用する場合、アプリケーションを変更する必要があります。
- REST
- アプリケーションが JAX-RS を使用する場合、JBoss Enterprise Application Platform 6 は自動的に RESTEasy を設定するため、手作業で設定する必要がなくなりました。詳細は 「JAX-RS および RESTEasy の変更の設定」 を参照してください。
- LDAP
- JBoss Enterprise Application Platform 6 では LDAP セキュリティーレルムの設定が異なります。アプリケーションが LDAP を使用する場合、 「LDAP セキュリティーレルムの変更設定」 で詳細を確認してください。
- メッセージング
- JBoss Messaging は JBoss Enterprise Application Platform 6 から除外されました。アプリケーションがメッセージングプロバイダーとして JBoss Messaging を使用する場合、 JBoss Messaging コードを HornetQ に置き換える必要があります。詳細は 「HornetQ を JMS プロバイダーとして使用するためにアプリケーションを移行」 を参照してください。
- クラスタリング
- JBoss Enterprise Application Platform 6 ではクラスタリングを有効にする方法が変更になりました。詳細は 「クラスタリングに対するアプリケーションの変更」を参照してください。
- サービススタイルのデプロイメント
- JBoss Enterprise Application Platform 6 はサービススタイル記述子を使用しないようになりましたが、できる限り変更がない状態でコンテナはサービススタイルデプロイメントをサポートします。デプロイメントの情報は 「サービススタイルデプロイメントを使用するアプリケーションの更新」 を参照してください。
- リモート呼び出し
- アプリケーションがリモート呼び出しを行う場合、JNDI を使用して Bean のプロキシをルックアップし、返されたプロキシ上で呼び出しすることができます。必要な構文や名前空間の変更については 「JBoss Enterprise Application Platform 5 にデプロイされ、JBoss Enterprise Application Platform 6 へリモート呼び出しを行うアプリケーションの移行」を参照してください。
- Seam 2.2
- アプリケーションが Seam 2.2 を使用する場合は、 「Seam 2.2 アーカイブの JBoss Enterprise Application Platform 6 への移行」を参照して必要な変更について確認してください。
- Spring
- アプリケーションが Spring を使用する場合は 「Spring アプリケーションの移行」を参照してください。
- 移行に影響する可能性があるその他の変更
- アプリケーションに影響する可能性がある JBoss Enterprise Application Platform 6 のその他の変更については 「移行に影響する可能性があるその他の変更について理解する」を参照してください。
3.2.2. Hibernate および JPA の変更
3.2.2.1. Hibernate や JPA を使用するアプリケーションの更新
アプリケーションが Hibernate や JPAを使用する場合は、次の項を読んで JBoss Enterprise Application Platform 6 への移行に必要な変更を行ってください。
手順3.11
3.2.2.2. Hibernate および JPA を使用するアプリケーションの変更設定
アプリケーションに persistence.xml
ファイルが含まれていたり、コードが @PersistenceContext
アノテーションや @PersistenceUnit
アノテーションを使用する場合、 JBoss Enterprise Application Platform 6 はデプロイメント中にこれを検出し、アプリケーションによって JPA が使用されることを想定します。Hibernate 4 とその他の依存関係の一部を暗黙的にアプリケーションのクラスパスへ追加します。
現在、アプリケーションが Hibernate 3 ライブラリを使用する場合、ほとんどの場合で Hibernate 4 へ切り替えることが可能で、Hibernate 4 を使用して正常に実行されるはずです。しかし、アプリケーションをデプロイする時に ClassNotFoundExceptions
が発生した場合、次の方法の 1 つを用いて問題解決を図ることができます。
重要
手順3.12 タスク
必要な Hibernate 3 の JAR をアプリケーションライブラリへコピーする
見つからないクラスが含まれる特定の Hibernate 3 JAR をアプリケーションのlib/
ディレクトリへコピーするか、他の方法を使用してクラスパスに追加すると問題を解決できることがあります。これにより、Hibernate のバージョンを複数使用することが原因でClassCastExceptions
や他のクラスローディングの問題が発生することがあります。この問題が発生した場合、次の方法で対処する必要があります。Hibernate 3 ライブラリのみを使用するようサーバーへ指示する
JBoss Enterprise Application Platorm 6 では、Hibernate 3.5 (およびそれ以降のバージョン) の永続性プロバイダー jar をアプリケーションと共にパッケージ化することができます。Hibernate 3 ライブラリのみを使用し、Hibernate 4 を除外するようサーバーを指示するには、次のようにjboss.as.jpa.providerModule
をpersistence.xml
のhibernate3-bundled
に設定する必要があります。<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"> <persistence-unit name="plannerdatasource_pu"> <description>Hibernate 3 Persistence Unit.</description> <jta-data-source>java:jboss/datasources/PlannerDS</jta-data-source> <properties> <property name="hibernate.show_sql" value="false" /> <property name="jboss.as.jpa.providerModule" value="hibernate3-bundled" /> </properties> </persistence-unit> </persistence>
Java 永続性 API (JPA) のデプロイヤーによってアプリケーションに永続性プロバイダーがあることが検出され、Hibernate 3 ライブラリが使用されます。Hibernate の 2 次キャッシュの無効化
JBoss Enterprise Application Platorm 6 における Hibernate 3 の 2 次キャッシュの挙動は以前のリリースとは異なっています。アプリケーションを用いて Hibernate の 2 次キャッシュを使用している場合、Hibernate 4 にアップグレードするまで 2 次キャッシュを無効にする必要があります。2 次キャッシュを無効にするには、persistence.xml
ファイルの<hibernate.cache.use_second_level_cache>
をfalse
に設定します。
3.2.2.3. Hibernate JPA 永続ユニットプロパティ
JBoss Enterprise Application Platform 6 は自動的に以下の Hibernate 4.x 設定プロパティを設定します。
表3.3 Hibernate 永続ユニットプロパティ
プロパティ名 | デフォルト値 | 目的 |
---|---|---|
hibernate.id.new_generator_mappings | true | @GeneratedValue(AUTO) を使用して新しいエンティティに対して一意のインデックスキーを生成する場合にこの設定は有効です。新規のアプリケーションのデフォルト値はtrue になるはずです。Hibernate 3.3.x を使用した既存のアプリケーションが継続してシーケンスオブジェクトやテーブルベースのジェネレーターを使用し、後方互換性を維持するにはデフォルト値 false に変更する必要がある場合があります。アプリケーションは persistence.xml ファイルにあるこの値を上書きすることが可能です。
詳細は以下を参照してください。
|
hibernate.transaction.jta.platform | hibernate.ejb.resource_scanner org.hibernate.service.jta.platform.spi.JtaPlatform インターフェースのインスタンス |
このクラスはトランザクションマネージャーやユーザーのトランザクション、トランザクション同期化レジストリを Hibernate に渡します。
|
hibernate.ejb.resource_scanner | org.hibernate.ejb.packaging.Scanner インターフェースのインスタンス |
このクラスは JBoss Enterprise Application Platform のアノテーションインデクサーを使用してより高速なデプロイメントを提供する方法を認識しています。
|
hibernate.transaction.manager_lookup_class |
このプロパティは
hibernate.transaction.jta.platform と競合することがあるため、persistence.xml に存在する場合は削除されます。
| |
hibernate.session_factory_name | QUALIFIED_PERSISTENCE_UNIT_NAME |
アプリケーション名 + 永続ユニット名に設定されます。アプリケーションは異なる値を指定することができますが JBoss Enterprise Application Platform インスタンス上のすべてのアプリケーションデプロイメントで一意となる値でなければなりません。
|
hibernate.session_factory_name_is_jndi | false |
アプリケーションが
hibernate.session_factory_name の値を指定しなかった場合のみ設定されます。
|
hibernate.ejb.entitymanager_factory_name | QUALIFIED_PERSISTENCE_UNIT_NAME |
アプリケーション名 + 永続ユニット名に設定されます。アプリケーションは異なる値を指定することができますが JBoss Enterprise Application Platform インスタンス上のすべてのアプリケーションデプロイメントで一意となる値でなければなりません。
|
new_generator_mappings
is set to true
:
@GeneratedValue(AUTO)
がorg.hibernate.id.enhanced.SequenceStyleGenerator
へマッピングします。@GeneratedValue(TABLE)
がorg.hibernate.id.enhanced.TableGenerator
へマッピングします。@GeneratedValue(SEQUENCE)
がorg.hibernate.id.enhanced.SequenceStyleGenerator
へマッピングします。
new_generator_mappings
is set to false
:
@GeneratedValue(AUTO)
が Hibernate の "native" へマッピングします。@GeneratedValue(TABLE)
がorg.hibernate.id.MultipleHiLoPerTableGenerator
へマッピングします。@GeneratedValue(SEQUENCE)
が Hibernate の "seqhilo" へマッピングします。
3.2.2.4. Hibernate 4 を使用するよう Hibernate 3 のアプリケーションを更新する
Hibernate 4 を使用するようアプリケーションを更新する場合、更新の一部である一般的な更新は、アプリケーションが現在使用する Hibernate のバージョンに関係なく適用されます。その他の更新についてはアプリケーションが現在使用するバージョンを判断する必要があります。
手順3.13 Hibernate 4 を使用するようアプリケーションを更新する
- 自動インクリメントシーケンスジェネレーターのデフォルトの動作は JBoss Enterprise Application Platform 6 で変更になりました。詳細は 「Hibernate アイデンティティの自動生成値の既存動作を保持する」 を参照してください。
- アプリケーションによって現在使用されている Hibernate のバージョンを判断し、下記より適切な更新手順を選択します。
- アプリケーションをクラスター化された環境で実行する場合は 「クラスター環境で稼働する、移行された Seam および Hibernate アプリケーションの永続プロパティーの変更」 を参照してください。
3.2.2.5. Hibernate アイデンティティの自動生成値の既存動作を保持する
@GeneratedValue
を使用する際にアイデンティティやシーケンスカラムの生成方法を指示する hibernate.id.new_generator_mappings
というコアプロパティーが導入されました。JBoss Enterprise Application Platform 6 ではこのプロパティーのデフォルト値は次のように設定されています。
- ネイティブの Hibernate アプリケーションをデプロイする場合、デフォルト値は
false
になります。 - JPA アプリケーションをデプロイする場合、デフォルト値は
true
になります。
@GeneratedValue
アノテーションを使用する新しいアプリケーションでは hibernate.id.new_generator_mappings
プロパティーの値を true
に設定するようにします。この設定は異なるデータベースにおける移植性が高まるため推奨設定となります。ほとんどの場合で効率がよく、場合によっては JPA 2 仕様との互換性に対応します。
- 新しい JPA アプリケーションでは JBoss Enterprise Application Platform 6 の
hibernate.id.new_generator_mappings
プロパティーのデフォルトはtrue
になります。この値は変更しないでください。 - 新しいネイティブの Hibernate アプリケーションでは JBoss Enterprise Application Platform 6 の
hibernate.id.new_generator_mappings
プロパティーのデフォルトはfalse
になります。このプロパティーをtrue
に設定してください。
JBoss Enterprise Application Platform 6 へ移行する時、@GeneratedValue
アノテーションを使用する既存のアプリケーションが同じジェネレーターを使用して新しいエンティティーに対してプライマリキーの値を作成するよう確認してください。
- 既存の JPA アプリケーションでは JBoss Enterprise Application Platform 6 の
hibernate.id.new_generator_mappings
プロパティーのデフォルトはtrue
になります。persistence.xml
ファイルでこのプロパティーをfalse
に設定してください。 - 既存のネイティブ Hibernate アプリケーションでは JBoss Enterprise Application Platform 6 の
hibernate.id.new_generator_mappings
プロパティーのデフォルトはfalse
になります。この値は変更しないでください。
3.2.2.6. Hibernate 3.3.x アプリケーションの Hibernate 4.x への移行
手順3.14
Hibernate の
text
タイプをJDBC LONGVARCHAR
へマッピングするバージョンが 3.5 以前の Hibernate ではtext
型はJDBC CLOB
へマッピングされていました。JavaString
プロパティーをJDBC CLOB
へマッピングするため、新しい Hibernate タイプmaterialized_clob
が Hibernate 4 に追加されました。JDBC CLOB
へのマッピングが目的でtype="text"
と設定されているプロパティーがアプリケーションにある場合は、次の項目の 1 つを実行する必要があります。- アプリケーションが hbm マッピングファイルを使用する場合、プロパティーを
type="materialized_clob"
に変更します。 - アプリケーションがアノテーションを使用する場合、
@Type(type = "text")
を@Lob
に置き換えます。
コードを確認し戻り値型の変更を探す
数値集約の基準射影 (criteria projection) は HQL と同じ値型を返すようになるはずです。その結果、org.hibernate.criterion
の以下の射影からの戻り型が変更されます。CountProjection
、Projections.rowCount()
、Projections.count(propertyName)
、Projections.countDistinct(propertyName)
の変更により、count
およびcount distinct
射影はLong
値を返すようになります。Projections.sum(propertyName)
の変更により、sum
射影はプロパティー型によって異なる値タイプを返すようになります。注記
アプリケーションコードを変更しないと、java.lang.ClassCastException
が発生する原因となります。- Long、Short、Integer、プリミティブ型整数のいずれかとしてマッピングされているプロパティーは Long 値が返されます。
- Float、Double、プリミティブ浮動小数点型のいずれかとしてマッピングされているプロパティーは Double 値が返されます。
3.2.2.7. Hibernate 3.5.x アプリケーションの Hibernate 4.x への移行
手順3.15
AnnotationConfiguration の設定へのマージ
AnnotationConfiguration
は既に廃止されていますが、移行に影響しないようにしなければなりません。今でもhbm.xml
ファイルを使用している場合、JBoss Enterprise Application Platform 6 では 以前のリリースで使用されたorg.hibernate.cfg.DefaultNamingStrategy
ではなく、AnnotationConfiguration
のorg.hibernate.cfg.EJB3NamingStrategy
を使用することに注意してください。そのため、名前付けの不一致が発生する可能性があります。名前付けストラテジーがデフォルトのアソシエーション (要素の多対多やコレクション) テーブルに依存する場合、この問題が発生することがあります。この問題を解決するには、レガシーのorg.hibernate.cfg.DefaultNamingStrategy
を使用するよう Hibernate に指示するためConfiguration#setNamingStrategy
を呼び出してorg.hibernate.cfg.DefaultNamingStrategy#INSTANCE
に渡します。新しい Hibernate DTD ファイル名に適合するよう名前空間を変更する
表3.4
以前の DTD 名前空間 新しい DTD 名前空間 http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd 環境変数の編集
- Oracle で
materialized_clob
またはmaterialized_blob
プロパティーを使用している場合、グローバル環境変数hibernate.jdbc.use_streams_for_binary
を true に設定する必要があります。 - PostgreSQL で
CLOB
またはBLOB
プロパティーを使用している場合、グローバル環境変数hibernate.jdbc.use_streams_for_binary
を false に設定する必要があります。
3.2.2.8. クラスター環境で稼働する、移行された Seam および Hibernate アプリケーションの永続プロパティーの変更
javax.ejb.EJBTransactionRolledbackException: JBAS010361: Failed to deserialize .... Caused by: java.io.InvalidObjectException: could not resolve session factory during session deserialization [uuid=8aa29e74373ce3a301373ce3a44b0000, name=null]このようなエラーを解決するには、設定ファイルのプロパティーを変更する必要があります。ほとんどの場合、設定ファイルは
persistence.xml
ファイルになります。ネイティブの Hibernate API アプリケーションでは hibernate.cfg.xml
ファイルになります。
手順3.16 クラスター環境で稼働する永続プロパティ設定
hibernate.session_factory_name
値を一意名に設定します。この名前は、JBoss Enterprise Application Platform インスタンス上の全アプリケーションデプロイメントにわたって一意である必要があります。例は次の通りです。<property name="hibernate.session_factory_name" value="jboss-seam-booking.ear_session_factory"/>
hibernate.ejb.entitymanager_factory_name
値を一意名に設定します。この名前は、JBoss Enterprise Application Platform インスタンス上の全アプリケーションデプロイメントにわたって一意である必要があります。例は次の通りです。<property name="hibernate.ejb.entitymanager_factory_name" value="seam-booking.ear_PersistenceUnitName"/>
3.2.2.9. JPA 2.0 の仕様に準拠するようアプリケーションを更新する
JPA 2.0 の仕様では、永続コンテキストが JTA トランザクションの外部では伝播できないことが要件となっています。アプリケーションがトランザクションスコープの永続コンテキストのみを使用する場合、JBoss Enterprise Application Platform 6 での挙動は以前のバージョンと変わらないため、変更を加える必要はありません。アプリケーションが拡張永続コンテキスト (XPC) を使用してデータ変更のキューやバッチ処理を許可する場合は、アプリケーションを変更する必要があります。
拡張永続コンテキストを使用するステートフルセッション Bean である Bean1
がアプリケーションにあり、トランザクションスコープの永続コンテキストを使用するステートレスセッション Bean である Bean2
を呼び出す場合、次のような挙動が想定されます。
Bean1
が JTA トランザクションを開始し、JTA トランザクションがアクティブな状態でBean2
メソッドを呼び出す場合、JBoss Enterprise Application Platform 6 における挙動は以前のリリースと変わらないため、変更を加える必要はありません。Bean1
が JTA トランザクションを開始せず、Bean2
メソッドを呼び出す場合、JBoss Enterprise Application Platform 6 は拡張永続コンテキストをBean2
へ伝搬しません。この挙動は拡張永続コンテキストをBean2
へ伝搬した以前のリリースとは異なっています。拡張永続コンテキストがトランザクションエンティティーマネージャーによって Bean へ伝搬されることをアプリケーションが想定している場合、アクティブな JTA トランザクション内で呼び出しを行うようにアプリケーションを変更する必要があります。
3.2.2.10. Infinispan による JPA/Hibernate 2 次キャッシュの置き換え
2 次キャッシュ (2LC) に関し、 JBoss Cache は Infinispan に置き換えられました。これにより、persistence.xml
ファイルの変更が必要になります。使用する 2 次キャッシュが JPA または Hibernate であるかによって、構文は若干異なります。ここで取り上げる例は Hibernate の使用が前提となっています。
persistence.xml
ファイルで 2 次キャッシュのプロパティーを設定する例になります。
<property name="hibernate.cache.region.factory_class" value="org.hibernate.cache.jbc2.JndiMultiplexedJBossCacheRegionFactory"/> <property name="hibernate.cache.region.jbc2.cachefactory" value="java:CacheManager"/> <property name="hibernate.cache.use_second_level_cache" value="true"/> <property name="hibernate.cache.region.jbc2.cfg.entity" value="mvcc-entity"/> <property name="hibernate.cache.region_prefix" value="services"/>次の手順ではこの例を用いて JBoss Enterprise Application Platform 6 で Infinispan を設定します。
手順3.17 Infinispan を使用するよう persistence.xml
ファイルを変更する
JBoss Enterprise Application Platform 6 の JPA アプリケーション向けに Infinispan を設定する
JBoss Enterprise Application Platform 6 で Infinispan を使用し、プロパティーを指定して JPA アプリケーションに対して同じ設定を行う方法は次の通りです。<property name="hibernate.cache.use_second_level_cache" value="true"/>
さらに、次のようにENABLE_SELECTIVE
またはALL
を値としてshared-cache-mode
を指定する必要があります。- デフォルトは
ENABLE_SELECTIVE
で、これが推奨値となります。この場合、エンティティーは明示的にキャッシュ可能であるとマークされない限りキャッシュされません。<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
ALL
の場合、キャッシュ不可能であるとマークされていてもエンティティーは常にキャッシュされます。<shared-cache-mode>ALL</shared-cache-mode>
JBoss Enterprise Application Platform 6 のネイティブ Hibernate アプリケーションに対して Infinispan を設定する
JBoss Enterprise Application Platform 6 で Infinispan を使用し、ネイティブ Hibernate アプリケーションに対して同じ設定を指定する方法は次の通りです。<property name="hibernate.cache.region.factory_class" value="org.jboss.as.jpa.hibernate4.infinispan.InfinispanRegionFactory"/> <property name="hibernate.cache.infinispan.cachemanager" value="java:jboss/infinispan/container/hibernate"/> <property name="hibernate.transaction.manager_lookup_class" value="org.hibernate.transaction.JBossTransactionManagerLookup"/> <property name="hibernate.cache.use_second_level_cache" value="true"/>
また、次の依存関係をMANIFEST.MF
ファイルに追加する必要があります。Manifest-Version: 1.0 Dependencies: org.infinispan, org.hibernate
3.2.2.11. Hibernate キャッシュプロパティー
表3.5 プロパティー
プロパティー名 | 説明 |
---|---|
hibernate.cache.provider_class |
カスタム
CacheProvider のクラス名。
|
hibernate.cache.use_minimal_puts |
ブール変数です。2 次キャッシュの操作を最適化し、読み取りの回数を増やして書き込みを最小限にします。これはクラスター化されたキャッシュで最も便利な設定で、Hibernate 3 ではクラスター化されたキャッシュの実装に対してデフォルトで有効になっています。
|
hibernate.cache.use_query_cache |
ブール変数です。クエリキャッシュを有効にします。各クエリをキャッシュ可能に設定する必要があります。
|
hibernate.cache.use_second_level_cache |
ブール変数です。
<cache> マッピングを指定するクラスに対してデフォルトで有効になっている 2 次 キャッシュを完全に無効にするため使用されます。
|
hibernate.cache.query_cache_factory |
カスタム
QueryCache インターフェースのクラス名です。デフォルトの値はビルトイン StandardQueryCache です。
|
hibernate.cache.region_prefix |
2 次キャッシュのリージョン名に使用するプレフィックスです。
|
hibernate.cache.use_structured_entries |
ブール変数です。人間が解読可能な形式でデータを 2 次キャッシュに保存するよう Hibernate を強制します。
|
hibernate.cache.default_cache_concurrency_strategy | @Cacheable か @Cache が使用される場合に使用するデフォルトの org.hibernate.annotations.CacheConcurrencyStrategy の名前を付与するため使用される設定です。@Cache(strategy="..") を使用してこのデフォルトが上書きされます。
|
3.2.2.12. Hibernate Validator 4 への移行
Hibernate Validator 4.x は、JSR 303 - Bean Validation を実装する完全に新しいコードベースです。Validator 3.x から 4.x への移行プロセスは非常に簡単ですが、アプリケーションの移行時にいくつかの変更を行う必要があります。
手順3.18 以下の 1 つまたは複数のタスクを実行する必要がある場合があります。
デフォルトの ValidatorFactory へのアクセス
JBoss Enterprise Application Platform 6 は、デフォルトの ValidatorFactory をjava:comp/ValidatorFactory
以下にある JNDI コンテキストにバインドします。ライフサイクルでトリガーされた検証の理解
Hibernate Core 4 と組み合わせて使用する場合、ライフサイクルベースの検証は Hibernate Core により自動的に有効になります。- 検証は、エンティティー
INSERT
操作、UPDATE
操作、およびDELETE
操作に対して行われます。 - 次のプロパティーを使用してイベントタイプによってグループが検証されるよう設定することができます。これらのプロパティーの値は、検証するグループの、カンマで区切られた完全修飾クラス名です。
javax.persistence.validation.group.pre-persist
、javax.persistence.validation.group.pre-update
、javax.persistence.validation.group.pre-remove
検証グループは、Bean Validation 仕様の新しい機能です。この新しい機能を使用しない場合は、Hibernate Validator 4 に移行するときに変更を必要としません。 - ライフサイクルベース検証は、
javax.persistence.validation.mode
プロパティーをnone
に設定することにより無効できます。このプロパティーの他の有効値はauto
(デフォルト値)、callback
、およびddl
です。
アプリケーションが手動の検証を使用するよう設定
- 検証を手動で制御する場合、次のいずれかの方法で Validator を作成できます。
getValidator()
メソッドを使用してValidatorFactory
からValidator
インスタンスを作成します。- Validator インスタンスを EJB、CDI Bean、または他の Java EE の挿入可能なリソースに挿入します。
- Validator インスタンスをカスタマイズするために、
ValidatorFactory.usingContext()
により返されたValidatorContext
を使用できます。この API を使用して、カスタムMessageInterpolator
、TraverableResolver
、およびConstraintValidatorFactory
を設定できます。これらのインターフェースは、Bean Validation 仕様で指定され、Hibernate Validator 4 で新しい機能です。
新しい Bean Validation の制約を使用するようコードを変更
Hibernate Validator 4 への移行時に、新しい Bean レベル検証制約では、コードの変更が必要です。- Hibernate Validator 4 にアップグレードする場合は、次のパッケージの制約を使用する必要があります。
javax.validation.constraints
org.hibernate.validator.constraints
- Hibernate Validator 3 に存在していたすべての制約は、Hibernate Validator 4 でも引き続き利用できます。これらを使用するには、指定されたクラスをインポートし、場合によっては、制約パラメーターの名前またはタイプを変更する必要があります。
カスタム制約の使用
Hibernate Validator 3 では、カスタム制約でorg.hibernate.validator.Validator
インターフェースを実装する必要がありました。Hibernate Validator 4 では、javax.validation.ConstraintValidator
インターフェースを実装する必要があります。このインターフェースには、以前のインターフェースと同じinitialize()
メソッドとisValid()
メソッドが含まれますが、メソッドシグネチャーが変更されました。また、代替のDDL
は Hibernate Validator 4 でサポートされなくなりました。
3.2.3. JAX-RS および RESTEasy の変更
3.2.3.1. JAX-RS および RESTEasy の変更の設定
web.xml
ファイルから既存の RESTEasy の設定をすべて削除し、次の 3 つのオプションの 1 つに置き換える必要があります。
- Subclass
javax.ws.rs.core.Application
および@ApplicationPath
annotation アノテーションの使用。これが最も簡単なオプションで、xml の設定が必要ありません。次のようにアプリケーションでjavax.ws.rs.core.Application
をサブクラス化し、 JAX-RS クラスを使用可能にするパスを用いてアノテーションを付けます。@ApplicationPath("/mypath") public class MyApplication extends Application { }
上記の例では、JAX-RS リソースはパス/MY_WEB_APP_CONTEXT/mypath/
で使用できるようになります。注記
パスは/mypath/*
ではなく/mypath
として指定する必要があることに注意してください。最後にフォワードスラッシュやアスタリスクがあってはなりません。 - サブクラス
javax.ws.rs.core.Application
および JAX-RS マッピングの設定にweb.xml
を使用する。@ApplicationPath
アノテーションを使用したくない場合でもjavax.ws.rs.core.Application
をサブクラス化する必要があります。サブクラス化した後にweb.xml
ファイルに JAX-RS マッピングを設定します。public class MyApplication extends Application { }
<servlet-mapping> <servlet-name>com.acme.MyApplication</servlet-name> <url-pattern>/hello/*</url-pattern> </servlet-mapping>
上記の例では、JAX-RS リソースはパス/MY_WEB_APP_CONTEXT/hello
で使用できるようになります。注記
この方法を使用して@ApplicationPath
アノテーションを使用して設定されたアプリケーションパスを上書きすることもできます。 web.xml
ファイルの変更Application
をサブクラス化したくない場合、次のようにweb.xml
ファイルで JAX-RS のマッピングを設定することが可能です。<servlet-mapping> <servlet-name>javax.ws.rs.core.Application</servlet-name> <url-pattern>/hello/*</url-pattern> </servlet-mapping>
上記の例では、JAX-RS リソースはパス/MY_WEB_APP_CONTEXT/hello
で使用できるようになります。注記
このオプションを選択した場合、マッピングの追加のみが必要となります。対応するサーブレットを追加する必要はありません。対応するサーブレットはサーバーによって自動的に追加されるはずです。
3.2.4. LDAP セキュリティーレルムの変更
3.2.4.1. LDAP セキュリティーレルムの変更設定
login-config.xml
ファイルの <application-policy>
要素に設定されていました。JBoss Enterprise Application Platform 6 では、LDAP セキュリティーレルムはサーバー設定ファイルの <security-domain>
要素に設定されています。サーバー設定ファイルはスタンドアロンサーバーでは standalone/configuration/standalone.xml
ファイルになります。サーバーが管理ドメインで実行されている場合、domain/configuration/domain.xml
ファイルがサーバー設定ファイルになります。
login-config.xml
ファイルにある LDAP セキュリティーレルム設定の例は次の通りです。
<application-policy name="mcp_ldap_domain"> <authentication> <login-module code="org.jboss.security.auth.spi.LdapExtLoginModule" flag="required"> <module-option name="java.naming.factory.initial">com.sun.jndi.ldap.LdapCtxFactory</module-option> <module-option name="java.naming.security.authentication">simple</module-option> .... </login-module> </authentication> </application-policy>
<subsystem xmlns="urn:jboss:domain:security:1.0"> <security-domains> <security-domain name="mcp_ldap_domain" type="default"> <authentication> <login-module code="org.jboss.security.auth.spi.LdapLoginModule" flag="required"> <module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"> <module-option name="java.naming.security.authentication" value="simple"> ... </module-option> </module-option> </login-module> </authentication> </security-domain> </security-domains> </subsystem>
注記
<module-option name="java.naming.factory.initial">com.sun.jndi.ldap.LdapCtxFactory</module-option>モジュールオプションは次のように "value=" を用いて要素属性として指定するようになりました。
<module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
3.2.5. HornetQ の変更
3.2.5.1. 既存の JMS メッセージを Enterprise Application Platform 6 へ移行するため JMS ブリッジを設定する
手順3.19 JMS ブリッジの設定
- 次の例に従って、SAR が含まれるように Enterprise Application Platform 5 の deploy ディレクトリにサブディレクトリを作成します。
EAP5_HOME/server/PROFILE_NAME/deploy/myBridge.sar
EAP5_HOME/server/PROFILE_NAME/deploy/myBridge.sar/
にMETA-INF
という名前のサブディレクトリを作成します。- 以下と似た情報が含まれる
jboss-service.xml
ファイルをEAP5_HOME/server/PROFILE_NAME/deploy/myBridge.sar/META-INF/
ディレクトリに作成します。<server> <loader-repository> com.example:archive=unique-archive-name <loader-repository-config>java2ParentDelegation=false</loader-repository-config> </loader-repository> <!-- Enterprise Application Platform 6 JMS Provider --> <mbean code="org.jboss.jms.jndi.JMSProviderLoader" name="jboss.messaging:service=JMSProviderLoader,name=EnterpriseApplicationPlatform6JMSProvider"> <attribute name="ProviderName">EnterpriseApplicationPlatform6JMSProvider</attribute> <attribute name="ProviderAdapterClass">org.jboss.jms.jndi.JNDIProviderAdapter</attribute> <attribute name="FactoryRef">jms/RemoteConnectionFactory</attribute> <attribute name="QueueFactoryRef">jms/RemoteConnectionFactory</attribute> <attribute name="TopicFactoryRef">jms/RemoteConnectionFactory</attribute> <attribute name="Properties"> java.naming.factory.initial=org.jboss.naming.remote.client.InitialContextFactory java.naming.provider.url=remote://EnterpriseApplicationPlatform6host:4447 java.naming.security.principal=jbossuser java.naming.security.credentials=jbosspass </attribute> </mbean> <mbean code="org.jboss.jms.server.bridge.BridgeService" name="jboss.jms:service=Bridge,name=MyBridgeName" xmbean-dd="xmdesc/Bridge-xmbean.xml"> <depends optional-attribute-name="SourceProviderLoader">jboss.messaging:service=JMSProviderLoader,name=JMSProvider</depends> <depends optional-attribute-name="TargetProviderLoader">jboss.messaging:service=JMSProviderLoader,name=EnterpriseApplicationPlatform6JMSProvider</depends> <attribute name="SourceDestinationLookup">/queue/A</attribute> <attribute name="TargetDestinationLookup">jms/queue/test</attribute> <attribute name="QualityOfServiceMode">1</attribute> <attribute name="MaxBatchSize">1</attribute> <attribute name="MaxBatchTime">-1</attribute> <attribute name="FailureRetryInterval">60000</attribute> <attribute name="MaxRetries">-1</attribute> <attribute name="AddMessageIDInHeader">false</attribute> <attribute name="TargetUsername">jbossuser</attribute> <attribute name="TargetPassword">jbosspass</attribute> </mbean> </server>
注記
<load-repository>
は SAR に分離されたクラスローダーが確実に存在するようにします。JNDI ルックアップとブリッジの「ターゲット」の両方に、パスワードが 「jbosspass」であるユーザー 「jbossuser」のセキュリティー認証情報が含まれていることに注意してください。これは、JBoss Enterprise Application Platform 6 はデフォルトで保護されているからです。パスワードが 「jbosspass」であるユーザー「jbossuser」はguest
ロールを持ち、EAP_HOME/bin/add_user.sh
スクリプトを使用してApplicationRealm
に作成されました。 - 次の JAR を
EAP_HOME/modules/
ディレクトリからEAP5_HOME/server/PROFILE_NAME/deploy/myBridge.sar/
ディレクトリへコピーします。 VERSION_NUMBER を JBoss Enterprise Application Platform 6 ディストリビューションの実際のバージョン番号に置き換えてください。org/hornetq/main/hornetq-core-VERSION_NUMBER.jar
org/hornetq/main/hornetq-jms-VERSION_NUMBER.jar
org/jboss/ejb-client/main/jboss-ejb-client-VERSION_NUMBER.jar
org/jboss/logging/main/jboss-logging-VERSION_NUMBER.jar
org/jboss/logmanager/main/jboss-logmanager-VERSION_NUMBER.jar
org/jboss/marshalling/main/jboss-marshalling-VERSION_NUMBER.jar
org/jboss/marshalling/river/main/jboss-marshalling-river-VERSION_NUMBER.jar
org/jboss/remote-naming/main/jboss-remote-naming-VERSION_NUMBER.jar
org/jboss/remoting3/main/jboss-remoting-VERSION_NUMBER.jar
org/jboss/sasl/main/jboss-sasl-VERSION_NUMBER.jar
org/jboss/netty/main/netty-VERSION_NUMBER.jar
org/jboss/remoting3/remote-jmx/main/remoting-jmx-VERSION_NUMBER.jar
org/jboss/xnio/main/xnio-api-VERSION_NUMBER.jar
org/jboss/xnio/nio/main.xnio-nio-VERSION_NUMBER.jar
注記
javax API クラスは Enterprise Application Platform 5.x のクラスと競合するため、単にそのままEAP_HOME/bin/client/jboss-client.jar
をコピーしないようにしてください。
3.2.5.2. HornetQ を JMS プロバイダーとして使用するためにアプリケーションを移行
手順3.20 開始する前に
- クライアントとサーバーをシャットダウンします。
- JBoss Messaging データのバックアップコピーを作成します。
手順3.21 HornetQ へのプロバイダーの変更
設定の転送
最初に、既存の JBoss Messaging 設定を Enterprise Application Platform 設定に転送する必要があります。以下の設定が、 JBoss Mesaging サーバーにあるデプロイメント記述子に存在します。- 接続ファクトリーサービス設定この設定は、 JBoss Messaging サーバーにデプロイされた JMS 接続ファクトリーを定義します。JBoss Messaging は、アプリケーションサーバーのデプロイメントディレクトリにある
connection-factories-service.xml
という名前のファイルで接続ファクトリーを設定します。 - 宛先設定この設定は、JBoss Messaging サーバーでデプロイされた JMS キューおよびトピックを定義します。デフォルトでは、JBoss Messaging は、アプリケーションサーバーのデプロイメントディレクトリにある
destinations-service.xml
という名前のファイルで宛先を設定します。 - メッセージブリッジサービス設定この設定には、JBoss Messaging サーバーでデプロイされたブリッジサービスが含まれます。デフォルトではブリッジがデプロイされないため、デプロイメントファイルの名前は、JBoss Messaging インストールによって異なります。
アプリケーションコードの変更
アプリケーションコードで標準的な JMS を使用する場合は、コードの変更が必要ありません。ただし、アプリケーションが JBoss Messaging に固有な機能を使用する場合は、HornetQ で利用可能な同等の機能を使用するようコードを変更する必要があります。HornetQ でメッセージングを設定する方法の詳細については、 「HornetQ でのメッセージングの設定」 を参照してください。ブリッジおよび JMS 管理オブジェクトの移行
JBoss Messaging は、 Managed Bean サービスを使用してブリッジと接続ファクトリーなどの JMS オブジェクト、キュー、およびトピックを設定します。HornetQ は POJO (Plain Old Java Object) を使用してこれらのオブジェクトを設定します。HornetQ で同等のパラメーターを使用するには設定パラメーターを更新する必要があります。既存のメッセージの移行
JBoss Messaging データベースのすべてのメッセージを HornetQ バインディングに移動します。
3.2.5.3. HornetQ でのメッセージングの設定
standalone.xml
や domain.xml
設定ファイルを手作業で編集せずに永続的な変更を行うことができますが、デフォルト設定ファイルのメッセージングコンポーネントについて理解できると便利です。デフォルトの設定ファイルには、管理ツールを使用するドキュメントの例に参考用の設定ファイルスニペットがあります。
3.2.6. クラスタリングの変更
3.2.6.1. クラスタリングに対するアプリケーションの変更
手順3.22
クラスタリグが有効な状態で JBoss Enterprise Application Platform 6 を起動する
JBoss Enterprise Application Platform 5.x でクラスタリングを有効にするには、次のようにall
プロファイル (またはその派生プロファイル) を使用してサーバーインスタンスを起動する必要がありました。$ EAP5_HOME/bin/run.sh -c all
JBoss Enterprise Application Platform 6 でクラスタリングを有効にする方法は、サーバーがスタンドアロンであるか管理ドメインで実行されているかによって異なります。管理ドメインで実行されているサーバーに対してクラスタリングを有効にする
ドメインコントローラーを使用して起動したサーバーに対してクラスタリングを有効にするには、domain.xml
を更新し、ha
プロファイルとha-sockets
ソケットバインディンググループを使用するサーバーグループを指定します。例は次の通りです。<server-groups> <server-group name="main-server-group" profile="ha"> <jvm name="default"> <heap size="64m" max-size="512m"/> </jvm> <socket-binding-group ref="ha-sockets"/> </server-group> </server-group>
スタンドアロンサーバーに対してクラスタリングを有効にする
スタンドアロンサーバーに対してクラスタリングを有効にするには、次のように適切な設定ファイルを使用してサーバーを起動します。$ EAP_HOME/bin/standalone.sh --server-config=standalone-ha.xml
バインドアドレスの指定
JBoss Enterprise Application Platform 5.x では、通常$ EAP_HOME/bin/run.sh -c all -b 192.168.0.2
のように-b
コマンドライン引数を用いてクラスタリングに使用するバインドアドレスを指定しました。JBoss Enterprise Application Platform 6 では、JBoss Enterprise Application Platform 6 の設定ファイル内の関連するソケットバインディングによってバインドアドレスが明示的に定義されます。ドメインコントローラーを用いて起動したサーバーの場合、バインドアドレスはdomain/configuration/host.xml
ファイル内で指定されます。スタンドアロンサーバーの場合、バインドアドレスはstandalone-ha.xml
ファイル内で指定されます。<interfaces> <interface name="management"> <inet-address value="192.168.0.2"/> </interface> <interface name="public"> <inet-address value="192.168.0.2"/> </interface> </interfaces>
<socket-binding-groups> <socket-binding-group name="ha-sockets" default-interface="public"> <!-- ... --> </socket-binding-group> </socket-binding-groups>
上記の例では、ha-sockets
ソケットバインディンググループ内のすべてのソケットに対するデフォルトインターフェースにpublic
インターフェースが指定されています。マルチキャストアドレスおよびポートの指定
JBoss Enterprise Application Platform 5.x では、次のようにコマンドライン引数-u
を使用してクラスター内の通信に使用されるマルチキャストアドレスを指定することができました。 同様に、引数-m
を使用してクラスター内の通信に使用されるポートを指定することができました。$ EAP_HOME/bin/run.sh -c all -u 228.11.11.11 -m 45688
JBoss Enterprise Application Platform 6 では、クラスター間の通信に使用されるマルチキャストアドレスとポートは、関連する JGroups プロトコルスタックによって参照されるソケットバインディングによって次のように定義されます。<subsystem xmlns="urn:jboss:domain:jgroups:1.0" default-stack="udp"> <stack name="udp"> <transport type="UDP" socket-binding="jgroups-udp"/> <!-- ... --> </stack> </subsystem>
<socket-binding-groups> <socket-binding-group name="ha-sockets" default-interface="public"> <!-- ... --> <socket-binding name="jgroups-udp" port="55200" multicast-address="228.11.11.11" multicast-port="45688"/> <!-- ... --> </socket-binding-group> </socket-binding-groups>
コマンドラインでマルチキャストアドレスとポートを指定したい場合、マルチキャストアドレスとポートをシステムプロパティーとして定義した後、サーバー起動時にこれらのプロパティーをコマンドライン上で使用します。次の例では、jboss.mcast.addr
はマルチキャストアドレスの変数名、jboss.mcast.port
はポートの変数名になります。<socket-binding name="jgroups-udp" port="55200" multicast-address="${jboss.mcast.addr:230.0.0.4}" multicast-port="${jboss.mcast.port:45688}"/>
その後、次のコマンドライン引数を使用してサーバーを起動できます。$ EAP_HOME/bin/domain.sh -Djboss.mcast.addr=228.11.11.11 -Djboss.mcast.port=45688
代替のプロトコルスタックの使用
JBoss Enterprise Application Platform 5.x では、jboss.default.jgroups.stack
システムプロパティーを使用してすべてのクラスタリングサービスに使用されるデフォルトのプロトコルスタックを操作することができました。$ EAP_HOME/bin/run.sh -c all -Djboss.default.jgroups.stack=tcp
JBoss Enterprise Application Platform 6 では、domain.xml
またはstandalone-ha.xml
内の JGroups サブシステムによってデフォルトのプロトコルスタックが定義されます。<subsystem xmlns="urn:jboss:domain:jgroups:1.0" default-stack="udp"> <stack name="udp"> <!-- ... --> </stack> </subsystem>
3.2.6.2. HA シングルトンの実装
JBoss Enterprise Application Platform 5 では、HA シングルトンアーカイブは他のデプロイメントとは別に deploy-hasingleton/
ディレクトリにデプロイされていました。これは自動デプロイメントが発生しないようにするためで、また確実に HASingletonDeployer サービスがデプロイメントを制御し、クラスターのマスターノードのみにアーカイブがデプロイされるようにするための処置でした。ホットデプロイメント機能がなかったため、再デプロイメントにはサーバーの再起動が必要でした。また、マスターノードに障害が発生し、他のノードがマスターとして引き継ぐ必要がある場合、シングルトンサービスはサービスを提供するためデプロイメントプロセス全体を実行する必要がありました。
手順3.23 HA シングルトンサービスの実装
HA シングルトンサービスアプリケーションの作成
シングルトンサービスとしてデプロイされる SingletonService デコレーターでラッピングされたサービスの簡単な例は次の通りです。シングルトンサービスを作成します。
package com.mycompany.hasingleton.service.ejb; import java.util.concurrent.atomic.AtomicBoolean; import java.util.logging.Logger; import org.jboss.as.server.ServerEnvironment; import org.jboss.msc.inject.Injector; import org.jboss.msc.service.Service; import org.jboss.msc.service.ServiceName; import org.jboss.msc.service.StartContext; import org.jboss.msc.service.StartException; import org.jboss.msc.service.StopContext; import org.jboss.msc.value.InjectedValue; /** * @author <a href="mailto:wfink@redhat.com">Wolf-Dieter Fink</a> */ public class EnvironmentService implements Service<String> { private static final Logger LOGGER = Logger.getLogger(EnvironmentService.class.getCanonicalName()); public static final ServiceName SINGLETON_SERVICE_NAME = ServiceName.JBOSS.append("quickstart", "ha", "singleton"); /** * A flag whether the service is started. */ private final AtomicBoolean started = new AtomicBoolean(false); private String nodeName; private final InjectedValue<ServerEnvironment> env = new InjectedValue<ServerEnvironment>(); public Injector<ServerEnvironment> getEnvInjector() { return this.env; } /** * @return the name of the server node */ public String getValue() throws IllegalStateException, IllegalArgumentException { if (!started.get()) { throw new IllegalStateException("The service '" + this.getClass().getName() + "' is not ready!"); } return this.nodeName; } public void start(StartContext arg0) throws StartException { if (!started.compareAndSet(false, true)) { throw new StartException("The service is still started!"); } LOGGER.info("Start service '" + this.getClass().getName() + "'"); this.nodeName = this.env.getValue().getNodeName(); } public void stop(StopContext arg0) { if (!started.compareAndSet(true, false)) { LOGGER.warning("The service '" + this.getClass().getName() + "' is not active!"); } else { LOGGER.info("Stop service '" + this.getClass().getName() + "'"); } } }
- サーバー起動時にサービスを SingletonService として開始するシングルトン EJB を作成します。
package com.mycompany.hasingleton.service.ejb; import java.util.Collection; import java.util.EnumSet; import javax.annotation.PostConstruct; import javax.annotation.PreDestroy; import javax.ejb.Singleton; import javax.ejb.Startup; import org.jboss.as.clustering.singleton.SingletonService; import org.jboss.as.server.CurrentServiceContainer; import org.jboss.as.server.ServerEnvironment; import org.jboss.as.server.ServerEnvironmentService; import org.jboss.msc.service.AbstractServiceListener; import org.jboss.msc.service.ServiceController; import org.jboss.msc.service.ServiceController.Transition; import org.jboss.msc.service.ServiceListener; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * A Singleton EJB to create the SingletonService during startup. * * @author <a href="mailto:wfink@redhat.com">Wolf-Dieter Fink</a> */ @Singleton @Startup public class StartupSingleton { private static final Logger LOGGER = LoggerFactory.getLogger(StartupSingleton.class); /** * Create the Service and wait until it is started.<br/> * Will log a message if the service will not start in 10sec. */ @PostConstruct protected void startup() { LOGGER.info("StartupSingleton will be initialized!"); EnvironmentService service = new EnvironmentService(); SingletonService<String> singleton = new SingletonService<String>(service, EnvironmentService.SINGLETON_SERVICE_NAME); // if there is a node where the Singleton should deployed the election policy might set, // otherwise the JGroups coordinator will start it //singleton.setElectionPolicy(new PreferredSingletonElectionPolicy(new NamePreference("node2/cluster"), new SimpleSingletonElectionPolicy())); ServiceController<String> controller = singleton.build(CurrentServiceContainer.getServiceContainer()) .addDependency(ServerEnvironmentService.SERVICE_NAME, ServerEnvironment.class, service.getEnvInjector()) .install(); controller.setMode(ServiceController.Mode.ACTIVE); try { wait(controller, EnumSet.of(ServiceController.State.DOWN, ServiceController.State.STARTING), ServiceController.State.UP); LOGGER.info("StartupSingleton has started the Service"); } catch (IllegalStateException e) { LOGGER.warn("Singleton Service {} not started, are you sure to start in a cluster (HA) environment?",EnvironmentService.SINGLETON_SERVICE_NAME); } } /** * Remove the service during undeploy or shutdown */ @PreDestroy protected void destroy() { LOGGER.info("StartupSingleton will be removed!"); ServiceController<?> controller = CurrentServiceContainer.getServiceContainer().getRequiredService(EnvironmentService.SINGLETON_SERVICE_NAME); controller.setMode(ServiceController.Mode.REMOVE); try { wait(controller, EnumSet.of(ServiceController.State.UP, ServiceController.State.STOPPING, ServiceController.State.DOWN), ServiceController.State.REMOVED); } catch (IllegalStateException e) { LOGGER.warn("Singleton Service {} has not be stopped correctly!",EnvironmentService.SINGLETON_SERVICE_NAME); } } private static <T> void wait(ServiceController<T> controller, Collection<ServiceController.State> expectedStates, ServiceController.State targetState) { if (controller.getState() != targetState) { ServiceListener<T> listener = new NotifyingServiceListener<T>(); controller.addListener(listener); try { synchronized (controller) { int maxRetry = 2; while (expectedStates.contains(controller.getState()) && maxRetry > 0) { LOGGER.info("Service controller state is {}, waiting for transition to {}", new Object[] {controller.getState(), targetState}); controller.wait(5000); maxRetry--; } } } catch (InterruptedException e) { LOGGER.warn("Wait on startup is interrupted!"); Thread.currentThread().interrupt(); } controller.removeListener(listener); ServiceController.State state = controller.getState(); LOGGER.info("Service controller state is now {}",state); if (state != targetState) { throw new IllegalStateException(String.format("Failed to wait for state to transition to %s. Current state is %s", targetState, state), controller.getStartException()); } } } private static class NotifyingServiceListener<T> extends AbstractServiceListener<T> { @Override public void transition(ServiceController<? extends T> controller, Transition transition) { synchronized (controller) { controller.notify(); } } } }
クライアントよりサービスへアクセスするためステートレスセッション Bean を作成します。
package com.mycompany.hasingleton.service.ejb; import javax.ejb.Stateless; import org.jboss.as.server.CurrentServiceContainer; import org.jboss.msc.service.ServiceController; import org.slf4j.Logger; import org.slf4j.LoggerFactory; /** * A simple SLSB to access the internal SingletonService. * * @author <a href="mailto:wfink@redhat.com">Wolf-Dieter Fink</a> */ @Stateless public class ServiceAccessBean implements ServiceAccess { private static final Logger LOGGER = LoggerFactory.getLogger(ServiceAccessBean.class); public String getNodeNameOfService() { LOGGER.info("getNodeNameOfService() is called()"); ServiceController<?> service = CurrentServiceContainer.getServiceContainer().getService( EnvironmentService.SINGLETON_SERVICE_NAME); LOGGER.debug("SERVICE {}", service); if (service != null) { return (String) service.getValue(); } else { throw new IllegalStateException("Service '" + EnvironmentService.SINGLETON_SERVICE_NAME + "' not found!"); } } }
SingletonService のビジネスロジックインターフェースを作成します。
package com.mycompany.hasingleton.service.ejb; import javax.ejb.Remote; /** * Business interface to access the SingletonService via this EJB * * @author <a href="mailto:wfink@redhat.com">Wolf-Dieter Fink</a> */ @Remote public interface ServiceAccess { public abstract String getNodeNameOfService(); }
クラスタリングが有効な状態で各 Jboss Enterprise Application Platform 6 インスタンスを起動する
クラスターを有効化する方法は、サーバーがスタンドアローンであるか管理ドメインで実行されているかによって異なります。管理ドメインで実行されているサーバーに対してクラスタリングを有効にする
ドメインコントローラーを使用して起動したサーバーに対してクラスタリングを有効にするには、domain.xml
を更新し、ha
プロファイルとha-sockets
ソケットバインディンググループを使用するようサーバーグループを指定します。例は次の通りです。<server-groups> <server-group name="main-server-group" profile="ha"> <jvm name="default"> <heap size="64m" max-size="512m"/> </jvm> <socket-binding-group ref="ha-sockets"/> </server-group> </server-groups>
次のようにhost.xml
ファイルを変更します。<servers> <server name="server-one" group="main-server-group" auto-start="false"/> <server name="server-two" group="distinct2"> <socket-bindings port-offset="100"/> </server> <servers>
その後、次のようにサーバーを起動します。- Linux では
EAP_HOME/bin/domain.sh
と入力します。 - Microsoft Windows では
EAP_HOME\bin\domain.bat
と入力します。
スタンドアローンサーバーに対してクラスタリングを有効にする
スタンドアローンサーバーに対してクラスタリングを有効にするには、次のようにノード名とstandalone-ha.xml
設定ファイルを使用してサーバーを起動します。- Linux では
EAP_HOME/bin/standalone.sh --server-config=standalone-ha.xml -Djboss.node.name=UNIQUE_NODE_NAME
と入力します。 - Microsoft Windows では
EAP_HOME\bin\standalone.bat --server-config=standalone-ha.xml -Djboss.node.name=UNIQUE_NODE_NAME
と入力します。
注記
1 つのマシン上で複数のサーバーが実行されている時にポートの競合が発生しないようにするため、別のインターフェースでバインドするように各サーバーインスタンスに対してstandalone-ha.xml
ファイルを設定します。または、コマンドラインで-Djboss.socket.binding.port-offset=100
のような引数を使用し、ポートオフセットを持つ後続のサーバーインスタンスを開始して対応することも可能です 。アプリケーションをサーバーにデプロイする
Maven を使用してアプリケーションをデプロイする場合は、次の Maven コマンドを使用してデフォルトのポートで稼働しているサーバーへデプロイします。mvn clean install jboss-as:deploy
追加のサーバーをデプロイするには、サーバー名とポート番号をコマンドラインに渡します。mvn clean package jboss-as:deploy -Ddeploy.hostname=localhost -Ddeploy.port=10099
3.2.7. サービススタイルデプロイメントの変更
3.2.7.1. サービススタイルデプロイメントを使用するアプリケーションの更新
JBoss Enterprise Application Platform 6 はサービススタイル記述子を使用しないようになりましたが、できる限り変更がない状態でコンテナはサービススタイルデプロイメントをサポートします。そのため、JBoss Enterprise Application 5.x アプリケーションの jboss-service.xml
または jboss-beans.xml
デプロイメント記述子を使用した場合、JBoss Enterprise Application Platform 6 へ変更をほとんどまたは全く加えなくても実行できるはずです。継続してファイルを EAR や SAR にパッケージ化することが可能ですが、ファイルを直接 deployments ディレクトリに置くこともできます。スタンドアロンサーバーをを実行している場合、deployments ディレクトリは EAP_HOME/standalone/deployments/
になります。管理ドメインを実行している場合、 deployments フォルダーは EAP_HOME/domain/deployments/
になります。
3.2.8. リモート呼び出しの変更
3.2.8.1. JBoss Enterprise Application Platform 5 にデプロイされ、JBoss Enterprise Application Platform 6 へリモート呼び出しを行うアプリケーションの移行
JBoss Enterprise Application Platform 6 では、次の 2 つの方法でサーバーへリモート呼び出しすることができます。
- 新しい JBoss 固有の EJB クライアント API を使用して呼び出しを行う。
- JNDI を使用して Bean のプロキシをルックアップし、返されたプロキシ上で呼び出しを行う。
ejb:
NAMESPACE_NAME を使用して EJB へリモートアクセスします。ステートレス Bean の場合、構文は次のようになります。
ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>ステートフル Bean の場合は次のようになります。
ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>?stateful
<app-name>
- デプロイされた EJB のアプリケーション名。通常、.ear サフィックスを抜かした ear 名になりますが、application.xml ファイルで名前が上書きされる場合があります。アプリケーションが .ear としてデプロイされていない場合、この値は空の文字列となります。この例は EAR としてデプロイされていないことを仮定します。<module-name>
- サーバー上のデプロイされた EJB のモジュール名。通常、.jar サフィックスを除いた EJB デプロイメントの jar 名になりますが、ejb-jar.xml を使用して名前が上書きされる場合があります。この例では、EJB が jboss-as-ejb-remote-app.jar にデプロイされていることを仮定しているため、モジュール名は jboss-as-ejb-remote-app になります。<distinct-name>
- EJB の任意の distinct name です。この例では distinct name は使用しないため、空の文字列を使用します。<bean-name>
- デフォルトでは Bean 実装クラスの簡単なクラス名になります。<fully-qualified-classname-of-the-remote-interface>
- リモートビューの完全修飾クラス名。
次のステートレス EJB を JBoss Enterprise Application 6 サーバーにデプロイしたことにします。これにより、Bean のリモートビューが公開されます。
@Stateless @Remote(RemoteCalculator.class) public class CalculatorBean implements RemoteCalculator { @Override public int add(int a, int b) { return a + b; } @Override public int subtract(int a, int b) { return a - b; } }JBoss Enterprise Application Platform 5 では、クライアント EJB のルックアップと呼び出しが次のようにコード化されていました。
InitialContext ctx = new InitialContext(); RemoteCalculator calculator = (RemoteCalculator) ctx.lookup("CalculatorBean/remote"); int a = 204; int b = 340; int sum = calculator.add(a, b);JBoss Enterprise Application Platform 6 では前述の情報を使用して、クライアントのルックアップと呼び出しが次のようにコード化されます。
final Hashtable jndiProperties = new Hashtable(); jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); final Context context = new InitialContext(jndiProperties); final String appName = ""; final String moduleName = "jboss-as-ejb-remote-app"; final String distinctName = ""; final String beanName = CalculatorBean.class.getSimpleName(); final String viewClassName = RemoteCalculator.class.getName(); final RemoteCalculator statelessRemoteCalculator = (RemoteCalculator) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName); int a = 204; int b = 340; int sum = statelessRemoteCalculator.add(a, b);クライアントがステートフル EJB にアクセスしている場合、次のようにコンテキストルックアップの最後に “?stateful” を追加する必要があります。
final RemoteCalculator statefulRemoteCalculator = (RemoteCalculator) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName + "?stateful")
3.2.8.2. JNDI を使用したリモートでのセッション Bean の呼び出し
remote-ejb
クイックスタートには、この機能を実証する Maven プロジェクトが含まれています。デプロイするセッション Bean のプロジェクトとリモートクライアントのプロジェクトの両方が含まれています。下記のコード例はリモートクライアントのプロジェクトから引用されています。
前提条件
- Maven プロジェクトが作成され、使用できる状態である。
- JBoss Enterprise Application Platform 6 の Maven リポジトリが既に追加されている。
- 呼び出しするセッション Bean が既にデプロイされている。
- デプロイされたセッション Bean がリモートビジネスインターフェースを実装する。
- セッション Bean のリモートビジネスインターフェースは Maven 依存関係として使用できる。リモートビジネスインターフェースが JAR ファイルとしてのみ使用できる場合は、JAR をアーティファクトとして Maven リポジトリに追加することが推奨されます。http://maven.apache.org/plugins/maven-install-plugin/usage.html にある Maven ドキュメントの
install:install-file
ゴールを参照してください。 - セッション Bean をホストするサーバーのホスト名と JNDI ポートを覚えておく必要があります。
手順3.24 セッション Bean のリモート呼び出しに対する Maven プロジェクト設定の追加
必要なプロジェクト依存関係の追加
必要な依存関係が含まれるようにするため、プロジェクトのpom.xml
を更新する必要があります。jboss-ejb-client.properties
ファイルの追加JBoss EJB クライアント API は、JNDI サービスの接続情報が含まれるjboss-ejb-client.properties
という名前のプロジェクトのルートにファイルがあることを想定します。このファイルを以下の内容と共にプロジェクトのsrc/resources/
ディレクトリに追加します。# Set this to true for SSL remote.connectionprovider.create.options.org.xnio.Options.SSL_ENABLED=false remote.connections=default # Uncomment this for SSL # remote.connection.default.connect.options.org.xnio.Options.SSL_STARTTLS=true remote.connection.default.host=localhost remote.connection.default.port = 4447 remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false # Add other SASL options if required # remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOANONYMOUS=false # remote.connection.default.connect.options.org.xnio.Options.SASL_POLICY_NOPLAINTEXT=false # remote.connection.default.connect.options.org.xnio.Options.SASL_DISALLOWED_MECHANISMS=JBOSS-LOCAL-USER
ホスト名とポートを変更してサーバーと一致するようにします。4447
がデフォルトのポート番号です。 安全な接続の場合、SSL_ENABLED
行をtrue
に設定し、SSL_STARTTLS
行をアンコメントします。コンテナ内のリモーティングインターフェースは同じポートを使用して安全な接続と安全でない接続をサポートします。リモートビジネスインターフェースの依存関係の追加
セッション Bean のリモートビジネスインターフェースに対するpom.xml
に Maven の依存関係を追加します。<dependency> <groupId>org.jboss.as.quickstarts</groupId> <artifactId>jboss-as-ejb-remote-server-side</artifactId> <type>ejb-client</type> <version>7.1.0.CR1-SNAPSHOT</version> </dependency>
手順3.25 JNDI を使用して Bean プロキシを取得し、Bean のメソッドを呼び出す
チェック例外の処理
次のコードに使用されるメソッドの 2 つ (InitialContext()
およびlookup()
) は、タイプjavax.naming.NamingException
のチェック例外を持っています。これらのメソッド呼び出しはNamingException
をキャッチする try/catch ブロックか、NamingException
のスローが宣言されたメソッドで囲まなければなりません。remote-ejb
クイックスタートではNamingException
のスローが宣言されたメソッドで囲む方法を使用します。JNDI コンテキストの作成
JNDI コンテキストオブジェクトはサーバーよりリソースを要求するメカニズムを提供します。次のコードを使用して JNDI コンテキストを作成します。final Hashtable jndiProperties = new Hashtable(); jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); final Context context = new InitialContext(jndiProperties);
JNDI サービスの接続プロパティーはjboss-ejb-client.properties
ファイルより読み取られます。JNDI コンテキストの lookup() メソッドを使用した Bean プロキシの取得
Bean プロキシのlookup()
メソッドを呼び出し、必要なセッション Bean の JNDI 名 へ渡します。これにより、呼び出したいメソッドが含まれるリモートビジネスインターフェースのタイプへキャストされなければならないオブジェクトが返されます。final RemoteCalculator statelessRemoteCalculator = (RemoteCalculator) context.lookup( "ejb:/jboss-as-ejb-remote-app/CalculatorBean!" + RemoteCalculator.class.getName() );
セッション Bean の JNDI 名は特別な構文によって定義されます。呼び出しメソッド
プロキシ Bean オブジェクトを取得したため、リモートビジネスインターフェースに含まれるすべてのメソッドを呼び出しすることができます。int a = 204; int b = 340; System.out.println("Adding " + a + " and " + b + " via the remote stateless calculator deployed on the server"); int sum = statelessRemoteCalculator.add(a, b); System.out.println("Remote calculator returned sum = " + sum);
メソッド呼び出し要求が実行されるサーバー上で、プロキシ Bean がメソッド呼び出し要求をセッション Bean へ渡します。結果はプロキシ Bean へ返され、プロキシ Bean によって結果が呼び出し側へ返されます。プロキシ Bean とリモートセッション Bean 間の通信は呼び出し側に透過的です。
3.2.9. EJB 2.x の変更
3.2.9.1. EJB 2.x を使用するアプリケーションの更新
手順3.26 JBoss Enterprise Application Platform 6 で EJB 2.x を起動する
JNDI 名前空間の新しいルールを使用するようコードを変更する
EJB 3.0 と同様に、EJB 2.x でも完全な JNDI プレフィックスを使用する必要があります。新しい JNDI 名前空間ルールやコード例の詳細は 「アプリケーションの JNDI 名前空間名の更新」 を参照してください。以前のリリースから JNDI 名前空間を更新する方法を表す例は 「以前のリリースにおける JNDI 名前空間の例、また JBoss Enterprise Application Platform 6 での名前空間の指定方法」 にあります。JBoss AOP インターセプターの置換
JBoss AOP (Aspect Oriented Programming) は JBoss Enterprise Application Platform 6 には含まれていません。以前のリリースでは、JBoss AOP は EJB コンテナによって使用されていましたが、Enterprise Application Platform 6 では EJB コンテナは新しいメカニズムを使用します。アプリケーションが JBoss AOP を使用する場合、次のようにアプリケーションコードを変更する必要があります。ejb3-interceptors-aop.xml
で設定された標準的な EJB3 設定は、サーバー設定ファイルで設定されるようになりました。スタンドアロンサーバーの場合、このファイルはstandalone/configuration/standalone.xml
ファイルになります。サーバーが管理ドメインで実行されている場合はdomain/configuration/domain.xml
ファイルになります。- AOP インターセプターを EJB レイヤーへ統合するアプリケーションは、 EJB3 インターセプターと CDI を使用するよう再設計する必要があります。サーバー側のインターセプターは EJB3 インターセプターへ変更することができますが、Enterprise Application Platform 6 ではクライアント側のインターセプターがありません。
jboss-web.xml
ファイル記述子の変更各<ejb-ref>
に対する<jndi-name>
を変更し、新しい JNDI 完全修飾ルックアップ形式を使用するようにします。jboss.xml
デプロイメント記述子ファイルの置換Java Enterprise Edition (EE) によって定義されるejb3-jar.xml
デプロイメント記述子によって提供される機能を上書きしたり追加するため、jboss.xml
はjboss-ejb3.xml
デプロイメント記述子に置き換えられました。この新ファイルはjboss.xml
との互換性がないため、jboss.xml
はデプロイメントで無視されます。完全プロファイルでのサーバーの起動
EJB 2.x には Java Enterprise Edition 6 の完全プロファイルが必要となります。完全プロファイルで JBoss Enterprise Application Platform 6 を起動するには、サーバーの起動時に引数-c standalone-full.xml
をコマンドラインに渡します。
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/
ディレクトリにコピーする必要があります。
重要
手順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 上にデプロイされ、正常に実行されます。
3.2.10.2. Seam 2.2 アーカイブの移行の問題
- Seam 2.2 Drools と Java 7 の互換性がない
- Seam 2.2 Drools と Java 7 は互換性がなく、エラー org.drools.RuntimeDroolsException: value '1.7' is not a valid language level が発生します。
- Seam 2.2.5 の署名された
cglib.jar
によって Spring の例が動作しない - Enterprise Application Platform 5 の Seam 2.2.5 に含まれる署名された
cglib.jar
を使用して Spring の例が実行されると、次のルート原因で実行に失敗します。java.lang.SecurityException: class "org.jboss.seam.example.spring.UserService$$EnhancerByCGLIB$$7d6c3d12"'s signer information does not match signer information of other classes in the same package
この問題を回避するには、次のようにcglib.jar
を無署名にします。zip -d $SEAM_DIR/lib/cglib.jar META-INF/JBOSSCOD\*
- Seambay の例が
NotLoggedInException
によって失敗する - SOAPRequestHandler のメッセージを処理する際に SOAP メッセージのヘッダーが null であるため、conversation ID が設定されないことがこの問題の原因です。この問題を回避するには、https://issues.jboss.org/browse/JBPAPP-8376 の記述通りに
org.jboss.seam.webservice.SOAPRequestHandler.handleOutbound
を上書きします。 - Seambay の例が
UnsupportedOperationException
: no transaction によって失敗する - JBoss Enterprise Application Platform 6 における UserTransaction の JNDI 名の変更がこのバグの原因です。この問題を回避するには https://issues.jboss.org/browse/JBPAPP-8322 の記述通りに
org.jboss.seam.transaction.Transaction.getUserTransaction
を上書きします。 - Seambay の例が
NotLoggedInException
によって失敗する - SOAPRequestHandler のメッセージを処理する際に SOAP メッセージのヘッダーが null であるため、conversation ID が設定されないことがこの問題の原因です。この問題を回避するには、https://issues.jboss.org/browse/JBPAPP-8376 の記述通りに
org.jboss.seam.webservice.SOAPRequestHandler.handleOutbound
を上書きします。 - Tasks の例が
org.jboss.resteasy.spi.UnhandledException
: Unable to unmarshall request body をスローする - このバグの原因は Enterprise Application Platform 5.1.2 に含まれる seam-resteasy-2.2.5 と、JBoss Enterprise Application Platform 6 に含まれる RESTEasy 2.3.1.GA の互換性がないことです。この問題を回避するには、https://issues.jboss.org/browse/JBPAPP-8315 の通り
jboss-deployment-structure.xml
を使用してメインデプロイメントより resteasy-jaxrs、resteasy-jettison-provider、resteasy-jaxb-provider を除外し、jboss-seam-tasks.war
より resteasy-jaxrs、resteasy-jettison-provider、resteasy-jaxb-provider、resteasy-yaml-provider を除外します。その後、EAR に Seam 2.2 とバンドルされる RESTEasy ライブラリが含まれるようにする必要があります。 - AJAX の要求中に
org.jboss.seam.core.SynchronizationInterceptor
とステートフルコンポーネントインスタンスの EJB ロックがデッドロックする - 「Caused by javax.servlet.ServletException with message: "javax.el.ELException: /main.xhtml @36,71 value="#{hotelSearch.pageSize}": org.jboss.seam.core.LockTimeoutException: could not acquire lock on @Synchronized component: hotelSearch」が含まれるエラーページまたは同様のエラーメッセージが表示されます。Seam 2 はステートフルセッション Bean (SFSB) ロックの外部で異なるスコープにて独自のロッキングを行うことが問題となります。そのため、同じトランザクションでスレッドが EJB へ 2 回アクセスすると、最初の呼び出しの後に seam ロックではなく SFSB ロックを取得します。その後、2 つ目のスレッドは seam ロックを取得でき、EJB ロックをヒットし待機します。最初のスレッドが 2 回目の呼び出しを実行しようとすると、seam 2 インターセプター上でブロックし、デッドロックが発生します。Java EE 5 では平行アクセスが行われると即座に例外がスローされましたが、Java EE 6 ではこの挙動が変更されました。この問題を回避するには EJB に @AccessTimeout(0) を追加します。これにより、この状態に陥った時に即座に
ConcurrentAccessException
がスローされるようになります。 - Dvdstore の例の注文作成が
javax.ejb.EJBTransactionRolledbackException
によって失敗する - dvdstore の例が次のエラーを表示します。
JBAS011437: Found extended persistence context in SFSB invocation call stack but that cannot be used because the transaction already has a transactional context associated with it. This can be avoided by changing application code, either eliminate the extended persistence context or the transactional context. See JPA spec 2.0 section 7.6.3.1.
この問題は JPA 仕様の変更が原因です。この問題を修正するには、CheckoutAction
クラスとShowOrdersAction
クラスの永続コンテキストをtransactional
に変更し、エンティティーマネージャーのマージ操作をcancelOrder
およびdetailOrder
メソッドで使用します。 - JBoss Cache の Seam キャッシュプロバイダーを Enterprise Application Platform 6 で使用できない
- JBoss Cache は Enterprise Application Platform 6 ではサポートされていません。そのため、JBoss Cache の Seam キャッシュプロバイダーは
java.lang.NoClassDefFoundError: org/jboss/util/xml/JBossEntityResolver
によりアプリケーションサーバーの Seam アプリケーションで失敗します。 - Enterprise Application Platform 6 における JPA エンティティに対する Hibernate 3.3.x の自動スキャンの問題
- この問題を修正するには、すべてのエンティティークラスの一覧を手作業で persistence.xml ファイルに追加します。例は次の通りです。
<persistence xmlns="http://java.sun.com/xml/ns/persistence" version="1.0"> <persistence-unit name="example_pu"> <description>Hibernate 3 Persistence Unit.</description> <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source> <properties> <property name="jboss.as.jpa.providerModule" value="hibernate3-bundled" /> </properties> <class>com.acme.Foo</class> <class>com.acme.Bar</class> </persistence-unit> </persistence>
3.2.11. Spring アプリケーションの移行
3.2.11.1. Spring アプリケーションの移行
3.2.12. 移行に影響するその他の変更
3.2.12.1. 移行に影響する可能性があるその他の変更について理解する
3.2.12.2. Maven プラグイン名の変更
jboss-maven-plugin
は更新されておらず、 Enterprise Application Platform 6 では動作しません。org.jboss.as.plugins:jboss-as-maven-plugin
を使用して正しいディレクトリをデプロイする必要があります。
3.2.12.3. クライアントアプリケーションの変更
jboss-client.jar
に変更され、JBOSS_HOME/bin/client/
ディレクトリにあります。この JAR は JBOSS_HOME/client/jbossall-client.jar
に置き換わるもので、リモートクライアントから Enterprise Application Platform 6 に接続するために必要なすべての依存関係が含まれています。
第4章 ツールとヒント
4.1. 移行に役立つリソース
4.1.1. 移行に役立つリソース
- ツール
- 設定変更の一部を自動化するのに役立つツールが複数あります。詳細は 「移行に便利なツールについて理解する」 を参照してください。
- デバッグのヒント
- アプリケーションの移行時に発生する問題やエラーの最も一般的な原因と解決法については 「移行の問題のデバッグと解決」を参照してください。
- 移行の例
- JBoss Enterprise Application Platform 6 へ移行されたアプリケーションの例は 「アプリケーション例の移行の確認」を参照してください。
4.1.2. 移行に便利なツールについて理解する
移行に便利なツールは複数あります。これらのツールとその説明の一覧は次の通りです。
- Tattletale
- モジュラークラスローディングの変更に伴い、アプリケーション依存関係を検索し、修正する必要があります。Tattletale は依存するモジュールの名前を特定し、アプリケーションに対して設定 XML を生成する時に便利なツールです。
- IronJacamar 移行ツール
- JBoss Enterprise Application Platform 6 ではデータソースとリソースアダプターは個別のファイルに設定されていません。データソースとリソースアダプターはサーバー設定ファイルに定義され、新しいスキーマを使用します。IronJacamar 移行ツールは以前の設定を JBoss Enterprise Application Platform 6 が想定する形式に変換する時に便利です。
4.1.3. Tattletale を用いたアプリケーション依存関係の検索
JBoss Enterprise Application Platform 6 のモジュラークラスローディングの変更に伴い、アプリケーションを移行する時に JBoss ログに ClassNotFoundException
または ClassCastException
トレースが記録されることがあります。このエラーを解決するには、例外が指定するクラスが含まれる JAR を探す必要があります。
jboss-deployment-structure.xml
ファイルが含まれるようにすることが可能です。
手順4.1 アプリケーション依存関係を検索するため Tattletale をインストールし実行する
注記
4.1.4. Tattletale のダウンロードとインストール
手順4.2
- http://sourceforge.net/projects/jboss/files/JBoss%20Tattletale より Tattletale バージョン 1.2.0.Beta2 またはそれ以降のバージョンをダウンロードします。
- 希望のディレクトリにファイルを展開します。
- 次のように
TATTLETALE_HOME/jboss-tattletale.properties
ファイルを変更します。ee6
とas7
をprofiles
プロパティーに追加します。profiles=java5, java6, ee6, as7
scan
とreports
プロパティーをアンコメントします。
注記
4.1.5. Tattletale レポートの作成および確認
手順4.3
- 次のコマンドを実行して Tattletale レポートを作成します。
java -jar
TATTLETALE_HOME/tattletale.jar
APPLICATION_ARCHIVE
OUTPUT_DIRECTORY
For example:java -jar tattletale-1.2.0.Beta2/tattletale.jar applications/jboss-seam-booking.ear output-results/
- ブラウザーで
OUTPUT_DIRECTORY/index.html
ファイルを開き、「Reports」セクション下の「JBoss EAP 6」をクリックします。- 左側の列にはアプリケーションによって使用されるアーカイブが一覧表示されます。ARCHIVE_NAME リンクをクリックし、場所やマニュフェスト情報、含まれるクラスなどアーカイブの詳細を表示します。
- 右側の列にある
jboss-deployment-structure.xml
リンクは、左側の列に名前が表示されているアーカイブのモジュール依存関係を指定する方法を表示します。このリンクをクリックし、アーカイブのデプロイメント依存関係モジュール情報を定義する方法を確認します。
注記
4.1.6. IronJacamar ツールを使用してデータソースとリソースアダプターの設定を移行する
以前のバージョンのアプリケーションサーバーでは、ファイル名が *-ds.xml
で終わるファイルを使用してデータソースとリソースアダプターが設定されデプロイされました。IronJacamar 1.1 ディストリビューションには、これらの設定ファイルを JBoss Enterprise Application Platform 6 が想定する形式に変換できるツールが含まれています。このツールは以前のリリースよりソースの設定ファイルを解析し、XML 設定を作成してファイルを新しい形式で出力します。この XML は JBoss Enterprise Application Platform 6 のサーバー設定ファイルにある正しいサブシステム下にコピーしたり貼り付けすることができます。このツールは最大限努力して以前の属性や要素を新しい形式に変換しますが、生成されたファイルに変更を追加する必要がある場合があります。
手順4.4 IronJacamar 移行ツールのインストールと実行
注記
4.1.7. IronJacamar 移行ツールのダウンロードとインストール
注記
手順4.5
- IronJacamar 1.1 またはそれ以降のディストリビューションを http://www.jboss.org/ironjacamar/downloads/ よりダウンロードします。
- 希望のディレクトリにダウンロードしたファイルを展開します。
- IronJacamar ディストリビューションのコンバータースクリプト探します。
- Linux のスクリプトは
IRONJACAMAR_HOME/doc/as/converter.sh
にあります。 - Windows のバッチファイルは
IRONJACAMAR_HOME/doc/as/converter.bat
にあります。
注記
4.1.8. IronJacamar 移行ツールを使用したデータソース設定ファイルの変換
手順4.6
- コマンドラインを開き、
IRONJACAMAR_HOME/docs/as/
ディレクトリへ移動します。 - 次のコマンドを入力してコンバータースクリプトを実行します。
- Linux の場合:
./converter.sh -ds
SOURCE_FILE
TARGET_FILE
- Microsoft Windows の場合:
./converter.bat -ds
SOURCE_FILE
TARGET_FILE
SOURCE_FILE
は以前のリリースのデータソース -ds.xml ファイルです。TARGET_FILE
に新しい設定が含まれます。例えば、カレントディレクトリにあるjboss-seam-booking-ds.xml
データソース設定ファイルを変換する場合は以下を入力します。- Linux の場合:
./converter.sh -ds
jboss-seam-booking-ds.xml
new-datasource-config.xml
- Microsoft Windows の場合:
./converter.bat -ds
jboss-seam-booking-ds.xml
new-datasource-config.xml
データソース変換のパラメーターは-ds
になります。 - 目的のファイルより
<datasource>
要素をコピーし、<subsystem xmlns="urn:jboss:domain:datasources:1.0">
<datasources>
要素下のサーバー設定ファイルに貼り付けます。- 管理ドメインで実行されている場合は、XML を
EAP_HOME/domain/configuration/domain.xml
ファイルへコピーします。 - スタンドアロンサーバーとして実行されている場合は、XML を
EAP_HOME/standalone/configuration/standalone.xml
ファイルへコピーします。
- 新しい設定ファイルに生成された XML の変更JBoss Enterprise Application Platform 5.x に同梱される Seam 2.2 の Booking 例に対する
jboss-seam-booking-ds.xml
データソース設定ファイルの例は次の通りです。<datasources> <local-tx-datasource> <jndi-name>bookingDatasource</jndi-name> <connection-url>jdbc:hsqldb:.</connection-url> <driver-class>org.hsqldb.jdbcDriver</driver-class> <user-name>sa</user-name> <password></password> </local-tx-datasource> </datasources>
以下はコンバータースクリプトを実行して生成された設定ファイルになります。生成されたファイルには<driver-class>
要素が含まれます。JBoss Enterprise Application Platform 6 では<driver>
を使用してドライバークラスを定義する方法が推奨されます。<driver-class>
要素がコメントアウトされ、対応する<driver>
要素が追加された JBoss Enterprise Application Platform 6 の設定ファイルにある XML は次のようになります。<subsystem xmlns="urn:jboss:domain:datasources:1.0"> <datasources> <datasource enabled="true" jndi-name="java:jboss/datasources/bookingDatasource" jta="true" pool-name="bookingDatasource" use-ccm="true" use-java-context="true"> <connection-url>jdbc:hsqldb:.</connection-url> <!-- Comment out the following driver-class element since it is not the preferred way to define this. <driver-class>org.hsqldb.jdbcDriver</driver-class> --> <transaction-isolation>TRANSACTION_NONE</transaction-isolation> <pool> <prefill>false</prefill> <use-strict-min>false</use-strict-min> <flush-strategy>FailingConnectionOnly</flush-strategy> </pool> <security> <user-name>sa</user-name> <password/> </security> <validation> <validate-on-match>false</validate-on-match> <background-validation>false</background-validation> <use-fast-fail>false</use-fast-fail> </validation> <timeout/> <statement> <track-statements>false</track-statements> </statement> </datasource> <drivers> <!-- The following driver element was not in the XML target file. It was created manually. --> <driver name="h2" module="com.h2database.h2"> <xa-datasource-class>org.h2.jdbcx.JdbcDataSource</xa-datasource-class> </driver> </drivers> </datasources> </subsystem>
注記
4.1.9. IronJacamar 移行ツールを使用したリソースアダプター設定ファイルの変換
手順4.7
- コマンドラインを開き、
IRONJACAMAR_HOME/docs/as/
ディレクトリへ移動します。 - 次のコマンドを入力してコンバータースクリプトを実行します。
- Linux の場合:
./converter.sh -ra
SOURCE_FILE
TARGET_FILE
- Microsoft Windows の場合:
./converter.bat -ra
SOURCE_FILE
TARGET_FILE
SOURCE_FILE
は以前のリリースのリソースアダプター -ds.xml ファイルです。\TARGET_FILE
に新しい設定が含まれます。例えば、カレントディレクトリにあるmttestadapter-ds.xml
リソースアダプター設定ファイルを変換する場合は以下を入力します。- Linux の場合:
./converter.sh -ra
mttestadapter-ds.xml
new-adapter-config.xml
- Microsoft Windows の場合:
./converter.bat -ra
mttestadapter-ds.xml
new-adapter-config.xml
リソースアダプター変換のパラメーターは-ra
になります。 - 目的のファイルより
<resource-adapters>
要素全体をコピーし、<subsystem xmlns="urn:jboss:domain:resource-adapters:1.0">
要素下のサーバー設定ファイルに貼り付けます。- 管理ドメインで実行されている場合は、XML を
EAP_HOME/domain/configuration/domain.xml
ファイルへコピーします。 - スタンドアロンサーバーとして実行されている場合は、XML を
EAP_HOME/standalone/configuration/standalone.xml
ファイルへコピーします。
- 新しい設定ファイルに生成された XML の変更以下は JBoss Enterprise Application Platform 5.x TestSuite からの
mttestadapter-ds.xml
リソースアダプター設定ファイルの例になります。<!-- ==================================================================== --> <!-- ConnectionManager setup for jboss test adapter --> <!-- Build jmx-api (build/build.sh all) and view for config documentation --> <!-- ==================================================================== --> <connection-factories> <tx-connection-factory> <jndi-name>JBossTestCF</jndi-name> <xa-transaction/> <rar-name>jbosstestadapter.rar</rar-name> <connection-definition>javax.resource.cci.ConnectionFactory</connection-definition> <config-property name="IntegerProperty" type="java.lang.Integer">2</config-property> <config-property name="BooleanProperty" type="java.lang.Boolean">false</config-property> <config-property name="DoubleProperty" type="java.lang.Double">5.5</config-property> <config-property name="UrlProperty" type="java.net.URL">http://www.jboss.org</config-property> <config-property name="sleepInStart" type="long">200</config-property> <config-property name="sleepInStop" type="long">200</config-property> </tx-connection-factory> <tx-connection-factory> <jndi-name>JBossTestCF2</jndi-name> <xa-transaction/> <rar-name>jbosstestadapter.rar</rar-name> <connection-definition>javax.resource.cci.ConnectionFactory</connection-definition> <config-property name="IntegerProperty" type="java.lang.Integer">2</config-property> <config-property name="BooleanProperty" type="java.lang.Boolean">false</config-property> <config-property name="DoubleProperty" type="java.lang.Double">5.5</config-property> <config-property name="UrlProperty" type="java.net.URL">http://www.jboss.org</config-property> <config-property name="sleepInStart" type="long">200</config-property> <config-property name="sleepInStop" type="long">200</config-property> </tx-connection-factory> <tx-connection-factory> <jndi-name>JBossTestCFByTx</jndi-name> <xa-transaction/> <track-connection-by-tx>true</track-connection-by-tx> <rar-name>jbosstestadapter.rar</rar-name> <connection-definition>javax.resource.cci.ConnectionFactory</connection-definition> <config-property name="IntegerProperty" type="java.lang.Integer">2</config-property> <config-property name="BooleanProperty" type="java.lang.Boolean">false</config-property> <config-property name="DoubleProperty" type="java.lang.Double">5.5</config-property> <config-property name="UrlProperty" type="java.net.URL">http://www.jboss.org</config-property> <config-property name="sleepInStart" type="long">200</config-property> <config-property name="sleepInStop" type="long">200</config-property> </tx-connection-factory> </connection-factories>
以下はコンバータースクリプトを実行して生成された設定ファイルになります。生成された XML にある class-name 属性値の "FIXME_MCF_CLASS_NAME" を、管理された接続ファクトリーの正しいクラス名に置き換えます。この例では "org.jboss.test.jca.adapter.TestManagedConnectionFactory" に置き換えます。<class-name>
要素値へ変更が加えられた JBoss Enterprise Application Platform 6 設定ファイルの XML は次のようになります。<subsystem xmlns="urn:jboss:domain:resource-adapters:1.0"> <resource-adapters> <resource-adapter> <archive>jbosstestadapter.rar</archive> <transaction-support>XATransaction</transaction-support> <connection-definitions> <!-- Replace the "FIXME_MCF_CLASS_NAME" class-name value with the correct class name <connection-definition class-name="FIXME_MCF_CLASS_NAME" enabled="true" jndi-name="java:jboss/JBossTestCF" pool-name="JBossTestCF" use-ccm="true" use-java-context="true"> --> <connection-definition class-name="org.jboss.test.jca.adapter.TestManagedConnectionFactory" enabled="true" jndi-name="java:jboss/JBossTestCF" pool-name="JBossTestCF" use-ccm="true" use-java-context="true"> <config-property name="IntegerProperty">2</config-property> <config-property name="sleepInStart">200</config-property> <config-property name="sleepInStop">200</config-property> <config-property name="BooleanProperty">false</config-property> <config-property name="UrlProperty">http://www.jboss.org</config-property> <config-property name="DoubleProperty">5.5</config-property> <pool> <prefill>false</prefill> <use-strict-min>false</use-strict-min> <flush-strategy>FailingConnectionOnly</flush-strategy> </pool> <security> <application/> </security> <timeout/> <validation> <background-validation>false</background-validation> <use-fast-fail>false</use-fast-fail> </validation> </connection-definition> </connection-definitions> </resource-adapter> <resource-adapter> <archive>jbosstestadapter.rar</archive> <transaction-support>XATransaction</transaction-support> <connection-definitions> <!-- Replace the "FIXME_MCF_CLASS_NAME" class-name value with the correct class name <connection-definition class-name="FIXME_MCF_CLASS_NAME" enabled="true" jndi-name="java:jboss/JBossTestCF2" pool-name="JBossTestCF2" use-ccm="true" use-java-context="true"> --> <connection-definition class-name="org.jboss.test.jca.adapter.TestManagedConnectionFactory" enabled="true" jndi-name="java:jboss/JBossTestCF2" pool-name="JBossTestCF2" use-ccm="true" use-java-context="true"> <config-property name="IntegerProperty">2</config-property> <config-property name="sleepInStart">200</config-property> <config-property name="sleepInStop">200</config-property> <config-property name="BooleanProperty">false</config-property> <config-property name="UrlProperty">http://www.jboss.org</config-property> <config-property name="DoubleProperty">5.5</config-property> <pool> <prefill>false</prefill> <use-strict-min>false</use-strict-min> <flush-strategy>FailingConnectionOnly</flush-strategy> </pool> <security> <application/> </security> <timeout/> <validation> <background-validation>false</background-validation> <use-fast-fail>false</use-fast-fail> </validation> </connection-definition> </connection-definitions> </resource-adapter> <resource-adapter> <archive>jbosstestadapter.rar</archive> <transaction-support>XATransaction</transaction-support> <connection-definitions> <!-- Replace the "FIXME_MCF_CLASS_NAME" class-name value with the correct class name <connection-definition class-name="FIXME_MCF_CLASS_NAME" enabled="true" jndi-name="java:jboss/JBossTestCFByTx" pool-name="JBossTestCFByTx" use-ccm="true" use-java-context="true"> --> <connection-definition class-name="org.jboss.test.jca.adapter.TestManagedConnectionFactory" enabled="true" jndi-name="java:jboss/JBossTestCFByTx" pool-name="JBossTestCFByTx" use-ccm="true" use-java-context="true"> <config-property name="IntegerProperty">2</config-property> <config-property name="sleepInStart">200</config-property> <config-property name="sleepInStop">200</config-property> <config-property name="BooleanProperty">false</config-property> <config-property name="UrlProperty">http://www.jboss.org</config-property> <config-property name="DoubleProperty">5.5</config-property> <pool> <prefill>false</prefill> <use-strict-min>false</use-strict-min> <flush-strategy>FailingConnectionOnly</flush-strategy> </pool> <security> <application/> </security> <timeout/> <validation> <background-validation>false</background-validation> <use-fast-fail>false</use-fast-fail> </validation> </connection-definition> </connection-definitions> </resource-adapter> </resource-adapters> </subsystem>
注記
4.2. 移行の問題のデバッグ
4.2.1. 移行の問題のデバッグと解決
4.2.2. ClassNotFoundExceptions および NoClassDefFoundErrors のデバッグと解決
通常、ClassNotFoundExceptions は未解決の依存関係が原因で発生します。そのため、他のモジュール上で依存関係を明示的に定義するか、外部ソースより JAR をコピーする必要があります。
手順4.8
- 最初に 「JBoss モジュール依存関係の検索」 の手順を実行します。
- 見つからないクラスのモジュールがない場合は 「以前のインストールでの JAR の検索」 の通りに JAR を探します。
4.2.3. JBoss モジュール依存関係の検索
EAP_HOME/modules/
ディレクトリ内で ClassNotFoundException
によって指定されたクラスが含まれるモジュールを探します。クラスのモジュールを見つけた場合は、マニフェストエントリーへの依存関係を追加する必要があります。
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.Log from [Module "deployment.TopicIndex.war:main" from Service Module Loader] at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:188)この場合、次を実行してこのクラスが含まれる JBoss モジュールを探します。
手順4.9
- 最初にクラスの明白なモジュールがあるかを判断します。
EAP_HOME/modules/
ディレクトリへ移動し、ClassNotFoundException
で名前付けされたクラスと一致するモジュールパスを探します。この例では、モジュール下にorg/apache/commons/logging/
のモジュールパスがあります。EAP_HOME/modules/org/apache/commons/logging/main/module.xml
ファイルを開き、モジュール名を探します。この例では org.apache.commons.logging になります。MANIFEST.MF
ファイルの Dependencies にモジュール名を追加します。Manifest-Version: 1.0 Dependencies: org.apache.commons.logging
- クラスの明白なモジュールパスがない場合、依存関係を他の場所で探す必要があることがあります。
- Tattletale レポートで
ClassNotFoundException
によって名前付けされたクラスを探します。 EAP_HOME/modules
ディレクトリで JAR が含まれているモジュールを探し、前の手順の通りにモジュール名を探します。
4.2.4. 以前のインストールでの JAR の検索
lib/
ディレクトリで JAR を探します。
ClassNotFoundException
トレースが記録されているとします。
Caused by: java.lang.NoClassDefFoundError: org/hibernate/validator/ClassValidator at java.lang.Class.getDeclaredMethods0(Native Method)この場合、次を実行してこのクラスが含まれる JAR を探します。
- ターミナルを開き、
EAP5_HOME/
ディレクトリへ移動します。 - コマンドを実行します。
grep 'org.hibernate.validator.ClassValidator' `find . \-name '*.jar'`
- 複数の結果が表示されることもあります。その場合、必要な JAR は次の通りです。
Binary file ./jboss-eap-5.1/seam/lib/hibernate-validator.jar matches
- この JAR をアプリケーションの
lib/
ディレクトリへコピーします。多数の JAR が必要であることが判明した場合、クラスのモジュールを定義した方が簡単でしょう。クラスのモジュールを定義する方法は、JBoss Enterprise Application Platform 6 開発ガイドの「アプリケーションの開発」の章に記載されているモジュールに関する説明を参照してください。 - アプリケーションを再ビルドし、再デプロイします。
4.2.5. ClassCastExceptions のデバッグと解決
手順4.10
ClassNotFoundException
によって名前付けされたクラスが含まれる JAR をすべて見つけるため、アプリケーションを検索します。クラスに対して定義されたモジュールがある場合、アプリケーションの WAR や EAR より重複する JAR を探し、削除します。- クラスが含まれる JBoss モジュールを探し、
MANIFEST.MF
ファイルまたはjboss-deployment-structure.xml
ファイルに依存関係を明示的に定義します。詳細は、JBoss Enterprise Application Platform 6 開発ガイドの「クラスローディングとモジュール」の章にある「クラスローディングとサブデプロイメント」を参照してください。 - 上記の手順に従っても解決されない場合、クラスローダーの情報をログに出力すると問題の原因を判断できることがあります。例えば、次の
ClassCastException
がログに記録されているとします。java.lang.ClassCastException: com.example1.CustomClass1 cannot be cast to com.example2.CustomClass2
- コードで
ClassCastException
によって名前付けされたクラスに対するクラスローダーの情報をログに出力します。例は次の通りです。logger.info("Class loader for CustomClass1: " + com.example1.CustomClass1.getClass().getClassLoader().toString()); logger.info("Class loader for CustomClass2: " + com.example2.CustomClass2.getClass().getClassLoader().toString());
- ログの情報にはどのモジュールがクラスをロードするかが記載されています。アプリケーションに基づき、競合する JAR を削除または移動する必要があります。
4.2.6. DuplicateServiceExceptions のデバッグと解決
- 生成される Web コンテキストと WAR コンテキストが一意になるよう、JAR ファイルの名前を WAR とは異なる名前に変更します。
<context-root>
要素をjboss-web.xml
ファイルに提供します。<context-root>
要素をjboss-webservices.xml
ファイルに提供します。- WAR の
<context-root>
要素をapplication.xml
ファイルでカスタマイズします。
4.2.7. JBoss Seam のデバッグページエラーのデバッグと解決

図4.1 JBoss Seam デバッグページ
手順4.11
- このページの
Component
セクションを拡大し、org.jboss.seam.caughtException
コンポーネントを探します。 - 原因とスタックトレースが欠落している依存関係を示しているはずです。
図4.2 コンポーネント
org.jboss.seam.caughtException
の情報 - 「ClassNotFoundExceptions および NoClassDefFoundErrors のデバッグと解決」 に説明されている手法を使用してモジュール依存関係を解決します。上記の例では、
org.slf4j
をMANIFEST.MF
に追加するのが最も簡単な解決方法になります。Manifest-Version: 1.0 Dependencies: org.slf4j
モジュールの依存関係をjboss-deployment-structure.xml
ファイルに追加して解決する方法もあります。<jboss-deployment-structure> <deployment> <dependencies> <module name="org.slf4j" /> </dependencies> </deployment> </jboss-deployment-structure>
4.3. アプリケーション例の移行の確認
4.3.1. アプリケーション例の移行の確認
JBoss Enterprise Application Platform 6 へ移行された JBoss Enterprise Application Platform 5.x のアプリケーションの例は次の通りです。リンクをクリックすると、特定アプリケーションの変更内容の詳細を確認できます。
4.3.2. Seam 2.2. JPA 例の JBoss Enterprise Application Platform 6 への移行
下記のタスクリストには、Seam 2.2 JPA の例を JBoss Enterprise Application Platform 6 へ正常に移行するために必要な変更の概要が記載されています。このアプリケーション例は JBoss Enterprise Application Platform 5.1 ディストリビューションの EAP5.1_HOME/jboss-eap-5.1/seam/examples/jpa/
下にあります。
重要
手順4.12 タスク
jboss-web.xml ファイルを削除します。
jboss-seam-jpa.war/WEB-INF/
ディレクトリよりjboss-web.xml
ファイルを削除します。jboss-web.xml
に定義されるクラスローディングがデフォルトの挙動になります。persistence.xml ファイルの廃止されたプロパティーの削除
jboss-seam-jpa.war/WEB-INF/classes/META-INF/persistence.xml
ファイルのhibernate.cache.provider_class
プロパティーを削除またはコメントアウトします。<!-- <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/> -->
Seam 2.2 依存関係の追加
下記の JAR を Seam 2.2 ディストリビューションのライブラリであるSEAM_HOME/lib/
からjboss-seam-jpa.war/WEB-INF/lib/
ディレクトリへコピーします。- slf4j-api.jar
- slf4j-log4j12.jar
- hibernate-entitymanager.jar
- hibernate-core.jar
- hibernate-annotations.jar
- hibernate-commons-annotations.jar
- hibernate-validator.jar
残りの依存関係を追加するため jboss-deployment-structure ファイルを作成する
次のデータが含まれるjboss-deployment-structure.xml
ファイルをjboss-seam-jpa.war/WEB-INF/
フォルダーに作成します。<jboss-deployment-structure> <deployment> <exclusions> <module name="javax.faces.api" slot="main"/> <module name="com.sun.jsf-impl" slot="main"/> </exclusions> <dependencies> <module name="org.apache.log4j" /> <module name="org.dom4j" /> <module name="org.apache.commons.logging" /> <module name="org.apache.commons.collections" /> <module name="javax.faces.api" slot="1.2"/> <module name="com.sun.jsf-impl" slot="1.2"/> </dependencies> </deployment> </jboss-deployment-structure>
Seam 2.2 の JPA 例が JBoss Enterprise Application Platform 6 上にデプロイされ、正常に実行されます。
4.3.3. Seam 2.2. Booking 例の JBoss Enterprise Application Platform 6 への移行
Seam 2.2 Booking EAR の移行は Seam 2.2 JPA WAR 例の移行よりも複雑です。Seam 2.2 JPA WAR 例の移行に関するドキュメントは 「Seam 2.2. JPA 例の JBoss Enterprise Application Platform 6 への移行」 を参照してください。アプリケーションを移行するには、以下を実行する必要があります。
- デフォルトの JSF 2 ではなく JSF 1.2 を初期化する。
- JBoss Enterprise Application Platform 6 に同梱される Hibernate JAR ではなく、古いバージョンの Hibernate JAR をバンドルする。
- 新しい Java EE 6 の移植可能な JNDI 構文を使用するよう JNDI バインディングを変更する。
重要
手順4.13 Seam 2.2 Booking 例の移行
jboss-deployment-structure.xml
ファイルの作成jboss-seam-booking.ear/META-INF/
にjboss-deployment-structure.xml
という名前の新しいファイルを作成し、次の内容を追加します。<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>
キャッシュプロバイダークラスの
hibernate
プロパティーの削除jboss-seam-booking.jar/META-INF/persistence.xml
ファイルのキャッシュプロバイダークラスに対する hibernate プロパティーを削除またはコメントアウトします。<!-- <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/> -->
Seam 2.2 ディストリビューションより JAR をコピー
次の JAR を Seam 2.2 ディストリビューションのEAP5.x_HOME/jboss-eap5.x/seam/lib/
からjboss-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
JNDI ルックアップ名の変更
jboss-seam-booking.war/WEB-INF/components.xml
ファイルの JNDI ルックアップ文字列を変更します。新しい移植可能な JNDI のルールが導入されたため、JBoss Enterprise Application Platform 6 は 移植可能な JNDI の構文ルールを使用して EJB をバインドします。JBoss Enterprise Application Platform 5 で使用された単一の jndiPattern を使用することはできません。 JBoss Enterprise Application Platform 6 ではアプリケーションの EJB JNDI ルックアップ文字列を次のように変更する必要があります。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
Seam 2.2 フレームワーク EJB の JNDI ルックアップ文字列は次のように変更する必要があります。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
次のいずれかの方法を実行します。コンポーネント要素の追加
各 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/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" />
- JNDI パスを指定する
@JNDIName(value="")
アノテーションを追加してコードを変更することができます。変更されたステートレスセッション Bean のコードは次の通りです。この処理の詳細は Seam 2.2 の参考文献を参照してください。@Stateless @Name("authenticator") @JndiName(value="java:app/booking-ejb/AuthenticatorAction") public class AuthenticatorAction implements Authenticator { ... }
Seam 2.2 の Booking アプリケーションが JBoss Enterprise Application Platform 6 上にデプロイされ、正常に実行されます。
4.3.4. Seam 2.2 Booking アーカイブの JBoss Enterprise Application 6 への移行: 手順説明
EAP6_HOME/standalone/deployments
ディレクトリにデプロイされ、変更はアーカイブの変更のみとなります。これにより、問題の発生や解決時にアーカイブ内にある XML ファイルの変更が容易になります。
重要
手順4.14 アプリケーションの移行
- 「Seam 2.2 Booking アーカイブのデプロイメントエラーや例外のデバッグおよび解決」 に従ってデプロイメントエラーや例外のデバッグおよび解決を行います。
- 「Seam 2.2 Booking アーカイブのランタイムエラーや例外のデバッグおよび解決」 に従ってランタイムエラーや例外のデバッグおよび解決を行います。
「Seam 2.2 Booking アプリケーションの移行時に加えられる変更概要の確認」 に従って変更の概要を確認します。
4.3.5. JBoss Enterprise Application Platform 5.1 バージョンの Seam 2.2 Booking アプリケーションのビルドおよびデプロイ
手順4.15 EAR のビルドとデプロイ
- EAR をビルドします。
$ cd /EAP5_HOME/jboss-eap5.1/seam/examples/booking $ ANT_HOME/ant explode
- EAR を EAP6_HOME デプロイメントディレクトリへコピーします。
$ cp -r EAP5_HOME/jboss-eap-5.1/seam/examples/booking/exploded-archives/jboss-seam-booking.ear EAP6_HOME/standalone/deployments/ $ cp -r EAP5_HOME/jboss-eap-5.1/seam/examples/booking/exploded-archives/jboss-seam-booking.war EAP6_HOME/standalone/deployments/jboss-seam.ear $ cp -r EAP5_HOME/jboss-eap-5.1/seam/examples/booking/exploded-archives/jboss-seam-booking.jar EAP6_HOME/standalone/deployments/jboss-seam.ear
- JBoss Enterprise Application Platform 6 サーバーを起動し、ログをチェックします。ログには以下が記録されているはずです。
INFO [org.jboss.as.deployment] (DeploymentScanner-threads - 1) Found jboss-seam-booking.ear in deployment directory. To trigger deployment create a file called jboss-seam-booking.ear.dodeploy
jboss-seam-booking.ear.dodeploy
という名前の空のファイルを作成し、EAP6_HOME/standalone/deployments
ディレクトリへコピーします。本アプリケーションの移行中に、このファイルを複数回デプロイメントディレクトリへコピーする必要があるため、簡単に見つかる場所へ保存するようにしてください。デプロイ中であることを示す次のメッセージがログに記録されるはずです。INFO [org.jboss.as.server.deployment] (MSC service thread 1-1) Starting deployment of "jboss-seam-booking.ear" INFO [org.jboss.as.server.deployment] (MSC service thread 1-3) Starting deployment of "jboss-seam-booking.jar" INFO [org.jboss.as.server.deployment] (MSC service thread 1-6) Starting deployment of "jboss-seam.jar" INFO [org.jboss.as.server.deployment] (MSC service thread 1-2) Starting deployment of "jboss-seam-booking.war"
この時点で最初のデプロイメントエラーが発生します。次の手順で各問題を確認し、デバッグおよび解決方法について説明します。デプロイメントの問題をデバッグおよび解決する方法については 「Seam 2.2 Booking アーカイブのデプロイメントエラーや例外のデバッグおよび解決」 を参照してください。前のトピックに戻るには 「Seam 2.2 Booking アーカイブの JBoss Enterprise Application 6 への移行: 手順説明」 をクリックしてください。
4.3.6. Seam 2.2 Booking アーカイブのデプロイメントエラーや例外のデバッグおよび解決
重要
手順4.16 デプロイメントエラーや例外のデバッグおよび解決
- 問題 - java.lang.ClassNotFoundException: javax.faces.FacesExceptionアプリケーションをデプロイすると、ログに次のエラーが記録されます。
ERROR \[org.jboss.msc.service.fail\] (MSC service thread 1-1) MSC00001: Failed to start service jboss.deployment.subunit."jboss-seam-booking.ear"."jboss-seam-booking.war".POST_MODULE: org.jboss.msc.service.StartException in service jboss.deployment.subunit."jboss-seam-booking.ear"."jboss-seam-booking.war".POST_MODULE: Failed to process phase POST_MODULE of subdeployment "jboss-seam-booking.war" of deployment "jboss-seam-booking.ear" (.. additional logs removed ...) Caused by: java.lang.ClassNotFoundException: javax.faces.FacesException from \[Module "deployment.jboss-seam-booking.ear:main" from Service Module Loader\] at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:191)
ログの解説ClassNotFoundException は見つからない依存関係があることを示しています。この例では、クラス
javax.faces.FacesException
が見つからないため、依存関係を明示的に追加する必要があります。解決方法見つからないクラスと一致するパスを探し、EAP6_HOME/modules ディレクトリ内でそのクラスのモジュール名を見つけます。この例では、一致するモジュールが 2 つあります。
javax/faces/api/main javax/faces/api/1.2
両モジュールのモジュール名は同じjavax.faces.api
ですが、メインディレクトリにあるモジュールは JSF 2.0 向けで、1.2 ディレクトリにあるものは JSF 1.2 向けです。一致するモジュールが 1 つのみの場合、MANIFEST.MF
ファイルを作成し、モジュールの依存関係を追加します。この例では、メインディレクトリにある 2.0 バージョンではなく JSF 1.2 バージョンを使用したいため、使用したい方を指定し、使用したくない方を除外します。それには、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"/> </dependencies> </deployment> <sub-deployment name="jboss-seam-booking.war"> <exclusions> <module name="javax.faces.api" slot="main"/> </exclusions> <dependencies> <module name="javax.faces.api" slot="1.2"/> </dependencies> </sub-deployment> </jboss-deployment-structure>
deployment
セクションに JSF 1.2 モジュールのjavax.faces.api
に対する依存関係を追加します。また、JSF 1.2 モジュールに対する依存関係を WAR のサブデプロイメントセクションに追加し、 JSF 2.0 のモジュールを除外します。standalone/deployments/jboss-seam-booking.ear.failed
ファイルを削除して同じディレクトリに空のjboss-seam-booking.ear.dodeploy
ファイルを作成し、アプリケーションを再デプロイします。 - 問題 - java.lang.ClassNotFoundException: org.apache.commons.logging.Logアプリケーションをデプロイすると、次のエラーがログに記録されます。
ERROR [org.jboss.msc.service.fail] (MSC service thread 1-8) MSC00001: Failed to start service jboss.deployment.unit."jboss-seam-booking.ear".INSTALL: org.jboss.msc.service.StartException in service jboss.deployment.unit."jboss-seam-booking.ear".INSTALL: Failed to process phase INSTALL of deployment "jboss-seam-booking.ear" (.. additional logs removed ...) Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.Log from [Module "deployment.jboss-seam-booking.ear.jboss-seam-booking.war:main" from Service Module Loader]
ログの解説ClassNotFoundException
は見つからない依存関係があることを示しています。この例では、クラスorg.apache.commons.logging.Log
が見つからないため、依存関係を明示的に追加する必要があります。解決方法見つからないクラスと一致するパスを探し、
EAP6_HOME/modules/
ディレクトリ内でそのクラスのモジュール名を見つけます。この例では、パスorg/apache/commons/logging/
と一致するモジュールが 1 つあります。モジュール名は「org.apache.commons.logging」です。jboss-deployment-structure.xml
ファイルを変更し、モジュールの依存関係をファイルのデプロイメントセクションに追加します。<module name="org.apache.commons.logging" export="true"/>
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="org.apache.commons.logging" export="true"/> </dependencies> </deployment> <sub-deployment name="jboss-seam-booking.war"> <exclusions> <module name="javax.faces.api" slot="main"/> </exclusions> <dependencies> <module name="javax.faces.api" slot="1.2"/> </dependencies> </sub-deployment> </jboss-deployment-structure>
standalone/deployments/jboss-seam-booking.ear.failed
ファイルを削除して同じディレクトリに空のjboss-seam-booking.ear.dodeploy
ファイルを作成し、アプリケーションを再デプロイします。 - 問題 - java.lang.ClassNotFoundException: org.dom4j.DocumentExceptionアプリケーションをデプロイすると、次のエラーがログに記録されます。
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/seam-booking]] (MSC service thread 1-3) Exception sending context initialized event to listener instance of class org.jboss.seam.servlet.SeamListener: java.lang.NoClassDefFoundError: org/dom4j/DocumentException (... additional logs removed ...) Caused by: java.lang.ClassNotFoundException: org.dom4j.DocumentException from [Module "deployment.jboss-seam-booking.ear.jboss-seam.jar:main" from Service Module Loader]
ログの解説ClassNotFoundException
は見つからない依存関係があることを示しています。この例では、クラスorg.dom4j.DocumentException
が見つかりません。解決方法org/dom4j/DocumentException
を探し、EAP6_HOME/modules/
ディレクトリ内でモジュール名を見つけます。モジュール名は 「org.dom4j」です。jboss-deployment-structure.xml
ファイルを変更し、ファイルのデプロイメントセクションにモジュールの依存関係を追加します。<module name="org.dom4j" export="true"/>
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="org.apache.commons.logging" export="true"/> <module name="org.dom4j" export="true"/> </dependencies> </deployment> <sub-deployment name="jboss-seam-booking.war"> <exclusions> <module name="javax.faces.api" slot="main"/> </exclusions> <dependencies> <module name="javax.faces.api" slot="1.2"/> </dependencies> </sub-deployment> </jboss-deployment-structure>
standalone/deployments/jboss-seam-booking.ear.failed
ファイルを削除して同じディレクトリに空のjboss-seam-booking.ear.dodeploy
ファイルを作成し、アプリケーションを再デプロイします。 - 問題 - java.lang.ClassNotFoundException: org.hibernate.validator.InvalidValueアプリケーションをデプロイするとログに次のエラーが記録されます。
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/seam-booking]] (MSC service thread 1-6) Exception sending context initialized event to listener instance of class org.jboss.seam.servlet.SeamListener: java.lang.RuntimeException: Could not create Component: org.jboss.seam.international.statusMessages (... additional logs removed ...) Caused by: java.lang.ClassNotFoundException: org.hibernate.validator.InvalidValue from [Module "deployment.jboss-seam-booking.ear.jboss-seam.jar:main" from Service Module Loader]
ログの解説ClassNotFoundException
は見つからない依存関係があることを示しています。この例では、クラスorg.hibernate.validator.InvalidValue
が見つかりません。解決方法モジュール「org.hibernate.validator」は存在しますが JAR に
org.hibernate.validator.InvalidValue
クラスが含まれていないため、モジュールの依存関係を追加してもこの問題は解決しません。この例では、クラスが含まれる JAR は JBoss Enterprise Application Platform 5.1 デプロイメントの一部になります。EAP5_HOME/jboss-eap-5.1/seam/lib/
ディレクトリに見つからないクラスが含まれている JAR を探します。これを実行するには、コンソールを開いて以下を入力します。$ cd EAP5_HOME/jboss-eap-5.1/seam/lib $ grep 'org.hibernate.validator.InvalidValue' `find . -name '*.jar'
結果は次のようになります。$ Binary file ./hibernate-validator.jar matches $ Binary file ./test/hibernate-all.jar matches
この場合、hibernate-validator.jar
をjboss-seam-booking.ear/lib/
ディレクトリにコピーします。$ cp EAP5_HOME/jboss-eap-5.1/seam/lib/hibernate-validator.jar jboss-seam-booking.ear/lib
standalone/deployments/jboss-seam-booking.ear.failed
ファイルを削除して同じディレクトリに空のjboss-seam-booking.ear.dodeploy
ファイルを作成し、アプリケーションを再デプロイします。 - 問題 - java.lang.InstantiationException: org.jboss.seam.jsf.SeamApplicationFactoryアプリケーションをデプロイすると、次のエラーがログに記録されます。
INFO [javax.enterprise.resource.webcontainer.jsf.config] (MSC service thread 1-7) Unsanitized stacktrace from failed start...: com.sun.faces.config.ConfigurationException: Factory 'javax.faces.application.ApplicationFactory' was not configured properly. at com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:296) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4] (... additional logs removed ...) Caused by: javax.faces.FacesException: org.jboss.seam.jsf.SeamApplicationFactory at javax.faces.FactoryFinder.getImplGivenPreviousImpl(FactoryFinder.java:606) [jsf-api-1.2_13.jar:1.2_13-b01-FCS] (... additional logs removed ...) at com.sun.faces.config.processor.FactoryConfigProcessor.verifyFactoriesExist(FactoryConfigProcessor.java:294) [jsf-impl-2.0.4-b09-jbossorg-4.jar:2.0.4-b09-jbossorg-4] ... 11 more Caused by: java.lang.InstantiationException: org.jboss.seam.jsf.SeamApplicationFactory at java.lang.Class.newInstance0(Class.java:340) [:1.6.0_25] at java.lang.Class.newInstance(Class.java:308) [:1.6.0_25] at javax.faces.FactoryFinder.getImplGivenPreviousImpl(FactoryFinder.java:604) [jsf-api-1.2_13.jar:1.2_13-b01-FCS] ... 16 more
ログの解説com.sun.faces.config.ConfigurationException
とjava.lang.InstantiationException
は依存関係の問題があることを示しています。この例では、原因は明らかではありません。解決方法com.sun.faces
クラスが含まれるモジュールを探す必要があります。com.sun.faces
モジュールは存在しませんが、com.sun.jsf-impl
モジュールが 2 つあります。1.2 ディレクトリのjsf-impl-1.2_13.jar
を簡単にチェックすると、com.sun.faces
クラスが含まれていることが分かります。javax.faces.FacesException
ClassNotFoundException
の例と同様、メインディレクトリの JSF 2.0 バージョンではなく JFS 1.2 バージョンを使用したいため、使用したい方を指定し、使用したくない方を除外します。jboss-deployment-structure.xml
を変更し、ファイルのデプロイメントセクションにモジュールの依存関係を追加する必要があります。また、WAR のサブデプロイメントに追加し、JSF 2.0 モジュールを除外する必要もあります。ファイルは次のようになるはずです。<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.commons.logging" export="true"/> <module name="org.dom4j" 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>
standalone/deployments/jboss-seam-booking.ear.failed
ファイルを削除して同じディレクトリに空のjboss-seam-booking.ear.dodeploy
ファイルを作成し、アプリケーションを再デプロイします。 - 問題 - java.lang.ClassNotFoundException: org.apache.commons.collections.ArrayStackアプリケーションをデプロイすると、次のエラーがログに記録されます。
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/seam-booking]] (MSC service thread 1-1) Exception sending context initialized event to listener instance of class com.sun.faces.config.ConfigureListener: java.lang.RuntimeException: com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED! org.apache.commons.collections.ArrayStack from [Module "deployment.jboss-seam-booking.ear:main" from Service Module Loader] (... additional logs removed ...) Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.ArrayStack from [Module "deployment.jboss-seam-booking.ear:main" from Service Module Loader]
ログの解説ClassNotFoundException
は見つからない依存関係があることを示しています。この例では、クラスorg.apache.commons.collections.ArrayStack
が見つかりません。解決方法org/apache/commons/collections
のパスを探し、EAP6_HOME/modules/
ディレクトリ内でモジュール名を見つけます。モジュール名は 「org.apache.commons.collections」です。jboss-deployment-structure.xml を変更し、ファイルのデプロイメントセクションにモジュールの依存関係を追加します。<module name="org.apache.commons.collections" export="true"/>
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"/> <module name="org.apache.commons.logging" export="true"/> <module name="org.dom4j" export="true"/> <module name="org.apache.commons.collections" 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>
standalone/deployments/jboss-seam-booking.ear.failed
ファイルを削除して同じディレクトリに空のjboss-seam-booking.ear.dodeploy
ファイルを作成し、アプリケーションを再デプロイします。 - 問題 - Services with missing/unavailable dependenciesアプリケーションをデプロイすると、次のエラーがログに記録されます。
ERROR [org.jboss.as.deployment] (DeploymentScanner-threads - 2) {"Composite operation failed and was rolled back. Steps that failed:" => {"Operation step-2" => {"Services with missing/unavailable dependencies" => ["jboss.deployment.subunit.\"jboss-seam-booking.ear\".\"jboss-seam-booking.jar\".component.AuthenticatorAction.START missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seam-booking.jar\".AuthenticatorAction.\"env/org.jboss.seam.example.booking.AuthenticatorAction/em\" ]","jboss.deployment.subunit.\"jboss-seam-booking.ear\".\"jboss-seam-booking.jar\".component.HotelSearchingAction.START missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seam-booking.jar\".HotelSearchingAction.\"env/org.jboss.seam.example.booking.HotelSearchingAction/em\" ]"," (... additional logs removed ...) "jboss.deployment.subunit.\"jboss-seam-booking.ear\".\"jboss-seam-booking.jar\".component.BookingListAction.START missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seam-booking.jar\".BookingListAction.\"env/org.jboss.seam.example.booking.BookingListAction/em\" ]","jboss.persistenceunit.\"jboss-seam-booking.ear/jboss-seam-booking.jar#bookingDatabase\" missing [ jboss.naming.context.java.bookingDatasource ]"]}}}
ログの解説「Services with missing/unavailable dependencies」(見つからない/使用できない依存関係を持つサービス) のエラーが発生したら、「missing」の後の括弧内にある文字を確認してください。この場合では次のようになります。
missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seam-booking.jar\".AuthenticatorAction.\"env/org.jboss.seam.example.booking.AuthenticatorAction/em\" ]
「/em」はエンティティーマネージャーとデータソースの問題であることを示しています。解決方法JBoss Enterprise Application Platform 6 ではデータソースの設定が変更になったため、
standalone/configuration/standalone.xml
ファイルに定義する必要があります。JBoss Enterprise Application Platform 6 には、既にstandalone.xml
ファイルに定義されているデータベースの例が含まれているため、 このアプリケーションでデータベースの例を使用するようpersistence.xml
ファイルを変更します。standalone.xml
ファイルを見るとデータベースの例のjndi-name
はjava:jboss/datasources/ExampleDS
であることが分かります。jboss-seam-booking.jar/META-INF/persistence.xml
ファイルを変更して既存のjta-data-source
要素をコメントアウトし、以下のように置き換えます。<!-- <jta-data-source>java:/bookingDatasource</jta-data-source> --> <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
standalone/deployments/jboss-seam-booking.ear.failed
ファイルを削除して同じディレクトリに空のjboss-seam-booking.ear.dodeploy
ファイルを作成し、アプリケーションを再デプロイします。 - 問題 - java.lang.ClassNotFoundException: org.hibernate.cache.HashtableCacheProviderアプリケーションをデプロイすると、ログに次のエラーが記録されます。
ERROR [org.jboss.msc.service.fail] (MSC service thread 1-4) MSC00001: Failed to start service jboss.persistenceunit."jboss-seam-booking.ear/jboss-seam-booking.jar#bookingDatabase": org.jboss.msc.service.StartException in service jboss.persistenceunit."jboss-seam-booking.ear/jboss-seam-booking.jar#bookingDatabase": Failed to start service at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1786) (... log messages removed ...) Caused by: java.lang.ClassNotFoundException: org.hibernate.cache.HashtableCacheProvider from [Module "org.hibernate:main" from local module loader @12a3793 (roots: /home/sgilda/tools/jboss7/modules)] at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:191) (... log messages removed ...)
ログの解説ClassNotFoundException
は見つからない依存関係があることを示しています。この例では、クラスorg.hibernate.cache.HashtableCacheProvider
が見つかりません。解決方法org.hibernate.cache のモジュールはありません。この例では、クラスが含まれる JAR は JBoss Enterprise Application Platform 5.1 デプロイメントの一部になります。
EAP5_HOME/jboss-eap-5.1/seam/lib/
ディレクトリに見つからないクラスが含まれている JAR を探します。これを実行するには、コンソールを開いて以下を入力します。$ cd EAP5_HOME/jboss-eap-5.1/seam/lib $ grep 'org.hibernate.validator.InvalidValue' `find . -name '*.jar'`
結果は次のようになります。Binary file ./hibernate-core.jar matches Binary file ./test/hibernate-all.jar matches
この場合、hibernate-core.jar
をjboss-seam-booking.ear/lib/
ディレクトリにコピーします。cp EAP5_HOME/jboss-eap-5.1/seam/lib/hibernate-core.jar jboss-seam-booking.ear/lib
standalone/deployments/jboss-seam-booking.ear.failed
ファイルを削除して同じディレクトリに空のjboss-seam-booking.ear.dodeploy
ファイルを作成し、アプリケーションを再デプロイします。 - 問題 - java.lang.ClassCastException: org.hibernate.cache.HashtableCacheProviderアプリケーションをデプロイすると、次のエラーがログに記録されます。
ERROR [org.jboss.msc.service.fail] (MSC service thread 1-2) MSC00001: Failed to start service jboss.persistenceunit."jboss-seam-booking.ear/jboss-seam-booking.jar#bookingDatabase": org.jboss.msc.service.StartException in service jboss.persistenceunit."jboss-seam-booking.ear/jboss-seam-booking.jar#bookingDatabase": Failed to start service at org.jboss.msc.service.ServiceControllerImpl$StartTask.run(ServiceControllerImpl.java:1786) (... log messages removed ...) Caused by: java.lang.ClassCastException: org.hibernate.cache.HashtableCacheProvider cannot be cast to org.hibernate.cache.spi.CacheProvider at org.hibernate.cache.internal.bridge.RegionFactoryCacheProviderBridge.init(RegionFactoryCacheProviderBridge.java:65) ... 20 more
ログの解説ClassCastException
は複数の問題が原因で発生する可能性があります。ログでこの例外を見てみると、クラスorg.hibernate.cache.HashtableCacheProvider
がorg.hibernate.cache.spi.CacheProvider
を拡張し、拡張するクラス以外のクラスローダーによってロードされたように見受けられます。org.hibernate.cache.HashtableCacheProvider
クラスはhibernate-core.jar
にあり、アプリケーションクラスローダーによってロードされます。このクラスを拡張するクラスであるorg.hibernate.cache.spi.CacheProvider
はorg/hibernate/main/hibernate-core-4.0.0.Beta1.jar
にあり、モジュールによって暗黙的にロードされます。これはあからさまではありませんが Hibernate 4 の変更が原因で、この問題はHashtableCacheProvider
クラスを他のパッケージへ移動したことによる後方互換性の問題が原因となっています。このクラスはorg.hibernate.cache
パッケージからorg.hibernate.cache.internal
パッケージに移動されました。persistence.xml
ファイルよりhibernate.cache.provider_class
プロパティーを削除しないと、Seam アプリケーションが以前の Hibernate ライブラリをバンドルするよう強制されるため、ClassCastExceptions
が発生します。JBoss Enterprise Application Platform 6 では HashtableCacheProvider を使用せずに Infinispan を使用するようにしてください。解決方法JBoss Enterprise Application Platform 6 では、
jboss-seam-booking.jar/META-INF/persistence.xml
ファイルのhibernate.cache.provider_class property
を次のようにコメントアウトします。<!-- <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/> -->
standalone/deployments/jboss-seam-booking.ear.failed
ファイルを削除して同じディレクトリに空のjboss-seam-booking.ear.dodeploy
ファイルを作成し、アプリケーションを再デプロイします。 - この時点で、アプリケーションはエラーを引き起こさずにデプロイされますが、ブラウザーで URL http://localhost:8080/seam-booking/ へアクセスし、アカウントへログインしようとするとランタイムエラー 「The page isn't redirecting properly」(ページが正しくリダイレクトしません) が発生します。次の手順でランタイムエラーのデバッグおよび解決方法について学びましょう。ランタイムの問題をデバッグおよび解決する方法については 「Seam 2.2 Booking アーカイブのランタイムエラーや例外のデバッグおよび解決」 を参照してください。前のトピックに戻るには 「Seam 2.2 Booking アーカイブの JBoss Enterprise Application 6 への移行: 手順説明」 をクリックしてください。
4.3.7. Seam 2.2 Booking アーカイブのランタイムエラーや例外のデバッグおよび解決
重要
手順4.17 ランタイムエラーや例外のデバッグおよび解決
- 問題 - javax.naming.NameNotFoundException: Name 'jboss-seam-booking' not found in context ''ブラウザーで URL http://localhost:8080/seam-booking/ にアクセスすると 「The page isn't redirecting properly」と表示され、ログに次のエラーが記録されます。
SEVERE [org.jboss.seam.jsf.SeamPhaseListener] (http--127.0.0.1-8080-1) swallowing exception: java.lang.IllegalStateException: Could not start transaction at org.jboss.seam.jsf.SeamPhaseListener.begin(SeamPhaseListener.java:598) [jboss-seam.jar:] (... log messages removed ...) Caused by: org.jboss.seam.InstantiationException: Could not instantiate Seam component: org.jboss.seam.transaction.synchronizations at org.jboss.seam.Component.newInstance(Component.java:2170) [jboss-seam.jar:] (... log messages removed ...) Caused by: javax.naming.NameNotFoundException: Name 'jboss-seam-booking' not found in context '' at org.jboss.as.naming.util.NamingUtils.nameNotFoundException(NamingUtils.java:109) (... log messages removed ...)
ログの解説NameNotFoundException
は JNDI の命名の問題であることを示しています。JBoss Enterprise Application Platform 6 では JNDI の命名ルールが変更になったため、新しいルールに従ってルックアップ名を変更する必要があります。解決方法この問題をデバッグするには、サーバーログを追跡し、問題発生前に使用された JNDI バインディングを確認します。サーバーログには以下が記録されているはずです。
15:01:16,138 INFO [org.jboss.as.ejb3.deployment.processors.EjbJndiBindingsDeploymentUnitProcessor] (MSC service thread 1-1) JNDI bindings for session bean named RegisterAction 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/RegisterAction!org.jboss.seam.example.booking.Register java:app/jboss-seam-booking.jar/RegisterAction!org.jboss.seam.example.booking.Register java:module/RegisterAction!org.jboss.seam.example.booking.Register java:global/jboss-seam-booking/jboss-seam-booking.jar/RegisterAction java:app/jboss-seam-booking.jar/RegisterAction java:module/RegisterAction [JNDI bindings continue ...]
セッション Bean ごとに 1つとなる合計 8 つの INFO JNDI バインディング (RegisterAction、 BookingListAction, HotelBookingAction、 AuthenticatorAction、 ChangePasswordAction、 HotelSearchingAction、 EjbSynchronizations、 TimerServiceDispatcher) がログに記録されています。新しい JNDI バインディングを使用するよう、WAR のlib/components.xml
ファイルを変更する必要があります。ログの EJB JNDI バインディングはすべて「java:app/jboss-seam-booking.jar」で始まることに注意してください。 次のようにcore:init
要素を置き換えます。<!-- <core:init jndi-pattern="jboss-seam-booking/#{ejbName}/local" debug="true" distributable="false"/> --> <core:init jndi-pattern="java:app/jboss-seam-booking.jar/#{ejbName}" debug="true" distributable="false"/>
次に、EjbSynchronizations と TimerServiceDispatcher JNDI バインディングを追加する必要があります。ファイルに次のコンポーネント要素を追加します。<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"/>
components.xml ファイルは次のようになるはずです。<components xmlns="http://jboss.com/products/seam/components" xmlns:core="http://jboss.com/products/seam/core" xmlns:security="http://jboss.com/products/seam/security" xmlns:transaction="http://jboss.com/products/seam/transaction" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation= "http://jboss.com/products/seam/core http://jboss.com/products/seam/core-2.2.xsd http://jboss.com/products/seam/transaction http://jboss.com/products/seam/transaction-2.2.xsd http://jboss.com/products/seam/security http://jboss.com/products/seam/security-2.2.xsd http://jboss.com/products/seam/components http://jboss.com/products/seam/components-2.2.xsd"> <!-- <core:init jndi-pattern="jboss-seam-booking/#{ejbName}/local" debug="true" distributable="false"/> --> <core:init jndi-pattern="java:app/jboss-seam-booking.jar/#{ejbName}" debug="true" distributable="false"/> <core:manager conversation-timeout="120000" concurrent-request-timeout="500" conversation-id-parameter="cid"/> <transaction:ejb-transaction/> <security:identity authenticate-method="#{authenticator.authenticate}"/> <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"/> </components>
standalone/deployments/jboss-seam-booking.ear.failed
ファイルを削除して同じディレクトリに空のjboss-seam-booking.ear.dodeploy
ファイルを作成し、アプリケーションを再デプロイします。 - ランタイムエラーの解決この時点で、アプリケーションはエラーを引き起こさずにデプロイされ実行されます。ブラウザーで URL http://localhost:8080/seam-booking/ にアクセスすると正常にログインすることができます。前のトピックに戻るには 「Seam 2.2 Booking アーカイブの JBoss Enterprise Application 6 への移行: 手順説明」 をクリックしてください。
4.3.8. Seam 2.2 Booking アプリケーションの移行時に加えられる変更概要の確認
重要
- EAR の
META-INF/
ディレクトリにjboss-deployment-structure.xml
ファイルを作成しました。ClassNotFoundExceptions
を解決するため、<dependencies>
と<exclusions>
を追加しました。このファイルには次のデータが含まれています。<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.commons.logging" export="true"/> <module name="org.dom4j" export="true"/> <module name="org.apache.commons.collections" 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>
ClassNotFoundExceptions
を解決するため、次の JAR をEAP5_HOME/jboss-eap-5.1/seam/lib/
ディレクトリからjboss-seam-booking.ear/lib/
ディレクトリへコピーしました。- hibernate-core.jar
- hibernate-validator.jar
- 次のように
jboss-seam-booking.jar/META-INF/persistence.xml
ファイルを変更しました。- JBoss Enterprise Application Platform 6 に同梱されるデータベースの例を使用するよう
jta-data-source
要素を変更しました。<!-- <jta-data-source>java:/bookingDatasource</jta-data-source> --> <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
- hibernate.cache.provider_class プロパティーをコメントアウトしました。
<!-- <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/> -->
- 新しい JNDI バインディングを使用するよう、WAR の
lib/components.xml
ファイルを変更しました。core:init
既存要素を次のように置き換えました。<!-- <core:init jndi-pattern="jboss-seam-booking/#{ejbName}/local" debug="true" distributable="false"/> --> <core:init jndi-pattern="java:app/jboss-seam-booking.jar/#{ejbName}" debug="true" distributable="false"/>
- "EjbSynchronizations" および "TimerServiceDispatcher" JNDI バインディングのコンポーネント要素を追加しました。
<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"/>
第5章 Compiler Output
Topic ID 4613, Revision 83970
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Beta Technologies: JAX-RS, RESTEasy Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4887, Revision 72536
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Concerns: Application or Service Deployment Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 5616, Revision 84302
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Concerns: Getting Started Topic Lifecycle: IA Proposed Concerns: Application Development Concerns: Application or Service Deployment Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4611, Revision 83968
- INFO: Assigned Writer: dmison Common Names: Application Server, Classloading, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Alpha, EAP 6 Beta Technologies: JBoss Modules Topic Types: Concept IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Concerns: Application or Service Deployment Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4888, Revision 70485
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4618, Revision 83973
- INFO: Assigned Writer: sgilda Common Names: Classloading, Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Beta Technologies: JBoss Modules Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Concerns: Troubleshooting Topic Lifecycle: Assigned Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 7669, Revision 110276
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Concerns: Migration Release: EAP 6.0 Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Assigned Topic Lifecycle: Written
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 5247, Revision 84154
- INFO: Assigned Writer: sgilda Common Names: Classloading, Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Beta Technologies: JBoss Modules Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Concerns: Getting Started Topic Lifecycle: IA Proposed Concerns: Administration Concerns: Application Development Concerns: Application or Service Deployment Concerns: Troubleshooting Topic Lifecycle: Assigned Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 7668, Revision 157979
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5 Concerns: Migration Content Warnings: Grammar Errors, Spelling Error Release: EAP 6.0.0 GA Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Assigned Topic Lifecycle: Written
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 7671, Revision 150222
- INFO: Assigned Writer: sgilda Common Names: Java Database Connectivity (JDBC), Java Persistence API (JPA), Migration from Enterprise Application Platform 5 Concerns: Migration Release: EAP 6.0 Technologies: Hibernate, Hibernate Validator Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Assigned Topic Lifecycle: Written
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 7670, Revision 133996
- INFO: Assigned Writer: sgilda Common Names: Classloading, Migration from Enterprise Application Platform 5, Migration from Previous Versions Concerns: Migration Content Warnings: Grammar Errors, Spelling Error Release: EAP 6.0 Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Assigned Topic Lifecycle: Written
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 7667, Revision 110273
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5 Concerns: Migration Release: EAP 6.0 Topic Types: Overview Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Assigned Topic Lifecycle: Written
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 10144, Revision 162981
- INFO: Assigned Writer: sgilda Common Names: Application Server, EJB, Migration from Enterprise Application Platform 5, Migration from Previous Versions Concerns: Migration Release: EAP 6.0.1 Technologies: JBoss EJB3 Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Assigned Topic Lifecycle: Written
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 5241, Revision 66321
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions, Security Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Configuration Concerns: Application Development Concerns: Application or Service Deployment Topic Lifecycle: Assigned Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 7880, Revision 75352
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5 Concerns: Migration Release: EAP 6 Beta Technologies: Hibernate Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Concerns: Troubleshooting Topic Lifecycle: Assigned Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 5615, Revision 76982
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Concerns: Getting Started Topic Lifecycle: IA Proposed Concerns: Configuration Concerns: Application Development Concerns: Application or Service Deployment Topic Lifecycle: Assigned Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 7673, Revision 162834
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Concerns: Migration Release: EAP 6.0.0 GA Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Assigned Topic Lifecycle: Written
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 9374, Revision 153089
- INFO: Assigned Writer: sgilda Common Names: Java Messaging Service (JMS), Migration from Enterprise Application Platform 5, Migration from Previous Versions Concerns: Migration Content Warnings: Spelling Error Release: EAP 6.0.0 GA, EAP 6.0.1 Technologies: HornetQ Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Configuration Concerns: Administration Concerns: Application Development Topic Lifecycle: Assigned Topic Lifecycle: Written
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 7672, Revision 162834
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Concerns: Migration Release: EAP 6.0.0 GA Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Assigned Topic Lifecycle: Written
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 5235, Revision 84149
- INFO: Assigned Writer: sgilda Common Names: Java Persistence API (JPA), Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 5718, Revision 84354
- INFO: Assigned Writer: sgilda Common Names: Java Database Connectivity (JDBC), Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Grammar Errors, Spelling Error Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Configuration Concerns: Datasources Concerns: Application Development Topic Lifecycle: Assigned Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 8831, Revision 77374
- INFO: Assigned Writer: sgilda Common Names: Java Persistence API (JPA), Migration from Enterprise Application Platform 5, Migration from Previous Versions Concerns: Migration Release: EAP 6.0 Technologies: Hibernate Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Assigned Topic Lifecycle: Written
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 5719, Revision 84355
- INFO: Assigned Writer: dmison Common Names: EJB Content Warnings: Spelling Error Release: EAP 6 Alpha Technologies: JBoss EJB3 Topic Types: Task IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Written Topic Lifecycle: QE Fail
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4370, Revision 83887
- INFO: Assigned Writer: dryan, sgilda Common Names: Java Messaging Service (JMS), Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Alpha, EAP 6 Beta Technologies: HornetQ Topic Types: Task Topic Lifecycle: IA Proposed Concerns: Administration Topic Lifecycle: Approved Topic Lifecycle: Assigned Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 11567, Revision 299164
- INFO: Assigned Writer: sgilda Common Names: Application Server, Classloading, Migration from Enterprise Application Platform 5, Migration from Previous Versions, Remoting Concerns: Migration Release: EAP 6.0.1 Technologies: JBoss Modules Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Concerns: Application Development Topic Lifecycle: Assigned Topic Lifecycle: Written
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4642, Revision 40178
- INFO: Assigned Writer: sgilda Common Names: Java Naming and Directory Interface (JNDI), Migration, Migration from Enterprise Application Platform 5 Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4914, Revision 84043
- INFO: Assigned Writer: sgilda Common Names: Classloading, Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Beta Technologies: JBoss Modules Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Concerns: Troubleshooting Topic Lifecycle: Written Topic Lifecycle: Edited Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4641, Revision 40178
- INFO: Assigned Writer: sgilda Common Names: Java Naming and Directory Interface (JNDI), Migration, Migration from Enterprise Application Platform 5 Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4640, Revision 83980
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Grammar Errors, Spelling Error Release: EAP 6 Beta Technologies: Hibernate Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Configuration Concerns: Datasources Concerns: Application Development Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 5327, Revision 66277
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Configuration Concerns: Application Development Concerns: Application or Service Deployment Topic Lifecycle: Assigned Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4909, Revision 84038
- INFO: Assigned Writer: sgilda Common Names: Java Persistence API (JPA), Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Beta Technologies: Hibernate Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Configuration Concerns: Application Development Topic Lifecycle: Written Topic Lifecycle: Edited Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4910, Revision 84039
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Beta Technologies: JAX-WS Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Concerns: Application or Service Deployment Concerns: Troubleshooting Topic Lifecycle: Assigned Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 9154, Revision 152955
- INFO: Assigned Writer: sgilda Common Names: Application Server, High Availability (HA) Clustering, Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6.0.1 Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Configuration Concerns: Administration Concerns: Application Development Topic Lifecycle: Assigned Topic Lifecycle: Written
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 5578, Revision 80036
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 5576, Revision 84290
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Grammar Errors, Spelling Error Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 5577, Revision 84291
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 9039, Revision 152924
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Concerns: Migration Content Warnings: Spelling Error Release: EAP 6.0.0 GA Technologies: Hibernate Topic Types: Reference Topic Lifecycle: IA Triage IA Priority: IA Low Priority Concerns: Application Development Concerns: Troubleshooting Topic Lifecycle: Assigned Topic Lifecycle: Written
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4944, Revision 84057
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Beta Technologies: Hibernate Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Concerns: Application or Service Deployment Topic Lifecycle: Written Topic Lifecycle: Edited Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4945, Revision 84058
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions, Security Content Warnings: Spelling Error Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4601, Revision 299164
- INFO: Assigned Writer: sgilda Common Names: Classloading, Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6.0.0 Beta Technologies: JBoss Modules Topic Types: Task Topic Lifecycle: IA Triage Concerns: Getting Started Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4600, Revision 299164
- INFO: Assigned Writer: sgilda Common Names: Classloading, Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6.0.0 Beta Topic Types: Task Topic Lifecycle: IA Triage Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Assigned Topic Lifecycle: Written Topic Lifecycle: Edited Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4948, Revision 84061
- INFO: Assigned Writer: sgilda Common Names: High Availability (HA) Clustering, Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Written Topic Lifecycle: Edited Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4602, Revision 74630
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Release: EAP 6 Beta Technologies: JBoss Modules Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Concerns: Troubleshooting Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4949, Revision 78375
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Concerns: Application or Service Deployment Topic Lifecycle: Assigned Topic Lifecycle: Written Topic Lifecycle: Edited Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 8323, Revision 85677
- INFO: Assigned Writer: sgilda Common Names: Java Persistence API (JPA), Migration from Enterprise Application Platform 5 Content Warnings: Spelling Error Release: EAP 6 Beta Technologies: Hibernate Topic Types: Reference Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Assigned Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4952, Revision 84064
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4953, Revision 40178
- INFO: Assigned Writer: sgilda Common Names: Classloading, Migration, Migration from Enterprise Application Platform 5 Release: EAP 6 Beta Technologies: JBoss Modules Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Configuration Concerns: Application Development Concerns: Troubleshooting Topic Lifecycle: Assigned Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4958, Revision 84068
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Grammar Errors, Spelling Error Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4593, Revision 83957
- INFO: Assigned Writer: sgilda Common Names: Logging, Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Beta Technologies: JBoss Logging Topic Types: Task Topic Lifecycle: IA Triage Topic Lifecycle: IA Proposed Concerns: Application Development Concerns: Application or Service Deployment Topic Lifecycle: Written Topic Lifecycle: Edited Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4592, Revision 83956
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Grammar Errors, Spelling Error Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage Topic Lifecycle: IA Proposed Concerns: Web Development Concerns: Application Development Concerns: Application or Service Deployment Topic Lifecycle: Written Topic Lifecycle: Edited Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4595, Revision 83958
- INFO: Assigned Writer: sgilda Common Names: Classloading, Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Configuration Concerns: Application Development Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4957, Revision 76999
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4594, Revision 66283
- INFO: Assigned Writer: sgilda Common Names: Logging, Migration from Enterprise Application Platform 5, Migration from Previous Versions Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4588, Revision 299164
- INFO: Assigned Writer: sgilda Common Names: Classloading, Migration from Enterprise Application Platform 5, Migration from Previous Versions Release: EAP 6.0.0 Beta Technologies: JBoss Modules Topic Types: Task Topic Lifecycle: IA Triage Topic Lifecycle: IA Proposed Concerns: Application Development Concerns: Application or Service Deployment Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4589, Revision 66264
- INFO: Assigned Writer: sgilda Common Names: Java Naming and Directory Interface (JNDI), Migration from Enterprise Application Platform 5, Migration from Previous Versions Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage Topic Lifecycle: IA Proposed Concerns: Application Development Concerns: Application or Service Deployment Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 5419, Revision 84237
- INFO: Assigned Writer: sgilda Common Names: Java Naming and Directory Interface (JNDI), Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Beta Topic Types: Reference Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Configuration Concerns: Application Development Concerns: Application or Service Deployment Topic Lifecycle: Assigned Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4590, Revision 83954
- INFO: Assigned Writer: sgilda Common Names: Logging, Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Beta Technologies: JBoss Logging Topic Types: Task Topic Lifecycle: IA Triage Topic Lifecycle: IA Proposed Concerns: Application Development Concerns: Application or Service Deployment Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4591, Revision 83955
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Beta Technologies: Hibernate Topic Types: Task Topic Lifecycle: IA Triage Topic Lifecycle: IA Proposed Concerns: Application Development Concerns: Application or Service Deployment Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4587, Revision 83953
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage Topic Lifecycle: IA Proposed Concerns: Configuration Concerns: Datasources Concerns: Application Development Concerns: Application or Service Deployment Topic Lifecycle: Assigned Topic Lifecycle: Written Topic Lifecycle: Edited Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 5409, Revision 84232
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Configuration Concerns: Application Development Concerns: Application or Service Deployment Topic Lifecycle: Assigned Topic Lifecycle: Written Topic Lifecycle: Edited Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 5408, Revision 40178
- INFO: Assigned Writer: sgilda Common Names: Migration, Migration from Enterprise Application Platform 5 Release: EAP 6 Beta Technologies: Iron Jacamar Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Configuration Concerns: Datasources Concerns: Application Development Concerns: Application or Service Deployment Topic Lifecycle: Assigned Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 5411, Revision 40178
- INFO: Assigned Writer: sgilda Common Names: Migration, Migration from Enterprise Application Platform 5 Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Configuration Concerns: Application Development Concerns: Application or Service Deployment Topic Lifecycle: Assigned Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 5410, Revision 84233
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Configuration Concerns: Application Development Concerns: Application or Service Deployment Topic Lifecycle: Assigned Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 5412, Revision 75220
- INFO: Assigned Writer: sgilda Common Names: Classloading, Migration from Enterprise Application Platform 5, Migration from Previous Versions Release: EAP 6 Beta Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Configuration Concerns: Application Development Concerns: Application or Service Deployment Topic Lifecycle: Assigned Topic Lifecycle: Written Topic Lifecycle: Edited Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4941, Revision 308747
- INFO: Assigned Writer: sgilda Common Names: Classloading, Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6.0.0 Beta Technologies: JBoss Modules Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Configuration Concerns: Application Development Concerns: Application or Service Deployment Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 5250, Revision 84156
- INFO: Assigned Writer: sgilda Common Names: Classloading, Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Beta Technologies: JBoss Modules, JBoss Web Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Configuration Concerns: Application Development Concerns: Application or Service Deployment Concerns: Troubleshooting Topic Lifecycle: Assigned Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 5131, Revision 84103
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Beta Technologies: Hibernate Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 5251, Revision 84157
- INFO: Assigned Writer: sgilda Common Names: Classloading, Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Beta Technologies: JBoss Modules Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Configuration Concerns: Application Development Concerns: Application or Service Deployment Concerns: Troubleshooting Topic Lifecycle: Assigned Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 5130, Revision 84102
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Beta Technologies: Hibernate Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 5132, Revision 66318
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Release: EAP 6 Beta Technologies: Hibernate Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Written Topic Lifecycle: Edited Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 5946, Revision 327997
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Concerns: Migration Content Warnings: Spelling Error Release: EAP 6.0.0 Beta Topic Types: Overview Topic Lifecycle: IA Triage IA Priority: IA Low Priority Concerns: Getting Started Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 9104, Revision 138514
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Concerns: Migration Release: EAP 6.0 Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Application Development Topic Lifecycle: Assigned Topic Lifecycle: Written
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4961, Revision 84072
- INFO: Assigned Writer: sgilda Common Names: Java Naming and Directory Interface (JNDI), Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Beta Topic Types: Reference Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Configuration Concerns: Application Development Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 4422, Revision 83894
- INFO: Assigned Writer: sgilda Common Names: Migration from Enterprise Application Platform 5, Migration from Previous Versions Content Warnings: Spelling Error Release: EAP 6 Beta Technologies: Hibernate Validator Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Concerns: Getting Started Concerns: Configuration Concerns: Application Development Topic Lifecycle: Assigned Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 7449, Revision 85304
- INFO: Assigned Writer: twells Common Names: Java Persistence API (JPA) Content Warnings: Spelling Error Release: EAP 6.0 Technologies: Hibernate Topic Types: Reference IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Configuration Concerns: Application Development Topic Lifecycle: Approved Topic Lifecycle: Assigned Topic Lifecycle: Written Topic Lifecycle: QE Pass
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 11489, Revision 299164
- INFO: Assigned Writer: sgilda Common Names: Application Server, Classloading, Migration from Enterprise Application Platform 5, Migration from Previous Versions Concerns: Migration, User Administration Release: EAP 6.0.0 Beta, EAP 6.0.0 GA, EAP 6.0.1, EAP 6.1.0 Technologies: JBoss Modules Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Configuration Concerns: Application Development Concerns: Application or Service Deployment Topic Lifecycle: Assigned Topic Lifecycle: Written
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Topic ID 11490, Revision 299164
- INFO: Assigned Writer: sgilda Common Names: Application Server, Classloading, Migration from Enterprise Application Platform 5, Migration from Previous Versions Concerns: Migration, User Administration Release: EAP 6.0.0 Beta, EAP 6.0.0 GA, EAP 6.0.1, EAP 6.1.0 Technologies: JBoss Modules Topic Types: Task Topic Lifecycle: IA Triage IA Priority: IA Low Priority Topic Lifecycle: IA Proposed Concerns: Configuration Concerns: Web Development Concerns: Application Development Concerns: Application or Service Deployment Topic Lifecycle: Written
- INFO: Topic URL
- WARNING: This topic's translated content is older than the specfied topic's content.
Compiler Glossary
- "This topic contains an invalid element that can't be converted into a DOM Element."
- The topic XML contains invalid elements that cannot be successfully converted in DOM elements.
- To fix this error please remove or correct any invalid XML elements or entities. Note: HTML Entities aren't classified as valid XML Entities.
- "This topic contains strings that are marked as "fuzzy"."
- The topic hasn't finished being translated by the Translator(s) yet, as such the topic will be displayed using translated content that may not be 100% correct.
- To fix this warning, please contact the Translator(s) responsible for translating the topics in this locale.
- "This topic doesn't have well-formed xml."
- The topic XML is not well-formed XML and maybe missing opening or closing element statements.
- To fix this error please ensure that all XML elements having an opening and closing statement and all XML reserved characters are represented as XML entities.
- "This topic has invalid Docbook XML."
- The topic XML is not valid against the Docbook 4.5 DTD.
- To fix this error please ensure that all XML elements are valid Docbook elements . Also check to ensure all XML sub elements are valid for the root XML element.
- "This topic has invalid Injection Points."
- The topic XML contains Injection Points that cannot be resolved into links.
- To fix this error please ensure that all the topics referred to by Injection Points are included in the build and/or have adequate relationships.
- "This topic has no XML data"
- The topic doesn't have any XML Content to display.
- To fix this warning, open the topic URL and add some content.
- "This topic hasn't been fully translated."
- The topic hasn't finished being translated by the Translator(s) yet, as such the topic will be displayed using incomplete translated content.
- To fix this warning, please contact the Translator(s) responsible for translating the topics in this locale.
- "This topic hasn't been pushed for translation."
- The topic hasn't been pushed for translation yet, as such the topic will be displayed using the original topic's content.
- To fix this warning, please send a request to the User responsible for pushing Translations to Zanata and request that the topic be pushed for translation.
- "This topic is an untranslated topic."
- The topic hasn't been translated yet by the Translator(s), as such the topic will be displayed using the untranslated content.
- To fix this warning, please contact the Translator(s) responsible for translating the topics in this locale.
- "This topic's translated content is older than the specfied topic's content."
- A previous revision of this topic has been pushed to Zanata, and has been translated. This previous revision has been included in the book, but will display content that is older than what was defined by the Content Specification.
- To fix this warning, please send a request to the User responsible for pushing Translations to Zanata and request that the topic be pushed for translation. In most cases the existing translations will be able to be reused when the topic is pushed to Zanata.
- "This untranslated topic uses content that is older than the specfied topic's content."
- A previous revision of this topic has been pushed to Zanata, and has not yet been translated.This previous revision has been included in the book, but will display content that is older than what was defined by the Content Specification.
- To fix this warning, please send a request to the User responsible for pushing Translations to Zanata and request that the topic be pushed for translation.
付録A 改訂履歴
改訂履歴 | |||
---|---|---|---|
改訂 0.1-1.400 | 2013-10-31 | Rüdiger Landmann | |
| |||
改訂 0.1-1 | Tue Dec 18 2012 | Tom Wells | |
| |||
改訂 0.0-2 | Wed Nov 21 2012 | Tom Wells | |
| |||
改訂 0.0-1 | Wed Nov 14 2012 | Tom Wells | |
|