移行ガイド

JBoss Enterprise Application Platform 6

JBoss Enterprise Application Platform 6 向け

エディッション 2

Sande Gilda

Eamon Logue

Darrin Mison

David Ryan

Misty Stanley-Jones

Keerat Verma

Tom Wells

概要

本書は、以前のバージョンの JBoss Enterprise Application Platform よりアプリケーションを移行するためのガイドになります。

前書き

1. 表記方法

本ガイドは特定の単語や語句を強調したり、 記載内容の特定部分に注意を引かせる目的で次のような表記方法を使用しています。
PDF版 および印刷版では、 Liberation Fonts セットから採用した書体を使用しています。 ご使用のシステムに Liberation Fonts セットがインストールされている場合、 HTML 版でもこのセットが使用されます。 インストールされていない場合は代替として同等の書体が表示されます。 注記: Red Hat Enterprise Linux 5 およびそれ以降のバージョンにはデフォルトで Liberation Fonts セットが収納されます。

1.1. 印刷における表記方法

特定の単語や語句に注意を引く目的で 4 種類の表記方法を使用しています。 その表記方法および適用される状況は以下の通りです。
等幅の太字
シェルコマンド、ファイル名、パスなどシステムへの入力を強調するために使用しています。またキー配列やキーの組み合わせを強調するのにも使用しています。 例えば、
現在作業中のディレクトリ内のファイル my_next_bestselling_novel の内容を表示させるには、 シェルプロンプトで cat my_next_bestselling_novel コマンドを入力してから Enter を押してそのコマンドを実行します。
上記にはファイル名、シェルコマンド、キーが含まれています。 すべて等幅の太字で表されているため文中内で見分けやすくなっています。
キーが 1 つの場合と複数のキーの組み合わせになる場合を区別するため、 その組み合わせを構成するキー同士をハイフンでつないでいます。 例えば、
Enter を押してコマンドを実行します。
Press Ctrl+Alt+F2 to switch to a virtual terminal.
最初の段落では押すべき 1 つのキーを特定して強調しています。 次の段落では同時に押すべき 3 つのキーの組み合わせが 2 種類ありそれぞれ強調されています。
ソースコードの説明では 1 段落内で提示されるクラス名、 メソッド、 関数、 変数名、 戻り値を上記のように 等幅の太字 で表示します。 例えば、
ファイル関連のクラス群はファイルシステムに対しては filesystem、 ファイルには file、 ディレクトリには dir をそれぞれ含みます。 各クラスは個別に関連する権限セットを持っています。
プロポーショナルの太字
アプリケーション名、 ダイアログボックスのテキスト、ラベル付きボタン、 チェックボックスとラジオボタンのラベル、 メニュータイトルとサブメニュータイトルなどシステム上で見られる単語や語句を表します。 例えば、
メインメニューバーから システム > 個人設定 > マウス の順で選択し マウスの個人設定 を起動します。 ボタン タブ内で 左ききのマウス チェックボックスをクリックしてから 閉じる をクリックしマウスの主要ボタンを左から右に切り替えます (マウスを左ききの人が使用するのに適した設定にする)。
To insert a special character into a gedit file, choose ApplicationsAccessoriesCharacter Map from the main menu bar. Next, choose SearchFind… 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 EditPaste from the gedit menu bar.
上記には、 アプリケーション名、 システム全体のメニュー名と項目、 アプリケーション固有のメニュー名、 GUI インタフェースで見られるボタンやテキストがあります。 すべてプロポーショナルの太字で表示されているため文中内で見分けやすくなっています。
等幅の太字で且つ斜体 または プロポーショナルの太字で且つ斜体
等幅の太字やプロポーショナルの太字はいずれであっても斜体の場合は置換可能なテキストか変化するテキストを示します。 斜体は記載されている通りには入力しないテキスト、あるいは状況に応じて変化する出力テキストを表します。 例えば、
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
Note the words in bold italics above — username, domain.name, file-system, package, version and release. Each word is a placeholder, either for text you enter when issuing a command or for text displayed by the system.
タイトル表示のような標準的な使用の他、 斜体は新しい重要な用語が初めて出現する場合にも使用されます。 例えば、
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. 注記および警告

情報が見過ごされないよう 3 種類の視覚的なスタイルを使用して注意を引いています。

注記

注記は説明している部分に対するヒントや近道あるいは代替となる手段などになります。注記を無視しても悪影響はありませんが知っておくと便利なコツを見逃すことになるかもしれません。

重要

重要ボックスは見逃しやすい事項を詳細に説明しています。現在のセッションにのみ適用される設定上の変更点、 更新を適用する前に再起動が必要なサービスなどがあります。重要ボックスを無視してもデータを喪失するような結果にはなりませんがイライラ感やフラストレーションが生じる可能性があります。

警告

警告は無視しないでください。警告を無視するとデータを喪失する可能性が非常に高くなります。

第1章 はじめに

1.1. 移行ガイドについて

JBoss Enterprise Application Platform 6 は Java Enterprise Edition 6 仕様の軽量で高速な実装です。アーキテクチャーはモジュラーサービスコンテナ上に構築され、アプリケーションが必要な時にサービスをオンデマンドで有効にします。この新しいアーキテクチャーにより、JBoss Enterprise Application Platform 5 で実行されるアプリケーションを JBoss Enterprise Application Platform 6 で実行するには変更が必要になる場合があります。
本ガイドは、Enterprise Application Platform 5.1 のアプリケーションを Enterprise Application Platform 6 で正常に実行しデプロイするために必要な変更内容の文書化を目的としています。デプロイメントおよびランタイム時に発生する問題の解決方法や、アプリケーションの挙動が変更されないようにする方法が記載されています。これは新しいプラットフォームへ移行する最初の一歩となります。アプリケーションが正常にデプロイされ実行されたら、 JBoss Enterprise Application Platform 6 の新機能を使用するよう各コンポーネントのアップグレードを計画することができます。

第2章 移行の準備

2.1. 移行の準備

アプリケーションサーバーの構造が以前のバージョンと異なるため、移行ついて調査し、計画を立ててからアプリケーションを移行した方がよいでしょう。
  1. JBoss Enterprise Application Platform 6 の新機能と変更内容の確認

    本リリースには、JBoss Enterprise Application Platform 5 のアプリケーションのデプロイメントに影響する可能性がある変更が複数あります。これには、ファイルディレクトリ構造、スクリプト、デプロイメント設定、クラスローディング、JNDI ルックアップなどの変更が含まれます。詳細は 「JBoss Enterprise Application Platform 6 の新機能と変更内容」 を参照してください。
  2. スタートガイドの確認

    JBoss Enterprise Application Platform 6 の 開発ガイドに記載されている、アプリケーション開発の開始に関する章を読むようにしてください。この章には以下に関する重要な情報が含まれています。
    • Java EE 6
    • 新しいモジュラークラスローディングシステム
    • ファイル構造の変更
    • JBoss Enterprise Application Platform 6 のダウンロードおよびインストール方法
    • JBoss Developer Studio のダウンロードおよびインストール方法
    • 開発環境に対応する Maven の設定方法
    • 製品に同梱されるクイックスタートサンプルアプリケーションのダウンロードおよび実行方法
  3. アプリケーションの分析および理解

    アプリケーションはそれぞれ異なるため、移行を開始する前に既存アプリケーションのコンポーネントやアーキテクチャーについて十分に理解する必要があります。

重要

アプリケーションを変更する前に、必ずバックアップコピーを作成するようにしてください。

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 ネーミング構文」 を参照してください。
また、JBoss Enterprise Application Platform 6 開発ガイドの 「アプリケーションの開発」の章に記載されている、「JBoss Enterprise Application Platform 6 の新しい機能と変更された機能」も参照してください。

第3章 アプリケーションの移行

3.1. ほとんどのアプリケーションで必要な変更

3.1.1. ほとんどのアプリケーションで必要な変更の確認

JBoss Enterprise Application Platform 6 のクラスローディングと設定の変更はほとんどのアプリケーションに影響します。また、Enterprise Application Platform 6 は新しい標準の移植可能な JNDI ネーミング構文を使用します。これらの変更はほとんどのアプリケーションに影響するため、アプリケーションを移行する際、最初に以下の情報を確認することが推奨されます。

3.1.2. クラスローディングの変更

3.1.2.1. クラスローディングの変更によるアプリケーションの更新

モジュラークラスローディングは JBoss Enterprise Application Platform 6 における主な変更の 1 つで、ほぼすべてのアプリケーションが影響を受けます。アプリケーションを移行する際、最初に次の情報を確認してください。
  1. 最初に、アプリケーションのパッケージと依存関係を確認します。詳細は 「クラスローディングの変更によるアプリケーション依存関係の更新」を参照してください。
  2. アプリケーションがロギングを行う場合、正しいモジュールの依存関係を指定する必要があります。手順の詳細は 「ロギング依存関係の編集」 を参照してください。
  3. モジュラークラスローディングの変更により、EAR または WAR のパッケージ構造を変更する必要がある場合があります。詳細は 「EAR および WAR パッケージの編集」 を参照してください。

3.1.2.2. モジュールの依存関係を理解する

概要

モジュールは独自のクラスと、明示的または暗黙的な依存関係を持つモジュールのクラスのみにアクセスすることが可能です。

手順3.1 タスク

  1. 暗黙的な依存関係を理解する

    サーバー内のデプロイヤーは、javax.apisun.jdk などの一般的に使用されるモジュール依存関係を暗黙的かつ自動的に追加します。これにより、ランタイム時にデプロイメントに対してクラスを可視化でき、開発者が依存関係を明示的に追加する作業が軽減されます。暗黙的な依存関係がいつどのように追加されるかについては、 JBoss Enterprise Application Platform 6 開発ガイドの「クラスローディングとモジュール」の章に記載されている暗黙的なモジュール依存関係の説明を参照してください。
  2. 明示的な依存関係を理解する

    その他のクラスに対してはモジュールを明示的に指定する必要があります。明示的に指定しないと、欠落している依存関係が原因でデプロイメントエラーやランタイムエラーが発生します。依存関係が欠落していると、サーバーログに ClassNotFoundExceptionsNoClassDefFoundErrors トレースが記録されます。複数のモジュールが同じ 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 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.jarmyApp.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.jarmyApp.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.xmljboss-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

jboss-deployment-structure.xml は JBoss Enterprise Application Platform 6 の新しい任意のデプロイメント記述子です。このデプロイメント記述子はデプロイメントのクラスローディングを制御できるようにします。
このデプロイメント記述子の 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 ディレクトリからのみロードされます。指定の場所でアプリケーションアーティファクトのパッケージ化に失敗した場合、ClassNotFoundExceptionNoClassDefError などのランタイムエラーが発生します。

これらのクラスローディングエラーを解決するには、アプリケーションアーカイブの構造を編集するか、カスタムモジュールを定義する必要があります。

リソースパッケージの編集
アプリケーションのみがリソースを使用できるようにするには、プロパティーファイル、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

  1. WAR アーカイブをデプロイする場合、これらのプロパティーを WAR の WEB-INF/classes/ フォルダーでパッケージ化する必要があります。
  2. これらのプロパティーを EAR のすべてのコンポーネントに対してアクセス可能にするには、JAR のルートでパッケージ化し、EAR の lib/ フォルダーに置く必要があります。

3.1.3.5. カスタムモジュールの作成

次の手順では、Enterprise Application Platform サーバー上で実行されているすべてのアプリケーションがプロパティーファイルやその他のリソースを使用できるようにするため、カスタムモジュールを作成する方法について説明します。

手順3.3 カスタムモジュールの作成

  1. module/ ディレクトリ構造を作成し、ファイルを追加します。
    1. EAP_HOME/module ディレクトリ下にディレクトリ構造を作成し、ファイルや JAR が含まれるようにします。例は次の通りです。
      $ cd EAP_HOME/modules/ $ mkdir -p myorg-conf/main/properties
      
      
    2. 作成した EAP_HOME/modules/myorg-conf/main/properties/ ディレクトリにプロパティーファイルを移動します。
    3. 次の 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>
      
  2. サーバー設定ファイルの ee サブシステムを編集します。JBoss CLI を使用するか、手作業でファイルを編集します。
    • 次の手順に従って JBoss CLI を使用し、サーバー設定ファイルを編集します。
      1. サーバーを起動し、管理 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
          
      2. ee サブシステムに myorg-conf<global-modules> 要素を作成するには、コマンドラインで以下を入力します。
        /subsystem=ee:write-attribute(name=global-modules, value=[{"name"=>"myorg-conf","slot"=>"main"}])
        
        次の結果が表示されるはずです。
        {"outcome" => "success"}
        
    • サーバー設定ファイルを手作業で編集したい場合は、次の手順に従ってください。
      1. サーバーを停止し、テキストエディターでサーバー設定ファイルを開きます。スタンドアロンサーバーを実行している場合は、EAP_HOME/standalone/configuration/standalone.xml ファイルになります。管理ドメインを実行している場合は、EAP_HOME/domain/configuration/domain.xml ファイルになります。
      2. 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>
        
  3. my.properties という名前のファイルを正しいモジュールの場所にコピーしたとします。すると、以下のようなコードを使用してプロパティーファイルをロードできるようになります。
    Thread.currentThread().getContextClassLoader().getResource("my.properties");
    

3.1.4. ロギングの変更

3.1.4.1. ロギング依存関係の編集

概要

JBoss LogManager はすべてのロギングフレームワークのフロントエンドをサポートするため、現在のロギングコードを保持することも、新しい JBoss のロギングインフラストラクチャーへ移行することも可能です。モジュラークラスローディングが変更されたため、いずれの場合でもアプリケーションを変更して必要な依存関係を追加する必要があるでしょう。

手順3.4 アプリケーションロギングコードの更新

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 を設定する

  1. 次の内容が含まれる 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>
    
  2. WAR をデプロイする場合は jboss-deployment-structure.xml ファイルを WEB-INF/ ディレクトリに置きます。EAR をデプロイする場合は jboss-deployment-structure.xml ファイルを META-INF/ ディレクトリに置きます。
  3. デプロイメントの lib/ ディレクトリに log4j.properties または log4j.xml ファイルが含まれるようにします。
  4. アプリケーションをデプロイします。

注記

log4j 設定ファイルを使用すると、ランタイム時に log4j ロギング設定を変更することができなくなります。

3.1.4.3. 新しい JBoss ロギングフレームワークを使用したコードの変更

概要

新しいフレームワークを使用するには、次のようにインポートとコードを変更します。

手順3.6 タスク

  1. インポートとロギングコードの変更

    新しい 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);
    }
    
  2. ロギング依存関係の追加

    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 のパッケージ構造を変更する必要がある場合があります。モジュール依存関係は次の順序でロードされます。

  1. システム依存関係
  2. ユーザー依存関係
  3. ローカルリソース
  4. デプロイメント間の依存性

手順3.7 アーカイブパッケージの編集

  1. WAR のパッケージ化

    WAR は単一のモジュールで、WAR のすべてのクラスは同じクラスローダーでロードされます。そのため WEB-INF/lib/ ディレクトリにパッケージされるクラスは、WEB-INF/classes ディレクトリのクラスと同様に処理されます。
  2. 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. 設定変更によるアプリケーションの更新

JBoss Enterprise Application Platform 5 ではサービスやサブシステムが多くの異なるファイルに設定されていました。JBoss Enterprise Application 6 では、設定は主に 1 つのファイルで行われます。アプリケーションが以下のサービスやリソースを使用する場合は、設定の変更が必要となる場合があります。
  1. アプリケーションがデータソースを使用する場合は 「DataSource 設定の更新」を参照してください。
  2. アプリケーションが JPA を使用し、現在 Hibernate JAR をバンドルする場合は、 「Hibernate または JPA に対するデータソースの設定」を参照し、移行のオプションについて確認してください。
  3. アプリケーションがリソースアダプターを使用する場合は、 「リソースアダプター設定の更新」を参照してください。
  4. 「アプリケーションセキュリティーの変更設定」 を参照し、基本的なセキュリティーの設定変更方法について確認してください。

3.1.6.2. DataSource 設定の更新

概要

以前のバージョンの JBoss Enterprise Application Platform では、ファイル名の最後に *-ds.xml が付くファイルに JCA データソースの設定が定義されていました。このファイルはサーバーの deploy/ ディレクトリにデプロイされるか、アプリケーションによってパッケージ化されました。JDBC ドライバーは server/lib/ ディレクトリにコピーされるか、アプリケーションの WEB-INF/lib/ ディレクトリにパッケージ化されました。この設定方法は開発環境では今でもサポートされていますが、JBoss の管理ツールではサポートされていないため実稼働環境では推奨されません。

JBoss Enterprise Application Platform 6 ではデータソースはサーバー設定ファイルに設定されています。Enterprise Application Platform インスタンスが管理ドメインで実行されている場合、データソースは domain/configuration/domain.xml ファイルに設定されます。Enterprise Application Platform インスタンスがスタンドアロンサーバーとして実行されている場合、データソースは standalone/configuration/standalone.xml ファイルに設定されます。このように設定されたデータソースは、Web 管理コンソールやコマンドラインインターフェース (CLI) などが含まれる JBoss 管理インターフェースを使用して管理および制御されます。これらのツールはデプロイメントの管理や、管理ドメインで実行されている複数のサーバーの設定を容易にします。
次の項では、使用可能な管理ツールによって管理およびサポートされるよう、データソースの設定を変更する方法について説明します。
JBoss Enterprise Application Platform 6 の管理可能なデータソース設定の移行

JDBC 4.0 対応のドライバーはデプロイメントまたはコアモジュールとしてインストールすることができます。JDBC 4.0 対応のドライバーには、ドライバークラス名を指定する META-INF/services/java.sql.Driver ファイルが含まれています。JDBC 4.0 対応でないドライバーには追加の設定が必要となります。ドライバーを JDBC 4.0 対応にする方法や、現在のデータソース設定を Web 管理コンソールや CLI によって管理可能な設定に更新する方法の詳細については 「JDBC ドライバーのインストールと設定」 を参照してください。

アプリケーションが Hibernate や JPA を使用する場合、追加の変更が必要となる場合があります。詳細は 「Hibernate または JPA に対するデータソースの設定」 を参照してください。
IronJacamar 移行ツールを使用した設定データの変換

「IronJacamar ツールを使用してデータソースとリソースアダプターの設定を移行する」 の通り、IronJacamar ツールを使用してデータソースやリソースアダプター設定を移行することが可能です。このツールは *-ds.xml スタイルの設定ファイルを JBoss Enterprise Application Platform 6 が想定する形式に変換します。

3.1.6.3. JDBC ドライバーのインストールと設定

概要

次の 2 つの方法の 1 つを用いて JDBC ドライバーをコンテナにインストールすることができます。

  • デプロイメントとしてのインストール
  • コアモジュールとしてのインストール
これらの方法の利点と欠点は次の通りです。

JBoss Enterprise Application Platform 6 ではデータソースはサーバー設定ファイルに設定されています。Enterprise Application Platform インスタンスが管理ドメインで実行されている場合、データソースは domain/configuration/domain.xml ファイルに設定されます。Enterprise Application Platform インスタンスがスタンドアロンサーバーとして実行されている場合、データソースは standalone/configuration/standalone.xml ファイルに設定されます。両モードで同じであるスキーマ参照情報は JBoss Enterprise Application Platform 6 インストールの doc/ ディレクトリにあります。ここでは説明上、サーバーがスタンドアロンサーバーとして稼働し、データソースが standalone.xml ファイルに設定されていると仮定します。

手順3.8 JDBC ドライバーのインストールと設定

  1. JDBC ドライバーのインストール

    1. 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/ ディレクトリにオーバーレイする必要があります。
    2. コアモジュールとしての JDBC ドライバーのインストール

      1. EAP_HOME/modules/ ディレクトリ下にファイルパス構造を作成します。この構造にはドライバー JAR とモジュールを定義する module.xml ファイルが含まれます。例えば、前述の MySQL JDBC ドライバーを使用して次のようなディレクトリ構造を作成します。EAP_HOME/modules/com/mysql/main/
      2. 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」エラーが発生します。
      3. 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 対応でないドライバーをインストールすることができます。
      この方法の難点は次の通りです。
      • モジュールの設定が難しくなります。
      • 管理ドメインで実行されている各サーバーへモジュールを手作業でコピーする必要があります。
  2. データソースの設定

    1. データベースドライバーの追加

      <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>
      
    2. データソースの作成

      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 バンドルの削除

  1. アプリケーションライブラリーフォルダーより Hibernate JAR を削除します。
  2. 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 Enterpise Application Platform 6 インスタンスがスタンドアロンサーバーとして実行されている場合、 ${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:globaljava:modulejava:app の 3 つです。JNDI ルックアップを使用するアプリケーションを変更し、新しい標準 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
JNDI ネーミングコンテキストの詳細は「JSR 316: JavaTM Platform, Enterprise Edition (Java EE) 仕様バージョン 6」 の EE.5.2.2 「Application Component Environment Namespaces」 を参照してください。 http://jcp.org/en/jsr/detail?id=316 からこの仕様をダウンロードすることができます。

3.1.8.3. JNDI 名前空間のルールの確認

概要

JBoss Enterprise Application Platform 6 では JNDI 名前空間の名前が改良され、アプリケーションにバインドされた名前に対して一貫した予測可能なルールを提供するだけでなく、将来的に互換性の問題が起こらないよう対処されます。そのため、現在の名前空間が新しいルールに準拠しない場合、問題が発生することがあります。

名前空間は次のルールに準拠する必要があります。

  1. DefaultDSjdbc/DefaultDS のような修飾されていない相対名は、コンテキストに応じて java:comp/envjava:module/envjava:jboss/env のいずれかに相対的に修飾されなければなりません。
  2. /jdbc/DefaultDS などの修飾されていない absolute 名は java:jboss/root 名に相対的に修飾されなければなりません。
  3. java:/jdbc/DefaultDS などの修飾された absolute 名は、前述の修飾されていない absolute 名と同様に修飾されなければなりません。
  4. 特殊な java:jboss 名前空間は AS サーバーインスタンス全体で共有されます。
  5. プレフィックスが java: である relative 名は、 compmoduleappglobal、 プロプラエタリ 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. アプリケーションのアーキテクチャーやコンポーネントによって異なる変更の確認

アプリケーションが下記の技術やコンポーネントを使用する場合、JBoss Enterprise Application Platform 6 へ移行する時にアプリケーションの変更が必要となることがあります。
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.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 つを用いて問題解決を図ることができます。

重要

この手順は、最初にアプリケーションを JBoss Enterprise Application Platform 6 上で実行できるようにすることを目的としています。この設定はサポート対象ではなく、Hibernate 4 を使用するよう次の手順でアプリケーションをアップグレードする必要があります。

手順3.12 タスク

  1. 必要な Hibernate 3 の JAR をアプリケーションライブラリへコピーする

    見つからないクラスが含まれる特定の Hibernate 3 JAR をアプリケーションの lib/ ディレクトリへコピーするか、他の方法を使用してクラスパスに追加すると問題を解決できることがあります。これにより、Hibernate のバージョンを複数使用することが原因で ClassCastExceptions や他のクラスローディングの問題が発生することがあります。この問題が発生した場合、次の方法で対処する必要があります。
  2. Hibernate 3 ライブラリのみを使用するようサーバーへ指示する

    JBoss Enterprise Application Platorm 6 では、Hibernate 3.5 (およびそれ以降のバージョン) の永続性プロバイダー jar をアプリケーションと共にパッケージ化することができます。Hibernate 3 ライブラリのみを使用し、Hibernate 4 を除外するようサーバーを指示するには、次のように jboss.as.jpa.providerModulepersistence.xmlhibernate3-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 ライブラリが使用されます。
  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 インスタンス上のすべてのアプリケーションデプロイメントで一意となる値でなければなりません。
In Hibernate 4.x, if 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 へマッピングします。
In Hibernate 4.x, if new_generator_mappings is set to false:
  • @GeneratedValue(AUTO) が Hibernate の "native" へマッピングします。
  • @GeneratedValue(TABLE)org.hibernate.id.MultipleHiLoPerTableGenerator へマッピングします。
  • @GeneratedValue(SEQUENCE) が Hibernate の "seqhilo" へマッピングします。
これらプロパティーの詳細を確認するには、http://www.hibernate.org/docs へ移動し、 Hibernate 4.1 Developer Guide を参照してください。

3.2.2.4. Hibernate 4 を使用するよう Hibernate 3 のアプリケーションを更新する

概要

Hibernate 4 を使用するようアプリケーションを更新する場合、更新の一部である一般的な更新は、アプリケーションが現在使用する Hibernate のバージョンに関係なく適用されます。その他の更新についてはアプリケーションが現在使用するバージョンを判断する必要があります。

手順3.13 Hibernate 4 を使用するようアプリケーションを更新する

  1. 自動インクリメントシーケンスジェネレーターのデフォルトの動作は JBoss Enterprise Application Platform 6 で変更になりました。詳細は 「Hibernate アイデンティティの自動生成値の既存動作を保持する」 を参照してください。
  2. アプリケーションによって現在使用されている Hibernate のバージョンを判断し、下記より適切な更新手順を選択します。
  3. アプリケーションをクラスター化された環境で実行する場合は 「クラスター環境で稼働する、移行された Seam および Hibernate アプリケーションの永続プロパティーの変更」 を参照してください。

3.2.2.5. Hibernate アイデンティティの自動生成値の既存動作を保持する

Hibernate 3.5 には @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 5 のアプリケーションに対するガイドライン

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 になります。この値は変更しないでください。
これらプロパティー設定の詳細は 「Hibernate JPA 永続ユニットプロパティ」 を参照してください。

3.2.2.6. Hibernate 3.3.x アプリケーションの Hibernate 4.x への移行

手順3.14

  1. Hibernate の text タイプを JDBC LONGVARCHAR へマッピングする

    バージョンが 3.5 以前の Hibernate では text 型は JDBC CLOB へマッピングされていました。Java String プロパティーを JDBC CLOB へマッピングするため、新しい Hibernate タイプ materialized_clob が Hibernate 4 に追加されました。JDBC CLOB へのマッピングが目的で type="text" と設定されているプロパティーがアプリケーションにある場合は、次の項目の 1 つを実行する必要があります。
    1. アプリケーションが hbm マッピングファイルを使用する場合、プロパティーを type="materialized_clob" に変更します。
    2. アプリケーションがアノテーションを使用する場合、@Type(type = "text")@Lob に置き換えます。
  2. コードを確認し戻り値型の変更を探す

    数値集約の基準射影 (criteria projection) は HQL と同じ値型を返すようになるはずです。その結果、org.hibernate.criterion の以下の射影からの戻り型が変更されます。
    1. CountProjectionProjections.rowCount()Projections.count(propertyName)Projections.countDistinct(propertyName) の変更により、count および count distinct 射影は Long 値を返すようになります。
    2. Projections.sum(propertyName) の変更により、sum 射影はプロパティー型によって異なる値タイプを返すようになります。

      注記

      アプリケーションコードを変更しないと、java.lang.ClassCastException が発生する原因となります。
      1. Long、Short、Integer、プリミティブ型整数のいずれかとしてマッピングされているプロパティーは Long 値が返されます。
      2. Float、Double、プリミティブ浮動小数点型のいずれかとしてマッピングされているプロパティーは Double 値が返されます。

3.2.2.7. Hibernate 3.5.x アプリケーションの Hibernate 4.x への移行

手順3.15

  1. AnnotationConfiguration の設定へのマージ

    AnnotationConfiguration は既に廃止されていますが、移行に影響しないようにしなければなりません。
    今でも hbm.xml ファイルを使用している場合、JBoss Enterprise Application Platform 6 では 以前のリリースで使用された org.hibernate.cfg.DefaultNamingStrategy ではなく、AnnotationConfigurationorg.hibernate.cfg.EJB3NamingStrategy を使用することに注意してください。そのため、名前付けの不一致が発生する可能性があります。名前付けストラテジーがデフォルトのアソシエーション (要素の多対多やコレクション) テーブルに依存する場合、この問題が発生することがあります。この問題を解決するには、レガシーの org.hibernate.cfg.DefaultNamingStrategy を使用するよう Hibernate に指示するため Configuration#setNamingStrategy を呼び出して org.hibernate.cfg.DefaultNamingStrategy#INSTANCE に渡します。
  2. 新しい 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
  3. 環境変数の編集

    1. Oracle で materialized_clob または materialized_blob プロパティーを使用している場合、グローバル環境変数 hibernate.jdbc.use_streams_for_binary を true に設定する必要があります。
    2. PostgreSQL で CLOB または BLOB プロパティーを使用している場合、グローバル環境変数 hibernate.jdbc.use_streams_for_binary を false に設定する必要があります。

3.2.2.8. クラスター環境で稼働する、移行された Seam および Hibernate アプリケーションの永続プロパティーの変更

JPA コンテナーによって管理されるアプリケーションを移行する場合には、正しい永続プロパティが自動的にコンテナーに渡されるので、シリアル化問題は発生しないはずです。
ただし、Hibernate における変更により、移行した 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 クラスター環境で稼働する永続プロパティ設定

  1. hibernate.session_factory_name 値を一意名に設定します。この名前は、JBoss Enterprise Application Platform インスタンス上の全アプリケーションデプロイメントにわたって一意である必要があります。例は次の通りです。
    <property name="hibernate.session_factory_name" value="jboss-seam-booking.ear_session_factory"/>
    
  2. hibernate.ejb.entitymanager_factory_name 値を一意名に設定します。この名前は、JBoss Enterprise Application Platform インスタンス上の全アプリケーションデプロイメントにわたって一意である必要があります。例は次の通りです。
    <property name="hibernate.ejb.entitymanager_factory_name" value="seam-booking.ear_PersistenceUnitName"/>
    
Hibernate JPA 永続ユニットプロパティーに関する詳しい情報は 「Hibernate JPA 永続ユニットプロパティ」 を参照してください。

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 の使用が前提となっています。

以下は JBoss Enterprise Application Platform 5.x の 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 ファイルを変更する

  1. 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>
      
  2. 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
    
Hibernate のキャッシュプロパティーに関する詳細は 「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 つまたは複数のタスクを実行する必要がある場合があります。

  1. デフォルトの ValidatorFactory へのアクセス

    JBoss Enterprise Application Platform 6 は、デフォルトの ValidatorFactory を java:comp/ValidatorFactory 以下にある JNDI コンテキストにバインドします。
  2. ライフサイクルでトリガーされた検証の理解

    Hibernate Core 4 と組み合わせて使用する場合、ライフサイクルベースの検証は Hibernate Core により自動的に有効になります。
    1. 検証は、エンティティー INSERT 操作、UPDATE 操作、および DELETE 操作に対して行われます。
    2. 次のプロパティーを使用してイベントタイプによってグループが検証されるよう設定することができます。
      • javax.persistence.validation.group.pre-persist
      • javax.persistence.validation.group.pre-update
      • javax.persistence.validation.group.pre-remove
      これらのプロパティーの値は、検証するグループの、カンマで区切られた完全修飾クラス名です。
      検証グループは、Bean Validation 仕様の新しい機能です。この新しい機能を使用しない場合は、Hibernate Validator 4 に移行するときに変更を必要としません。
    3. ライフサイクルベース検証は、javax.persistence.validation.mode プロパティーを none に設定することにより無効できます。このプロパティーの他の有効値は auto (デフォルト値)、callback、および ddl です。
  3. アプリケーションが手動の検証を使用するよう設定

    1. 検証を手動で制御する場合、次のいずれかの方法で Validator を作成できます。
      • getValidator() メソッドを使用して ValidatorFactory から Validator インスタンスを作成します。
      • Validator インスタンスを EJB、CDI Bean、または他の Java EE の挿入可能なリソースに挿入します。
    2. Validator インスタンスをカスタマイズするために、ValidatorFactory.usingContext() により返された ValidatorContext を使用できます。この API を使用して、カスタム MessageInterpolatorTraverableResolver、および ConstraintValidatorFactory を設定できます。これらのインターフェースは、Bean Validation 仕様で指定され、Hibernate Validator 4 で新しい機能です。
  4. 新しい Bean Validation の制約を使用するようコードを変更

    Hibernate Validator 4 への移行時に、新しい Bean レベル検証制約では、コードの変更が必要です。
    1. Hibernate Validator 4 にアップグレードする場合は、次のパッケージの制約を使用する必要があります。
      • javax.validation.constraints
      • org.hibernate.validator.constraints
    2. Hibernate Validator 3 に存在していたすべての制約は、Hibernate Validator 4 でも引き続き利用できます。これらを使用するには、指定されたクラスをインポートし、場合によっては、制約パラメーターの名前またはタイプを変更する必要があります。
  5. カスタム制約の使用

    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 の変更の設定

JBoss Enterprise Application Platform 6 は自動的に RESTEasy を設定するため、手作業で設定する必要はありません。そのため、web.xml ファイルから既存の RESTEasy の設定をすべて削除し、次の 3 つのオプションの 1 つに置き換える必要があります。

  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 として指定する必要があることに注意してください。最後にフォワードスラッシュやアスタリスクがあってはなりません。
  2. サブクラス 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 アノテーションを使用して設定されたアプリケーションパスを上書きすることもできます。
  3. 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 セキュリティーレルムの変更設定

JBoss Enterprise Application Platform 5 では LDAP セキュリティーレルムは login-config.xml ファイルの <application-policy> 要素に設定されていました。JBoss Enterprise Application Platform 6 では、LDAP セキュリティーレルムはサーバー設定ファイルの <security-domain> 要素に設定されています。サーバー設定ファイルはスタンドアロンサーバーでは standalone/configuration/standalone.xml ファイルになります。サーバーが管理ドメインで実行されている場合、domain/configuration/domain.xml ファイルがサーバー設定ファイルになります。
JBoss Enterprise Application Platform 5 の 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>
JBoss Enterprise Application Platform 6 のサーバー設定ファイルにある LDAP 設定の例は次の通りです。
<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>

注記

JBoss Enterprise Application Platform 6 では XML パーサーが変更になりました。JBoss Enterprise Application Platform 5 では、次のようにモジュールオプションを要素の内容として指定しました。
<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 ブリッジを設定する

JBoss Enterprise Application Platform 6 ではデフォルトの JMS 実装が JBoss Messaging から HornetQ に変更になりました。JMS ブリッジを使用すると、最も簡単に JMS メッセージを 1 つの環境から別の環境に移行することができます。現在、JBoss Enterprise Application Platform 6 には JMS ブリッジが含まれていませんが、JMS ブリッジを JBoss Enterprise Application Platform 5.x にデプロイしてメッセージを Enterprise Application Platform 6 に移動することが可能です。リリース間のクラスの競合を避けるため、次の方法を用いて JMS ブリッジを設定する必要があります。SAR ディレクトリとブリッジの名前は任意で、好きな名前に変更できます。

手順3.19 JMS ブリッジの設定

  1. 次の例に従って、SAR が含まれるように Enterprise Application Platform 5 の deploy ディレクトリにサブディレクトリを作成します。 EAP5_HOME/server/PROFILE_NAME/deploy/myBridge.sar
  2. EAP5_HOME/server/PROFILE_NAME/deploy/myBridge.sar/META-INF という名前のサブディレクトリを作成します。
  3. 以下と似た情報が含まれる 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 に作成されました。
  4. 次の 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 プロバイダーとして使用するためにアプリケーションを移行

JBoss Messaging は、JBoss Enterprise Application Platform 6 に同梱されなくなりました。アプリケーションがメッセージングプロバイダーとして JBoss Messaging を使用する場合は、JBoss Messaging コードを HornetQ と置き換える必要があります。

手順3.20 開始する前に

  1. クライアントとサーバーをシャットダウンします。
  2. JBoss Messaging データのバックアップコピーを作成します。

手順3.21 HornetQ へのプロバイダーの変更

  1. 設定の転送

    最初に、既存の 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 インストールによって異なります。
  2. アプリケーションコードの変更

    アプリケーションコードで標準的な JMS を使用する場合は、コードの変更が必要ありません。ただし、アプリケーションが JBoss Messaging に固有な機能を使用する場合は、HornetQ で利用可能な同等の機能を使用するようコードを変更する必要があります。
    HornetQ でメッセージングを設定する方法の詳細については、 「HornetQ でのメッセージングの設定」 を参照してください。
  3. ブリッジおよび JMS 管理オブジェクトの移行

    JBoss Messaging は、 Managed Bean サービスを使用してブリッジと接続ファクトリーなどの JMS オブジェクト、キュー、およびトピックを設定します。HornetQ は POJO (Plain Old Java Object) を使用してこれらのオブジェクトを設定します。HornetQ で同等のパラメーターを使用するには設定パラメーターを更新する必要があります。
  4. 既存のメッセージの移行

    JBoss Messaging データベースのすべてのメッセージを HornetQ バインディングに移動します。

3.2.5.3. HornetQ でのメッセージングの設定

JBoss Enterprise Application Platform 6 でのメッセージングの設定では、管理コンソールまたは管理 CLI の使用が推奨されます。どちらの管理ツールでも、standalone.xmldomain.xml 設定ファイルを手作業で編集せずに永続的な変更を行うことができますが、デフォルト設定ファイルのメッセージングコンポーネントについて理解できると便利です。デフォルトの設定ファイルには、管理ツールを使用するドキュメントの例に参考用の設定ファイルスニペットがあります。

3.2.6. クラスタリングの変更

3.2.6.1. クラスタリングに対するアプリケーションの変更

手順3.22

  1. クラスタリグが有効な状態で JBoss Enterprise Application Platform 6 を起動する

    JBoss Enterprise Application Platform 5.x でクラスタリングを有効にするには、次のように all プロファイル (またはその派生プロファイル) を使用してサーバーインスタンスを起動する必要がありました。
    $ EAP5_HOME/bin/run.sh -c all
    JBoss Enterprise Application Platform 6 でクラスタリングを有効にする方法は、サーバーがスタンドアロンであるか管理ドメインで実行されているかによって異なります。
    1. 管理ドメインで実行されているサーバーに対してクラスタリングを有効にする

      ドメインコントローラーを使用して起動したサーバーに対してクラスタリングを有効にするには、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>
    2. スタンドアロンサーバーに対してクラスタリングを有効にする

      スタンドアロンサーバーに対してクラスタリングを有効にするには、次のように適切な設定ファイルを使用してサーバーを起動します。 $ EAP_HOME/bin/standalone.sh --server-config=standalone-ha.xml
  2. バインドアドレスの指定

    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 インターフェースが指定されています。
  3. マルチキャストアドレスおよびポートの指定

    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
  4. 代替のプロトコルスタックの使用

    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 サービスがデプロイメントを制御し、クラスターのマスターノードのみにアーカイブがデプロイされるようにするための処置でした。ホットデプロイメント機能がなかったため、再デプロイメントにはサーバーの再起動が必要でした。また、マスターノードに障害が発生し、他のノードがマスターとして引き継ぐ必要がある場合、シングルトンサービスはサービスを提供するためデプロイメントプロセス全体を実行する必要がありました。

JBoss Enterprise Application Platform 6 ではこれが変更になりました。SingletonService を使用してクラスターの各ノードに目的のサービスがインストールされますが、サービスは一度に 1 つのノード上でのみ起動されます。これにより、デプロイメントの要件が簡素化され、ノード間でシングルトンマスターサービスを移動するために必要な時間が最小限になります。

手順3.23 HA シングルトンサービスの実装

  1. HA シングルトンサービスアプリケーションの作成

    シングルトンサービスとしてデプロイされる SingletonService デコレーターでラッピングされたサービスの簡単な例は次の通りです。
    1. シングルトンサービスを作成します。

      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() + "'");
              }
          }
      }
      
    2. サーバー起動時にサービスを 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();
            }
          }
        }
      }
      
    3. クライアントよりサービスへアクセスするためステートレスセッション 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!");
              }
          }
      }
      
    4. 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();
      } 
      
      
  2. クラスタリングが有効な状態で各 Jboss Enterprise Application Platform 6 インスタンスを起動する

    クラスターを有効化する方法は、サーバーがスタンドアローンであるか管理ドメインで実行されているかによって異なります。
    1. 管理ドメインで実行されているサーバーに対してクラスタリングを有効にする

      ドメインコントローラーを使用して起動したサーバーに対してクラスタリングを有効にするには、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 と入力します。
    2. スタンドアローンサーバーに対してクラスタリングを有効にする

      スタンドアローンサーバーに対してクラスタリングを有効にするには、次のようにノード名と 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 のような引数を使用し、ポートオフセットを持つ後続のサーバーインスタンスを開始して対応することも可能です 。
  3. アプリケーションをサーバーにデプロイする

    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 のプロキシをルックアップし、返されたプロキシ上で呼び出しを行う。
本項では 2 つ目の方法について取り上げます。JNDI を使用するクライアントは コーディングの変更が必要となります。

JBoss Enterprise Application Platform 5 では、EJB リモートインターフェースはデフォルトで JNDI にてバインドされ、ローカルインターフェースの場合は「ejbName/local」、リモートインターフェースの場合は「ejbName/remote」という名前でした。クライアントアプリケーションは 「ejbName/remote」を使用して Bean をルックアップしました。
JBoss Enterprise Application Platform 6 では、以下の構文を用いて 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")

サーバーおよびクライアントコードなどが含まれる完全な作業例は Quickstart にあります。詳細は、JBoss Enterprise Application Platform 6 開発ガイドの「アプリケーションの開発」の章にある「クイックスタートチュートリアルの確認」を参照してください。
JNDI を使用したリモート呼び出しの詳細については、JBoss Enterprise Application Platform 6 開発ガイドの「Enterprise JavaBeans」の章にある「JNDI を使用したリモートでのセッション Bean の呼び出し」を参照してください。

3.2.8.2. JNDI を使用したリモートでのセッション Bean の呼び出し

このタスクは、JNDI を使用してセッション Bean の呼び出すリモートクライアントへサポートを追加する方法を説明します。Maven を使用してプロジェクトがビルドされていることが前提となります。
remote-ejb クイックスタートには、この機能を実証する Maven プロジェクトが含まれています。デプロイするセッション Bean のプロジェクトとリモートクライアントのプロジェクトの両方が含まれています。下記のコード例はリモートクライアントのプロジェクトから引用されています。
このタスクでは、セッション 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 ポートを覚えておく必要があります。
リモートクライアントよりセッション Bean を呼び出すには、最初にプロジェクトを適切に設定する必要があります。

手順3.24 セッション Bean のリモート呼び出しに対する Maven プロジェクト設定の追加

  1. 必要なプロジェクト依存関係の追加

    必要な依存関係が含まれるようにするため、プロジェクトの pom.xml を更新する必要があります。
  2. 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 行をアンコメントします。コンテナ内のリモーティングインターフェースは同じポートを使用して安全な接続と安全でない接続をサポートします。
  3. リモートビジネスインターフェースの依存関係の追加

    セッション 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>
これでプロジェクトが適切に設定されたため、コードを追加してセッション Bean へアクセスしたり呼び出しすることができるようになりました。

手順3.25 JNDI を使用して Bean プロキシを取得し、Bean のメソッドを呼び出す

  1. チェック例外の処理

    次のコードに使用されるメソッドの 2 つ (InitialContext() および lookup()) は、タイプ javax.naming.NamingException のチェック例外を持っています。これらのメソッド呼び出しは NamingException をキャッチする try/catch ブロックか、NamingException のスローが宣言されたメソッドで囲まなければなりません。remote-ejb クイックスタートでは NamingException のスローが宣言されたメソッドで囲む方法を使用します。
  2. 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 ファイルより読み取られます。
  3. 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 名は特別な構文によって定義されます。
  4. 呼び出しメソッド

    プロキシ 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 間の通信は呼び出し側に透過的です。
これで、Maven プロジェクトを設定してリモートサーバー上で呼び出しを行うセッション Bean をサポートし、JNDI を使用してサーバーより読み出したプロキシ Bean を使用してセッション Bean メソッドを呼び出すコードを作成できるようになりました。

3.2.9. EJB 2.x の変更

3.2.9.1. EJB 2.x を使用するアプリケーションの更新

JBoss Enterprise Application Platform 6 は EJB 2.x へのサポートを提供しますが、一部コードの変更が必要で、サーバーを完全なプロファイルで起動する必要があります。

手順3.26 JBoss Enterprise Application Platform 6 で EJB 2.x を起動する

  1. JNDI 名前空間の新しいルールを使用するようコードを変更する

    EJB 3.0 と同様に、EJB 2.x でも完全な JNDI プレフィックスを使用する必要があります。新しい JNDI 名前空間ルールやコード例の詳細は 「アプリケーションの JNDI 名前空間名の更新」 を参照してください。
    以前のリリースから JNDI 名前空間を更新する方法を表す例は 「以前のリリースにおける JNDI 名前空間の例、また JBoss Enterprise Application Platform 6 での名前空間の指定方法」 にあります。
  2. 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 ではクライアント側のインターセプターがありません。
  3. jboss-web.xml ファイル記述子の変更

    <ejb-ref> に対する <jndi-name> を変更し、新しい JNDI 完全修飾ルックアップ形式を使用するようにします。
  4. jboss.xml デプロイメント記述子ファイルの置換

    Java Enterprise Edition (EE) によって定義される ejb3-jar.xml デプロイメント記述子によって提供される機能を上書きしたり追加するため、jboss.xmljboss-ejb3.xml デプロイメント記述子に置き換えられました。この新ファイルは jboss.xml との互換性がないため、jboss.xml はデプロイメントで無視されます。
  5. 完全プロファイルでのサーバーの起動

    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/ ディレクトリにコピーする必要があります。

重要

この例は、最初にアプリケーションを JBoss Enterprise Application Platform 6 上で実行できるようにすることを目的としています。この設定はサポート対象ではなく、Hibernate 4 を使用するよう次の手順でアプリケーションをアップグレードする必要があります。

手順3.27 Seam 2.2 アーカイブの移行

  1. データソース設定の更新

    一部の Seam 2.2 の例は、java:/ExampleDS という名前のデフォルトの JDBC データソースを使用します。このデフォルトデータソースは JBoss Enterprise Application Platform 6 では java:jboss/datasources/ExampleDS に変更になりました。例のデータベースがアプリケーションによって使用される場合、以下の方法の 1 つ実行します。
    • 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
      
    データソースの設定方法の詳細は 「DataSource 設定の更新」 を参照してください。
  2. 必要な依存関係の追加

    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>
    アプリケーションがサードパーティーのロギングフレームワークを使用する場合は、 「ロギング依存関係の編集」 に記載されている依存関係を追加する必要があります。
  3. 外部フレームワークまたは他の場所より依存するアーカイブをコピーする

    Seam 2.2 アプリケーションが Hibernate 3.x を使用する場合でも、JBoss Enterprise Application Platform 6 にパッケージ化されている Hibernate 4 モジュールを使用してアプリケーションを実行することが可能ですが、存在しない Hibernate 3.x クラスがあるため、以前の Hibernate JAR を 1 つ以上 /lib ディレクトリへコピーする必要がある場合があります。Hibernate クラスを示す ClassNotFoundExceptionsClassCastExceptions が発生した場合、次のように 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>
  4. Seam 2.2 JNDI エラーのデバッグおよび解決

    Seam 2.2 アプリケーションを移行する時に次のような javax.naming.NameNotFoundException エラーがログに記録されることがあります。
    javax.naming.NameNotFoundException: Name 'jboss-seam-booking' not found in context ''
    コード全体の JNDI ルックアップを変更したくない場合、次のようにアプリケーションの components.xml ファイルを変更することができます。
    1. 既存の core-init 要素の置き換え

      最初に、次のように既存の core-init 要素を置き換える必要があります。
      <!-- <core:init jndi-pattern="jboss-seam-booking/#{ejbName}/local" debug="true" distributable="false"/>   -->
      <core:init debug="true" distributable="false"/>
      
    2. サーバーログでの 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
      
    3. 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 アプリケーションの移行

Spring アプリケーションの移行に関する情報は JBoss Web Framework Kit のドキュメントを参照してください。このドキュメントは http://access.redhat.com のカスタマーポータルよりダウンロード可能です。ナレッジ製品ドキュメント とクリックし、JBoss Enterprise Middleware より JBoss Web Framework Kit のリンクをクリックします。

3.2.12. 移行に影響するその他の変更

3.2.12.1. 移行に影響する可能性があるその他の変更について理解する

移行に影響を与える可能性がある JBoss Enterprise Application Platform 6 のその他の変更内容は次の通りです。

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 Enterprise Application Platform 6 に接続するクライアントアプリケーションの移行を計画する場合、クライアントライブラリをバンドルする JAR の名前と場所が変更になったことに注意してください。この JAR の名前は 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 に移行する時に便利なリソースの一覧は次の通りです。
ツール
設定変更の一部を自動化するのに役立つツールが複数あります。詳細は 「移行に便利なツールについて理解する」 を参照してください。
デバッグのヒント
アプリケーションの移行時に発生する問題やエラーの最も一般的な原因と解決法については 「移行の問題のデバッグと解決」を参照してください。
移行の例
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 を探す必要があります。

Tattletale はアプリケーションを再帰的にスキャンし、その内容の詳細レポートを提供する優れたサードパーティーツールです。Tattletale 1.2.0.Bata2 やそれ移行のバージョンには JBoss Enterprise Application Platform 6 で使用される新しい JBoss Modules のクラスローディングに役立つ追加のサポートが含まれています。Tattletale の 「JBoss EAP 6」レポートを使用して、自動的に依存するモジュール名を特定および生成し、アプリケーションの jboss-deployment-structure.xml ファイルが含まれるようにすることが可能です。

手順4.1 アプリケーション依存関係を検索するため Tattletale をインストールし実行する

注記

Tattletale は JBoss Enterprise Application Platform 6 の一部としてはサポートされないサードパーティーのツールです。Tattletale のインストール方法や使用方法に関する最新のドキュメントは、Tattletale の Web サイト http://www.jboss.org/tattletale をご覧ください。

4.1.4. Tattletale のダウンロードとインストール

手順4.2

  1. http://sourceforge.net/projects/jboss/files/JBoss%20Tattletale より Tattletale バージョン 1.2.0.Beta2 またはそれ以降のバージョンをダウンロードします。
  2. 希望のディレクトリにファイルを展開します。
  3. 次のように TATTLETALE_HOME/jboss-tattletale.properties ファイルを変更します。
    1. ee6as7profiles プロパティーに追加します。
      profiles=java5, java6, ee6, as7
    2. scanreports プロパティーをアンコメントします。

注記

Tattletale は JBoss Enterprise Application Platform 6 の一部としてはサポートされないサードパーティーのツールです。Tattletale のインストール方法や使用方法に関する最新のドキュメントは、Tattletale の Web サイト http://www.jboss.org/tattletale をご覧ください。

4.1.5. Tattletale レポートの作成および確認

手順4.3

  1. 次のコマンドを実行して Tattletale レポートを作成します。 java -jar TATTLETALE_HOME/tattletale.jarAPPLICATION_ARCHIVEOUTPUT_DIRECTORY
    For example: java -jar tattletale-1.2.0.Beta2/tattletale.jar applications/jboss-seam-booking.ear output-results/
  2. ブラウザーで OUTPUT_DIRECTORY/index.html ファイルを開き、「Reports」セクション下の「JBoss EAP 6」をクリックします。
    1. 左側の列にはアプリケーションによって使用されるアーカイブが一覧表示されます。ARCHIVE_NAME リンクをクリックし、場所やマニュフェスト情報、含まれるクラスなどアーカイブの詳細を表示します。
    2. 右側の列にある jboss-deployment-structure.xml リンクは、左側の列に名前が表示されているアーカイブのモジュール依存関係を指定する方法を表示します。このリンクをクリックし、アーカイブのデプロイメント依存関係モジュール情報を定義する方法を確認します。

注記

Tattletale は EAP 6 の一部としてはサポートされないサードパーティーのツールです。Tattletale のインストール方法や使用方法に関する最新のドキュメントは、Tattletale の Web サイト http://www.jboss.org/tattletale をご覧ください。

4.1.6. IronJacamar ツールを使用してデータソースとリソースアダプターの設定を移行する

概要

以前のバージョンのアプリケーションサーバーでは、ファイル名が *-ds.xml で終わるファイルを使用してデータソースとリソースアダプターが設定されデプロイされました。IronJacamar 1.1 ディストリビューションには、これらの設定ファイルを JBoss Enterprise Application Platform 6 が想定する形式に変換できるツールが含まれています。このツールは以前のリリースよりソースの設定ファイルを解析し、XML 設定を作成してファイルを新しい形式で出力します。この XML は JBoss Enterprise Application Platform 6 のサーバー設定ファイルにある正しいサブシステム下にコピーしたり貼り付けすることができます。このツールは最大限努力して以前の属性や要素を新しい形式に変換しますが、生成されたファイルに変更を追加する必要がある場合があります。

注記

IronJacamar 移行ツールは JBoss Enterprise Application Platform 6 の一部としてはサポートされないサードパーティーのツールです。IronJacamar に関する情報は http://www.jboss.org/ironjacamar を参照してください。このツールのインストール方法や使用方法についての最新のドキュメントは http://docs.jboss.org/ironjacamar/userguide/1.1/en-US/html/tools.html#tools_migration を参照してください。

4.1.7. IronJacamar 移行ツールのダウンロードとインストール

注記

移行ツールは IronJacamar 1.1 およびそれ以降のバージョンでのみ使用可能です。

手順4.5

  1. IronJacamar 1.1 またはそれ以降のディストリビューションを http://www.jboss.org/ironjacamar/downloads/ よりダウンロードします。
  2. 希望のディレクトリにダウンロードしたファイルを展開します。
  3. IronJacamar ディストリビューションのコンバータースクリプト探します。
    • Linux のスクリプトは IRONJACAMAR_HOME/doc/as/converter.sh にあります。
    • Windows のバッチファイルは IRONJACAMAR_HOME/doc/as/converter.bat にあります。

注記

IronJacamar 移行ツールは JBoss Enterprise Application Platform 6 の一部としてはサポートされないサードパーティーのツールです。IronJacamar に関する情報は http://www.jboss.org/ironjacamar を参照してください。このツールのインストール方法や使用方法についての最新のドキュメントは http://docs.jboss.org/ironjacamar/userguide/1.1/en-US/html/tools.html#tools_migration を参照してください。

4.1.8. IronJacamar 移行ツールを使用したデータソース設定ファイルの変換

手順4.6

  1. コマンドラインを開き、IRONJACAMAR_HOME/docs/as/ ディレクトリへ移動します。
  2. 次のコマンドを入力してコンバータースクリプトを実行します。
    • Linux の場合: ./converter.sh -ds SOURCE_FILETARGET_FILE
    • Microsoft Windows の場合: ./converter.bat -ds SOURCE_FILETARGET_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 になります。
  3. 目的のファイルより <datasource> 要素をコピーし、<subsystem xmlns="urn:jboss:domain:datasources:1.0"><datasources> 要素下のサーバー設定ファイルに貼り付けます。
    • 管理ドメインで実行されている場合は、XML を EAP_HOME/domain/configuration/domain.xml ファイルへコピーします。
    • スタンドアロンサーバーとして実行されている場合は、XML を EAP_HOME/standalone/configuration/standalone.xml ファイルへコピーします。
  4. 新しい設定ファイルに生成された 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>
    

注記

IronJacamar 移行ツールは JBoss Enterprise Application Platform 6 の一部としてはサポートされないサードパーティーのツールです。IronJacamar に関する情報は http://www.jboss.org/ironjacamar を参照してください。このツールのインストール方法や使用方法についての最新のドキュメントは http://docs.jboss.org/ironjacamar/userguide/1.1/en-US/html/tools.html#tools_migration を参照してください。

4.1.9. IronJacamar 移行ツールを使用したリソースアダプター設定ファイルの変換

手順4.7

  1. コマンドラインを開き、IRONJACAMAR_HOME/docs/as/ ディレクトリへ移動します。
  2. 次のコマンドを入力してコンバータースクリプトを実行します。
    • Linux の場合: ./converter.sh -ra SOURCE_FILETARGET_FILE
    • Microsoft Windows の場合: ./converter.bat -ra SOURCE_FILETARGET_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 になります。
  3. 目的のファイルより <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 ファイルへコピーします。
  4. 新しい設定ファイルに生成された 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>
    

注記

IronJacamar 移行ツールは JBoss Enterprise Application Platform 6 の一部としてはサポートされないサードパーティーのツールです。IronJacamar に関する情報は http://www.jboss.org/ironjacamar を参照してください。このツールのインストール方法や使用方法についての最新のドキュメントは http://docs.jboss.org/ironjacamar/userguide/1.1/en-US/html/tools.html#tools_migration を参照してください。

4.2. 移行の問題のデバッグ

4.2.1. 移行の問題のデバッグと解決

クラスローディングや JNDI ネーミングルール、アプリケーションのその他の変更に伴い、アプリケーションをそのままデプロイしようとすると例外やその他のエラーが発生することがあります。発生する可能性のある一般的な例外やエラーの一部を解決する方法については以下を参照してください。

4.2.2. ClassNotFoundExceptions および NoClassDefFoundErrors のデバッグと解決

概要

通常、ClassNotFoundExceptions は未解決の依存関係が原因で発生します。そのため、他のモジュール上で依存関係を明示的に定義するか、外部ソースより JAR をコピーする必要があります。

手順4.8

  1. 最初に 「JBoss モジュール依存関係の検索」 の手順を実行します。
  2. 見つからないクラスのモジュールがない場合は 「以前のインストールでの JAR の検索」 の通りに JAR を探します。

4.2.3. JBoss モジュール依存関係の検索

依存関係を解決するには、最初に EAP_HOME/modules/ ディレクトリ内で ClassNotFoundException によって指定されたクラスが含まれるモジュールを探します。クラスのモジュールを見つけた場合は、マニフェストエントリーへの依存関係を追加する必要があります。
例えば、ログに次の 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

  1. 最初にクラスの明白なモジュールがあるかを判断します。
    1. EAP_HOME/modules/ ディレクトリへ移動し、ClassNotFoundException で名前付けされたクラスと一致するモジュールパスを探します。
      この例では、モジュール下に org/apache/commons/logging/ のモジュールパスがあります。
    2. EAP_HOME/modules/org/apache/commons/logging/main/module.xml ファイルを開き、モジュール名を探します。この例では org.apache.commons.logging になります。
    3. MANIFEST.MF ファイルの Dependencies にモジュール名を追加します。
      Manifest-Version: 1.0
      Dependencies: org.apache.commons.logging
      
  2. クラスの明白なモジュールパスがない場合、依存関係を他の場所で探す必要があることがあります。
    1. Tattletale レポートで ClassNotFoundException によって名前付けされたクラスを探します。
    2. EAP_HOME/modules ディレクトリで JAR が含まれているモジュールを探し、前の手順の通りにモジュール名を探します。

4.2.4. 以前のインストールでの JAR の検索

サーバーによって定義されたモジュールにパッケージ化された JAR にクラスがない場合は、EAP5_HOME インストールまたは以前のサーバーの lib/ ディレクトリで JAR を探します。
例えば、ログに次の ClassNotFoundException トレースが記録されているとします。
Caused by: java.lang.NoClassDefFoundError: org/hibernate/validator/ClassValidator at java.lang.Class.getDeclaredMethods0(Native Method)
この場合、次を実行してこのクラスが含まれる JAR を探します。
  1. ターミナルを開き、EAP5_HOME/ ディレクトリへ移動します。
  2. コマンドを実行します。
    grep 'org.hibernate.validator.ClassValidator' `find . \-name '*.jar'`
  3. 複数の結果が表示されることもあります。その場合、必要な JAR は次の通りです。
    Binary file ./jboss-eap-5.1/seam/lib/hibernate-validator.jar matches
  4. この JAR をアプリケーションの lib/ ディレクトリへコピーします。
    多数の JAR が必要であることが判明した場合、クラスのモジュールを定義した方が簡単でしょう。クラスのモジュールを定義する方法は、JBoss Enterprise Application Platform 6 開発ガイドの「アプリケーションの開発」の章に記載されているモジュールに関する説明を参照してください。
  5. アプリケーションを再ビルドし、再デプロイします。

4.2.5. ClassCastExceptions のデバッグと解決

ClassCastExceptions は、拡張するクラスではなく他のクラスによってクラスがロードされる時に発生することが多くあります。また、同じクラスが複数の JAR に存在することが原因である場合もあります。

手順4.10

  1. ClassNotFoundException によって名前付けされたクラスが含まれる JAR をすべて見つけるため、アプリケーションを検索します。クラスに対して定義されたモジュールがある場合、アプリケーションの WAR や EAR より重複する JAR を探し、削除します。
  2. クラスが含まれる JBoss モジュールを探し、MANIFEST.MF ファイルまたは jboss-deployment-structure.xml ファイルに依存関係を明示的に定義します。詳細は、JBoss Enterprise Application Platform 6 開発ガイドの「クラスローディングとモジュール」の章にある「クラスローディングとサブデプロイメント」を参照してください。
  3. 上記の手順に従っても解決されない場合、クラスローダーの情報をログに出力すると問題の原因を判断できることがあります。例えば、次の ClassCastException がログに記録されているとします。
    java.lang.ClassCastException: com.example1.CustomClass1 cannot be cast to com.example2.CustomClass2
    1. コードで 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());
      
    2. ログの情報にはどのモジュールがクラスをロードするかが記載されています。アプリケーションに基づき、競合する JAR を削除または移動する必要があります。

4.2.6. DuplicateServiceExceptions のデバッグと解決

JAR のサブデプロイメントに対して DuplicateServiceException が発生したり、 JBoss Enterprise Application Platform 6 に EAR をデプロイする時に WAR アプリケーションが既にインストールされているというメッセージが表示された場合、JBossWS によるデプロイメントの処理方法が変更になったことが原因であることがあります。
JBossWS 3.3.0 リリースでは、TCK6 とのシームレスな互換性を実現するため、サーブレットベースのエンドポイントに対して新しいコンテキストルートマッピングアルゴリズムが導入されました。アプリケーション EAR アーカイブに同じ名前の WAR や JAR が含まれている場合、 JBossWS が同じ名前の WAR コンテキストや Web コンテキストを作成することがあります。Web コンテキストが WAR コンテキストと競合し、デプロイメントエラーが発生します。以下の方法の 1 つを用いてデプロイメントの問題を解決します。
  • 生成される Web コンテキストと WAR コンテキストが一意になるよう、JAR ファイルの名前を WAR とは異なる名前に変更します。
  • <context-root> 要素を jboss-web.xml ファイルに提供します。
  • <context-root> 要素を jboss-webservices.xml ファイルに提供します。
  • WAR の <context-root> 要素を application.xml ファイルでカスタマイズします。

4.2.7. JBoss Seam のデバッグページエラーのデバッグと解決

アプリケーションを移行し、正常にデプロイした後、JBoss Seam デバッグページへリダイレクトされるランタイムエラーが発生することがあります。このページの URL は http://localhost:8080/APPLICATION_CONTEXT/debug.seam です。このページでは、現在のログインセッションに関連する Seam コンテキストで Seam コンポーネントを確認したり調査することができます。
JBoss Seam デバッグページ

図4.1 JBoss Seam デバッグページ

このページへリダイレクトされる原因は、アプリケーションコードで処理されなかった例外を Seam がキャッチしたためであることがほとんどです。通常、「JBoss Seam デバッグページ」上のリンクで例外の根本的な原因を見つけることができます。

手順4.11

  1. このページの Component セクションを拡大し、org.jboss.seam.caughtException コンポーネントを探します。
  2. 原因とスタックトレースが欠落している依存関係を示しているはずです。
    コンポーネント org.jboss.seam.caughtException の情報

    図4.2 コンポーネント org.jboss.seam.caughtException の情報

  3. 「ClassNotFoundExceptions および NoClassDefFoundErrors のデバッグと解決」 に説明されている手法を使用してモジュール依存関係を解決します。
    上記の例では、org.slf4jMANIFEST.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/ 下にあります。

重要

この例は、最初にアプリケーションを JBoss Enterprise Application Platform 6 上で実行できるようにすることを目的としています。この設定はサポート対象ではなく、Hibernate 4 を使用するよう次の手順でアプリケーションをアップグレードする必要があります。

手順4.12 タスク

  1. jboss-web.xml ファイルを削除します。

    jboss-seam-jpa.war/WEB-INF/ ディレクトリより jboss-web.xml ファイルを削除します。jboss-web.xml に定義されるクラスローディングがデフォルトの挙動になります。
  2. 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"/> -->
  3. 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
  4. 残りの依存関係を追加するため 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 への移行」 を参照してください。アプリケーションを移行するには、以下を実行する必要があります。

  1. デフォルトの JSF 2 ではなく JSF 1.2 を初期化する。
  2. JBoss Enterprise Application Platform 6 に同梱される Hibernate JAR ではなく、古いバージョンの Hibernate JAR をバンドルする。
  3. 新しい Java EE 6 の移植可能な JNDI 構文を使用するよう JNDI バインディングを変更する。
最初の 2 つの手順は Seam 2.2 JPA WAR 例の移行で実行済みです。EAR に EJB が含まれるため、新しい 3 つ目の手順が必要となります。

重要

この例は、最初にアプリケーションを JBoss Enterprise Application Platform 6 上で実行できるようにすることを目的としています。この設定はサポート対象ではなく、Hibernate 4 を使用するよう次の手順でアプリケーションをアップグレードする必要があります。

手順4.13 Seam 2.2 Booking 例の移行

  1. 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>
  2. キャッシュプロバイダークラスの hibernate プロパティーの削除

    jboss-seam-booking.jar/META-INF/persistence.xml ファイルのキャッシュプロバイダークラスに対する hibernate プロパティーを削除またはコメントアウトします。
    <!-- <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/> -->
  3. 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
    
  4. 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
    
    次のいずれかの方法を実行します。
    1. コンポーネント要素の追加

      各 EJB に対する jndi-nameWEB-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" />
      
    2. 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 への移行: 手順説明

本書は Seam 2.2 Booking アプリケーションアーカイブを JBoss Enterprise Application Platform 5.1 から JBoss Enterprise Application Platform 6 へ移植する方法について説明するステップバイステップガイドとなります。アプリケーションの移行により適した方法が存在しますが、アプリケーションアーカイブをそのまま JBoss Enterprise Application Platform 6 のサーバーへデプロイし、どうなるか結果を見たいと思っている開発者も多くいるはずです。本書の目的は、アプリケーションアーカイブをそのままデプロイすると発生する可能性のある問題やそのデバッグ方法および解決方法について解説することにあります。
この例ではアプリケーション EAR は EAP6_HOME/standalone/deployments ディレクトリにデプロイされ、変更はアーカイブの変更のみとなります。これにより、問題の発生や解決時にアーカイブ内にある XML ファイルの変更が容易になります。

重要

この例は、最初にアプリケーションを JBoss Enterprise Application Platform 6 上で実行できるようにすることを目的としています。この設定はサポート対象ではなく、Hibernate 4 を使用するよう次の手順でアプリケーションをアップグレードする必要があります。

手順4.14 アプリケーションの移行

  1. 「Seam 2.2 Booking アーカイブのデプロイメントエラーや例外のデバッグおよび解決」 に従ってデプロイメントエラーや例外のデバッグおよび解決を行います。
  2. 「Seam 2.2 Booking アーカイブのランタイムエラーや例外のデバッグおよび解決」 に従ってランタイムエラーや例外のデバッグおよび解決を行います。
この時点で URL http://localhost:8080/seam-booking/ をブラウザーで指定してアプリケーションにアクセスすることができます。demo/demo でログインすると Booking のウェルカムページが表示されます。
変更概要の確認

「Seam 2.2 Booking アプリケーションの移行時に加えられる変更概要の確認」 に従って変更の概要を確認します。

4.3.5. JBoss Enterprise Application Platform 5.1 バージョンの Seam 2.2 Booking アプリケーションのビルドおよびデプロイ

このアプリケーションを移行する前に、JBoss Enterprise Application Platform 5.1 の Seam 2.2 Booking アプリケーションをビルドし、アーカイブを展開してから JBoss Enterprise Application Platform 6 のデプロイメントフォルダーへコピーします。

手順4.15 EAR のビルドとデプロイ

  1. EAR をビルドします。
    $ cd /EAP5_HOME/jboss-eap5.1/seam/examples/booking
    $ ANT_HOME/ant explode
    
  2. 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
    
  3. 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
    
  4. 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 アーカイブのデプロイメントエラーや例外のデバッグおよび解決

前述の手順、「JBoss Enterprise Application Platform 5.1 バージョンの Seam 2.2 Booking アプリケーションのビルドおよびデプロイ」 では Enterprise Application Platform 5.1 の Seam 2.2 Booking アプリケーション構築し、JBoss Enterprise Application Platform 6 のデプロイメントフォルダーにデプロイしました。この手順では発生したデプロイメントエラーをデバッグし解決します。

重要

この例は、最初にアプリケーションを JBoss Enterprise Application Platform 6 上で実行できるようにすることを目的としています。この設定はサポート対象ではなく、Hibernate 4 を使用するよう次の手順でアプリケーションをアップグレードする必要があります。

手順4.16 デプロイメントエラーや例外のデバッグおよび解決

  1. 問題 - 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 ファイルを作成し、アプリケーションを再デプロイします。
  2. 問題 - 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 ファイルを作成し、アプリケーションを再デプロイします。
  3. 問題 - 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 ファイルを作成し、アプリケーションを再デプロイします。
  4. 問題 - 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.jarjboss-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 ファイルを作成し、アプリケーションを再デプロイします。
  5. 問題 - 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.ConfigurationExceptionjava.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.FacesExceptionClassNotFoundException の例と同様、メインディレクトリの 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 ファイルを作成し、アプリケーションを再デプロイします。
  6. 問題 - 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 ファイルを作成し、アプリケーションを再デプロイします。
  7. 問題 - 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-namejava: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 ファイルを作成し、アプリケーションを再デプロイします。
  8. 問題 - 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.jarjboss-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 ファイルを作成し、アプリケーションを再デプロイします。
  9. 問題 - 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.HashtableCacheProviderorg.hibernate.cache.spi.CacheProvider を拡張し、拡張するクラス以外のクラスローダーによってロードされたように見受けられます。org.hibernate.cache.HashtableCacheProvider クラスは hibernate-core.jar にあり、アプリケーションクラスローダーによってロードされます。このクラスを拡張するクラスである org.hibernate.cache.spi.CacheProviderorg/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 ファイルを作成し、アプリケーションを再デプロイします。
  10. この時点で、アプリケーションはエラーを引き起こさずにデプロイされますが、ブラウザーで 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 アーカイブのランタイムエラーや例外のデバッグおよび解決

前述の手順、「Seam 2.2 Booking アーカイブのデプロイメントエラーや例外のデバッグおよび解決」 ではデプロイメントエラーのデバッグ方法について説明しました。この手順では発生したランタイムエラーをデバッグし解決します。

重要

この例は、最初にアプリケーションを JBoss Enterprise Application Platform 6 上で実行できるようにすることを目的としています。この設定はサポート対象ではなく、Hibernate 4 を使用するよう次の手順でアプリケーションをアップグレードする必要があります。

手順4.17 ランタイムエラーや例外のデバッグおよび解決

この時点では、アプリケーションをデプロイしてもログにエラーは記録されていませんが、アプリケーション の URL にアクセスするとエラーがログに記録されます。
  1. 問題 - 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 ファイルを作成し、アプリケーションを再デプロイします。
  2. ランタイムエラーの解決
    この時点で、アプリケーションはエラーを引き起こさずにデプロイされ実行されます。ブラウザーで URL http://localhost:8080/seam-booking/ にアクセスすると正常にログインすることができます。
    前のトピックに戻るには 「Seam 2.2 Booking アーカイブの JBoss Enterprise Application 6 への移行: 手順説明」 をクリックしてください。

4.3.8. Seam 2.2 Booking アプリケーションの移行時に加えられる変更概要の確認

事前に依存関係を判断し、暗黙的な依存関係を一度に追加した方が効率的ですが、この例では問題がどのようにログに表示されるか説明し、デバッグや解決方法に関する情報を提供します。JBoss Enterprise Application Platform 6 へ移行する時にアプリケーションに加えられる変更の概要は次の通りです。

重要

この例は、最初にアプリケーションを JBoss Enterprise Application Platform 6 上で実行できるようにすることを目的としています。この設定はサポート対象ではなく、Hibernate 4 を使用するよう次の手順でアプリケーションをアップグレードする必要があります。
  1. 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>
    
  2. ClassNotFoundExceptions を解決するため、次の JAR を EAP5_HOME/jboss-eap-5.1/seam/lib/ ディレクトリから jboss-seam-booking.ear/lib/ ディレクトリへコピーしました。

    • hibernate-core.jar
    • hibernate-validator.jar
  3. 次のように jboss-seam-booking.jar/META-INF/persistence.xml ファイルを変更しました。
    1. 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>
      
    2. hibernate.cache.provider_class プロパティーをコメントアウトしました。
      <!-- <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/> -->
      
  4. 新しい JNDI バインディングを使用するよう、WAR の lib/components.xml ファイルを変更しました。
    1. 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"/>
      
    2. "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.4002013-10-31Rüdiger Landmann
Rebuild with publican 4.0.0
改訂 0.1-1Tue Dec 18 2012 Tom Wells
JBoss Enterprise Application Platform 6.0.1 Migration Guide, Japanese translation.
改訂 0.0-2Wed Nov 21 2012 Tom Wells
Second build - Japanese translation of the JBoss Enterprise Application Platform 6 Migration Guide.
改訂 0.0-1Wed Nov 14 2012 Tom Wells
First build - Japanese translation of the JBoss Enterprise Application Platform 6 Migration Guide.

法律上の通知

Copyright © 2012 Red Hat, Inc..
The text of and illustrations in this document are licensed by Red Hat under a Creative Commons Attribution–Share Alike 3.0 Unported license ("CC-BY-SA"). An explanation of CC-BY-SA is available at http://creativecommons.org/licenses/by-sa/3.0/. In accordance with CC-BY-SA, if you distribute this document or an adaptation of it, you must provide the URL for the original version.
Red Hat, as the licensor of this document, waives the right to enforce, and agrees not to assert, Section 4d of CC-BY-SA to the fullest extent permitted by applicable law.
Red Hat, Red Hat Enterprise Linux, the Shadowman logo, JBoss, MetaMatrix, Fedora, the Infinity Logo, and RHCE are trademarks of Red Hat, Inc., registered in the United States and other countries.
Linux® is the registered trademark of Linus Torvalds in the United States and other countries.
Java® is a registered trademark of Oracle and/or its affiliates.
XFS® is a trademark of Silicon Graphics International Corp. or its subsidiaries in the United States and/or other countries.
MySQL® is a registered trademark of MySQL AB in the United States, the European Union and other countries.
All other trademarks are the property of their respective owners.