移行ガイド
For Use with Red Hat JBoss Enterprise Application Platform 6
エディッション 1
概要
前書き
第1章 はじめに リンクのコピーリンクがクリップボードにコピーされました!
1.1. Red Hat JBoss Enterprise Application Platform 6 (JBoss EAP 6) の概要 リンクのコピーリンクがクリップボードにコピーされました!
1.2. 移行ガイドの概要 リンクのコピーリンクがクリップボードにコピーされました!
第2章 移行の準備 リンクのコピーリンクがクリップボードにコピーされました!
2.1. 移行の準備 リンクのコピーリンクがクリップボードにコピーされました!
JBoss EAP 6 の新機能と変更内容
本リリースには、JBoss EAP 5 のアプリケーションのデプロイメントに影響する可能性がある変更が複数あります。これには、ファイルディレクトリー構造、スクリプト、デプロイメント設定、クラスローディング、JNDI ルックアップなどの変更が含まれます。詳細については、 「JBoss EAP 6 の新機能と変更内容」を参照してください。スタートガイドの確認
https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/ にある JBoss EAP 6 向け『開発ガイド『』』の章「アプリケーションの開発『』」を必ず参照してください。これには以下に関する重要な情報が含まれます。- Java EE 6
- 新しいモジュール形式クラスローディングシステム
- ファイル構造の変更
- JBoss EAP 6 のダウンロードおよびインストール方法
- JBoss Developer Studio のダウンロードおよびインストール方法
- 各開発環境に対する Maven の設定方法
- 製品に同梱されたクイックスタートサンプルアプリケーションのダウンロードおよび実行方法
アプリケーションの分析および理解
アプリケーションはそれぞれ異なるため、移行を開始する前に既存アプリケーションのコンポーネントやアーキテクチャーについて十分に理解する必要があります。
重要
2.2. JBoss EAP 6 の新機能と変更内容 リンクのコピーリンクがクリップボードにコピーされました!
JBoss EAP 6 が以前のリリースと顕著に異なる点は次の通りです。
- モジュールベースのクラスローディング
- JBoss EAP 5 ではクラスローディングのアーキテクチャーは階層的でした。JBoss EAP 6 ではクラスローディングが JBoss モジュールベースとなりました。これにより、正確にアプリケーションを分離できるようになったため、サーバー実装クラスを隠し、アプリケーションが必要なクラスのみをロードできるようになりました。より優れたパフォーマンスを実現するため、クラスローディングは平行して実行されます。JBoss EAP 5 向けに書かれたアプリケーションはモジュールの依存関係を指定するために変更する必要があります。場合によってはアーカイブを再パッケージ化する必要があることもあります。詳細については、https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/ にある JBoss EAP 6 向け『開発ガイド』『』の章「クラスローディングとモジュール『』」の「クラスローディングとモジュールの概要『』」を参照してください。
- ドメイン管理
- JBoss EAP 6 ではサーバーをスタンドアロンサーバーとして実行したり、管理対象ドメインで実行することが可能です。管理対象ドメインではサーバーグループ全体を一度に設定できるため、サーバーのネットワーク全体で設定を同期化できます。これにより、以前のリリース向けに構築されたアプリケーションが影響を受けることはありませんが、複数サーバーへのデプロイメントの管理を簡素化できます。詳細については、https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/ にある JBoss EAP 6 向け『管理および設定ガイド』『』の「管理対象ドメインについて『』」を参照してください。
注記
ドメインモードは次の JBoss Enterprise 製品ではサポートされていません。- JBoss Portal Platform 6
- デプロイメント設定
- スタンドアロンサーバーと管理対象ドメイン
- JBoss EAP 5 ではプロファイルベースのデプロイメント設定を使用し、これらのプロファイルは
EAP_HOME/server/
ディレクトリーにありました。多くのアプリケーションにはセキュリティー、データベース、リソースアダプターなどの設定に対する複数の設定ファイルが含まれていました。JBoss EAP 6 では 1 つのファイルを使用してデプロイメントを設定できるようになりました。このファイルは、デプロイメントに使用されるすべてのサービスやサブシステムを設定するために使用されます。スタンドアロンサーバーはEAP_HOME/standalone/configuration/standalone.xml
ファイルを使用して設定されます。管理対象ドメインで実行されているサーバーでは、サーバーはEAP_HOME/domain/configuration/domain.xml
ファイルを使用して設定されます。JBoss EAP 5 の複数の設定ファイルに含まれる情報は、新しい単一の設定ファイルへ移行する必要があります。 - デプロイメントの順序付け
- JBoss EAP 6 は、デプロイメントに対して高速で平行した初期化を実行するため、パフォーマンスと効率性が向上します。ほとんどの場合でアプリケーションサーバーは自動的に依存関係を事前判断し、最も効率的なデプロイメントストラテジーを選択します。しかし、EAR としてデプロイされた複数のモジュールで構成され、CDI のインジェクションやリソース参照エントリーの代わりにレガシーの JNDI ルックアップを使用する JBoss EAP 5 のアプリケーションは、設定の変更が必要になります。
- ディレクトリー構造とスクリプト
- 前述のとおり、JBoss EAP 6 はプロファイルベースのデプロイメント設定を使用しません。そのため、
EAP_HOME/server/
ディレクトリーは存在しません。スタンドアロンサーバーの設定ファイルはEAP_HOME/standalone/configuration/
ディレクトリー、デプロイメントはEAP_HOME/standalone/deployments/
ディレクトリーにあります。管理対象ドメインで実行されているサーバーの設定ファイルはEAP_HOME/domain/configuration/
ディレクトリー、デプロイメントはEAP_HOME/domain/deployments/
ディレクトリーにあります。JBoss EAP 5 では、Linux スクリプトEAP_HOME/bin/run.sh
または Windows スクリプトEAP_HOME/bin/run.bat
を使用してサーバーを起動しました。JBoss EAP 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 EAP 6 では、標準化された移植可能な JNDI 名前空間を使用するようになりました。JBoss EAP 5 向けに書かれた JNDI ルックアップを使用するアプリケーションは、新しい JNDI 名前空間の慣習に従って変更する必要があります。JNDI のネーミング構文についての詳細は 「移植可能な EJB JNDI 名」 を参照してください。
2.3. 廃止および未サポート機能リストの確認 リンクのコピーリンクがクリップボードにコピーされました!
第3章 アプリケーションの移行 リンクのコピーリンクがクリップボードにコピーされました!
3.1. ほとんどのアプリケーションで必要な変更 リンクのコピーリンクがクリップボードにコピーされました!
3.1.1. ほとんどのアプリケーションで必要な変更の確認 リンクのコピーリンクがクリップボードにコピーされました!
3.1.2. クラスローディングの変更 リンクのコピーリンクがクリップボードにコピーされました!
3.1.2.1. クラスローディングの変更によるアプリケーションの更新 リンクのコピーリンクがクリップボードにコピーされました!
- 最初に、アプリケーションのパッケージと依存関係を確認します。詳細については、 「クラスローディングの変更によるアプリケーション依存関係の更新」を参照してください。
- アプリケーションがロギングを行う場合、正しいモジュールの依存関係を指定する必要があります。詳細については、 「ロギング依存関係の編集」を参照してください。
- モジュラークラスローディングの変更により、EAR または WAR のパッケージ構造を変更する必要がある場合があります。詳細については、 「EAR および WAR パッケージの編集」を参照してください。
3.1.2.2. モジュールの依存関係の理解 リンクのコピーリンクがクリップボードにコピーされました!
モジュールは独自のクラスと、明示的または暗黙的な依存関係を持つモジュールのクラスのみにアクセスすることが可能です。
手順3.1 モジュールの依存関係の理解
暗黙的な依存関係を理解する
サーバー内のデプロイヤーは、javax.api
やsun.jdk
などの一般的に使用されるモジュール依存関係を暗黙的かつ自動的に追加します。これにより、ランタイム時にデプロイメントに対してクラスを可視化でき、開発者が依存関係を明示的に追加する作業が軽減されます。暗黙的な依存関係がいつどのように追加されるかについては、https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/ にある JBoss EAP 6 向け『開発ガイド『』』の章「クラスローディングとモジュール『』」に記載されている『暗黙的なモジュール依存関係』の説明を参照してください。明示的な依存関係の理解
その他のクラスに対してはモジュールを明示的に指定する必要があります。明示的に指定しないと、不明な依存関係が原因でデプロイメントエラーやランタイムエラーが発生します。依存関係が不明な場合は、サーバーログにClassNotFoundExceptions
トレースまたはNoClassDefFoundErrors
トレースが記録されます。複数のモジュールが同じ JAR をロードしたり、異なるモジュールによってロードされるクラスを拡張するクラスを 1 つのモジュールがロードしたりする場合は、サーバーログにClassCastExceptions
トレースが記録されます。依存関係を明示的に指定するには、MANIFEST.MF
を変更するか、JBoss 固有のデプロイメント記述子ファイルjboss-deployment-structure.xml
を作成します。モジュール依存関係の詳細については、https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/ にある JBoss EAP 6 向け『開発ガイド『』』の章「クラスローディングとモジュール『』」に記載されている『クラスローディングとモジュールの概要』を参照してください。
3.1.2.3. クラスローディングの変更によるアプリケーション依存関係の更新 リンクのコピーリンクがクリップボードにコピーされました!
JBoss EAP 6 のクラスローディングは、以前のバージョンの JBoss EAP とは大きく異なっています。JBoss EAP 6 のクラスローディングは、JBoss モジュールプロジェクトが基盤となっています。各ライブラリーは、すべての JAR をフラットなクラスパスにロードする単一の階層的なクラスローダーではなく、依存するモジュールに対してのみリンクするモジュールとなります。また、JBoss EAP 6 のデプロイメントもモジュールであり、クラスの依存関係が明示的に定義されていないと、アプリケーションサーバーの JAR に定義されているクラスへアクセスできません。アプリケーションサーバーによって定義されるモジュール依存関係の一部は自動的に設定されます。たとえば、Java EE アプリケーションをデプロイする場合、Java EE API の依存関係は自動的または暗黙的に追加されます。サーバーにより自動的に追加される依存関係の完全な一覧については、https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/ にある JBoss EAP 6 用『開発ガイド』の章「『クラストーディングとモジュール』」に記載されている『暗黙的なモジュール依存関係』の説明を参照してください。
モジュラークラスローディングの変更に伴い、アプリケーションを JBoss EAP 6 に移行する際に以下のタスクを 1 つ以上実行する必要がある場合があります。
3.1.3. 設定ファイルの変更 リンクのコピーリンクがクリップボードにコピーされました!
3.1.3.1. JBoss EAP 6 のクラスローディングを制御するファイルの作成または変更 リンクのコピーリンクがクリップボードにコピーされました!
モジュラークラスローディングを使用する JBoss EAP 6 の変更に伴い、依存関係を追加したり、自動的に依存関係がロードされないようにしたりするために、1 つ以上のファイルを作成または変更する必要がある場合があります。クラスローディングとクラスローディングの優先度については、https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/ にある JBoss EAP 6 向け『開発ガイド『』』の章「クラスローディングとモジュール『』」を参照してください。
- jboss-web.xml
jboss-web.xml
ファイルに<class-loading>
要素が定義されている場合はこれを削除する必要があります。JBoss EAP 5 でこの要素によって引き起こされた動作は、JBoss EAP 6 ではクラスローディングのデフォルト動作となったため、この要素を定義する必要がなくなりました。この要素を削除しないと、サーバーログに ParseError と XMLStreamException が記録されます。これは、コメントアウトされたjboss-web.xml
ファイルの<class-loading>
要素の例になります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - MANIFEST.MF
- 手作業による編集
- アプリケーションが使用するコンポーネントやモジュールによって異なりますが、このファイルに 1 つ以上の依存関係を追加する必要がある場合があります。依存関係は
Dependencies
エントリーまたはClass-Path
エントリーとして追加できます。開発者によって編集されたMANIFEST.MF
の例は次のとおりです。Manifest-Version: 1.0 Dependencies: org.jboss.logmanager Class-Path: OrderManagerEJB.jar
Manifest-Version: 1.0 Dependencies: org.jboss.logmanager Class-Path: OrderManagerEJB.jar
Copy to Clipboard Copied! Toggle word wrap Toggle overflow このファイルを編集する場合、必ずファイルの最後にニューライン文字が含まれるようにしてください。 - Maven を使用した生成
- Maven を使用する場合、
pom.xml
ファイルを編集してMANIFEST.MF
ファイルの依存関係を生成する必要があります。アプリケーションによって EJB 3.0 が使用される場合、pom.xml
ファイルに次のようなセクションが含まれることがあります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow EJB 3.0 コードがorg.apache.commons.log
を使用する場合、MANIFEST.MF
ファイルにこの依存関係が存在しなければなりません。この依存関係を生成するには、次のように<plugin>
要素をpom.xml
ファイルに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記の例では、次の依存関係エントリのみがsrc/main/resources/META-INF/MANIFEST.MF
ファイルに含まれる必要があります。Dependencies: org.apache.commons.logging
Dependencies: org.apache.commons.logging
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Maven は完全なMANIFEST.MF
ファイルを生成します。Manifest-Version: 1.0 Dependencies: org.apache.commons.logging
Manifest-Version: 1.0 Dependencies: org.apache.commons.logging
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- jboss-deployment-structure.xml
- このファイルは、クラスローディングを細かく制御するために使用される JBoss 固有のデプロイメント記述子です。
MANIFEST.MF
と同様に、このファイルを使用して依存関係を追加することが可能です。また、自動的な依存関係が追加されないようにしたり、追加のモジュールを定義することが可能で、EAR デプロイメントの分離されたクラスローディング動作を変更したり、追加のリソースルートをモジュールへ追加したりすることもできます。JSF 1.2 モジュールの依存関係を追加し、JSF 2.0 モジュールが自動的にローディングされないようにするjboss-deployment-structure.xml
ファイルの例は次のとおりです。Copy to Clipboard Copied! Toggle word wrap Toggle overflow このファイルに関する詳細については、 「jboss-deployment-structure.xml」を参照してください。 - application.xml
- 以前のバージョンの JBoss EAP では、
jboss-app.xml
ファイルを使用して EAR 内でデプロイメントの順番を制御しました。本バージョンより、Java EE6 仕様によってapplication.xml
に<initialize-in-order>
要素が提供されるようになり、EAR 内の Java EE モジュールがデプロイされる順番は、この要素によって制御されるようになりました。ほとんどの場合、デプロイメントの順番を指定する必要はありません。依存関係インジェクションと、外部モジュールのコンポーネントを参照する resource-refs がアプリケーションによって使用される場合、アプリケーションサーバーは適切で最適なコンポーネントの順番を暗黙的に決定できるため、ほとんどの場合で<initialize-in-order>
要素は必要ありません。myApp.ear
内にmyBeans.jar
とmyApp.war
を持つアプリケーションがあり、myApp.war
@EJB
のサーブレットがmyBeans.jar
より Bean をインジェクトする場合、アプリケーションサーバーは必ずサーブレットの起動前に EJB コンポーネントを使用可能にします。<initialize-in-order>
要素を使用する必要はありません。しかし、次のようなレガシーの JNDI ルックアップスタイルのリモート参照を使用し、Bean へアクセスする場合はモジュールの順番を指定する必要がある場合があります。この場合、EJB コンポーネントがinit() { Context ctx = new InitialContext(); ctx.lookup("TheBeanInMyBeansModule"); }
init() { Context ctx = new InitialContext(); ctx.lookup("TheBeanInMyBeansModule"); }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow myBeans.jar
にあることをサーバーが判断できないため、myBeans.jar
のコンポーネントがmyApp.war
のコンポーネントの前に初期化され開始されるよう強制する必要があります。これには、<initialize-in-order>
要素をtrue
に設定し、myBeans.jar
モジュールとmyApp.war
モジュールの順番をapplication.xml
ファイルに指定します。以下は<initialize-in-order>
要素を使用してデプロイメントの順番を制御する例になります。myBeans.jar
はmyApp.war
ファイルの前にデプロイされます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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) が定義する
ejb-jar.xml
デプロイメント記述子によって提供される機能を上書きしたり追加したりするために、jboss.xml
はjboss-ejb3.xml
デプロイメント記述子に置き換えられました。この新しいファイルはjboss.xml
との互換性がないため、jboss.xml
はデプロイメントで無視されます。 - login-config.xml
login-config.xml
ファイルはセキュリティー設定で使用されないようになりました。セキュリティーはサーバー設定ファイルの<security-domain>
要素に設定されるようになりました。スタンドアロンサーバーではstandalone/configuration/standalone.xml
ファイルになります。管理対象ドメインでサーバーを実行している場合はdomain/configuration/domain.xml
ファイルになります。
3.1.3.2. jboss-deployment-structure.xml リンクのコピーリンクがクリップボードにコピーされました!
jboss-deployment-structure.xml
は JBoss EAP 6 の新しいオプションデプロイメント記述子です。このデプロイメント記述子を使用すると、デプロイメントのクラスローディングを制御できます。
EAP_HOME/docs/schema/jboss-deployment-structure-1_2.xsd
にあります。
3.1.3.3. 新しいモジュラークラスローディングシステムのパッケージリソース リンクのコピーリンクがクリップボードにコピーされました!
以前のバージョンの JBoss EAP では、WEB-INF/
ディレクトリー内のすべてのリソースが WAR クラスパスに追加されました。JBoss EAP 6 では、Web アプリケーションのアーティファクトは WEB-INF/classes
および WEB-INF/lib
ディレクトリーからのみロードされます。指定の場所でアプリケーションアーティファクトのパッケージ化に失敗した場合、ClassNotFoundException
や NoClassDefError
などのランタイムエラーが発生します。
- リソースパッケージの編集
- アプリケーションのみがリソースを使用できるようにするには、プロパティーファイル、JAR、およびその他のアーティファクトを
WEB-INF/classes/
またはWEB-INF/lib/
ディレクトリーへ移動し、WAR とバンドルします。この方法の詳細については、 「ResourceBundle プロパティーの場所変更」 を参照してください。 - カスタムモジュールの作成
- JBoss EAP サーバー上で実行されているすべてのアプリケーションが、カスタムリソースを使用できるようにするには、カスタムモジュールを作成する必要があります。この方法の詳細については、 「カスタムモジュールの作成」を参照してください。
3.1.3.4. ResourceBundle プロパティーの場所変更 リンクのコピーリンクがクリップボードにコピーされました!
以前のバージョンの JBoss EAP では、EAP_HOME/server/SERVER_NAME/conf/
ディレクトリーはクラスパスに存在し、アプリケーションによる使用が可能でした。このプロパティーを JBoss EAP 6 のアプリケーションのクラスパスで使用できるようにするには、アプリケーション内でパッケージ化する必要があります。
手順3.2
- WAR アーカイブをデプロイする場合、これらのプロパティーを WAR の
WEB-INF/classes/
フォルダーでパッケージ化する必要があります。 - これらのプロパティーを EAR のすべてのコンポーネントに対してアクセス可能にするには、JAR のルートでパッケージ化し、EAR の
lib/
フォルダーに置く必要があります。
3.1.3.5. カスタムモジュールの作成 リンクのコピーリンクがクリップボードにコピーされました!
手順3.3 カスタムモジュールの作成
module/
ディレクトリー構造を作成し、ファイルを追加します。EAP_HOME/module
ディレクトリー下にディレクトリー構造を作成し、ファイルや JAR が含まれるようにします。例は次のとおりです。cd EAP_HOME/modules/ $ mkdir -p myorg-conf/main/properties
$ cd EAP_HOME/modules/ $ cd EAP_HOME/modules/ $ cd EAP_HOME/modules/ $ mkdir -p myorg-conf/main/properties
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 作成した
EAP_HOME/modules/myorg-conf/main/properties/
ディレクトリーにプロパティーファイルを移動します。 - 次の XML が含まれる
module.xml
ファイルをEAP_HOME/modules/myorg-conf/main/
ディレクトリーに作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- サーバー設定ファイルの
ee
サブシステムを編集します。JBoss CLI を使用するか、手作業でファイルを編集します。- 次の手順に従って JBoss CLI を使用し、サーバー設定ファイルを編集します。
- サーバーを起動し、管理 CLI へ接続します。
- Linux の場合は、コマンドラインで以下を入力します。
EAP_HOME/bin/jboss-cli.sh --connect
$ EAP_HOME/bin/jboss-cli.sh --connect
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Windows の場合は、コマンドラインで以下を入力します。
C:\>EAP_HOME\bin\jboss-cli.bat --connect
C:\>EAP_HOME\bin\jboss-cli.bat --connect
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次の応答が表示されるはずです。Connected to standalone controller at localhost:9999
Connected to standalone controller at localhost:9999
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ee
サブシステムにmyorg-conf
<global-modules> 要素を作成するには、コマンドラインで以下を入力します。/subsystem=ee:write-attribute(name=global-modules, value=[{"name"=>"myorg-conf","slot"=>"main"}])
/subsystem=ee:write-attribute(name=global-modules, value=[{"name"=>"myorg-conf","slot"=>"main"}])
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 次の結果が表示されるはずです。{"outcome" => "success"}
{"outcome" => "success"}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- サーバー設定ファイルを手作業で編集する場合は、次の手順に従ってください。
- サーバーを停止し、テキストエディターでサーバー設定ファイルを開きます。スタンドアロンサーバーを実行している場合は、
EAP_HOME/standalone/configuration/standalone.xml
ファイルになります。管理対象ドメインを実行している場合は、EAP_HOME/domain/configuration/domain.xml
ファイルになります。 ee
サブシステムを見つけ、myorg-conf
のグローバルモジュールを追加します。以下は、myorg-conf
要素が含まれるように編集されたee
サブシステム要素の例になります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
my.properties
という名前のファイルを正しいモジュールの場所にコピーした場合は、以下のようなコードを使用してプロパティーファイルをロードできるようになります。Thread.currentThread().getContextClassLoader().getResource("my.properties");
Thread.currentThread().getContextClassLoader().getResource("my.properties");
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.4. ロギングの変更 リンクのコピーリンクがクリップボードにコピーされました!
3.1.4.1. ロギング依存関係の編集 リンクのコピーリンクがクリップボードにコピーされました!
JBoss LogManager はすべてのロギングフレームワークのフロントエンドをサポートするため、現在のロギングコードを保持することも、新しい JBoss のロギングインフラストラクチャーへ移行することも可能です。モジュラークラスローディングが変更されたため、いずれの場合でもアプリケーションを変更して必要な依存関係を追加する必要があるでしょう。
手順3.4 アプリケーションロギングコードの更新
3.1.4.2. サードパーティーロギングフレームワークのアプリケーションコードの更新 リンクのコピーリンクがクリップボードにコピーされました!
JBoss EAP 6 では、Apache Commons Logging、Apache log4j、SLF4J、Java Logging などの一般的なサードパーティーフレームワークのロギング依存関係はデフォルトで追加されています。ただし、log4j を使用し、ハンドラー (アペンダー) の設定にロギングサブシステムを使用しない場合は、JBoss EAP の log4j モジュールを除外する必要があります。
手順3.5 log4j.properties または log4j.xml ファイルを使用するよう JBoss EAP 6 を設定する
- 次の内容が含まれる
jboss-deployment-structure.xml
を作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow jboss-deployment-structure.xml
ファイルは、WAR をデプロイする場合はMETA-INF/
ディレクトリーまたはWEB-INF/
ディレクトリーに置き、EAR をデプロイする場合はMETA-INF/
ディレクトリーに置きます。log4j.properties
またはlog4j.xml
ファイルを、EAR のlib/
ディレクトリーまたは WAR デプロイメントのWEB-INF/classes/
ディレクトリーに含めます。- アプリケーションをデプロイします。
注記
3.1.4.3. 新しい JBoss ロギングフレームワークを使用したコードの変更 リンクのコピーリンクがクリップボードにコピーされました!
新しいフレームワークを使用するには、次のようにインポートとコードを変更します。
手順3.6 JBoss ロギングフレームワークを使用するようコードおよび依存関係を変更する
インポートとロギングコードの変更
新しい JBoss ロギングフレームワークを使用するコードの例は以下のとおりです。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ロギング依存関係の追加
JBoss ロギングクラスが含まれる JAR はorg.jboss.logging
という名前のモジュールにあります。MANIFEST-MF
ファイルは次のようになるはずです。Manifest-Version: 1.0 Dependencies: org.jboss.logging
Manifest-Version: 1.0 Dependencies: org.jboss.logging
Copy to Clipboard Copied! Toggle word wrap Toggle overflow モジュール依存関係の検索方法に関する詳細については、「クラスローディングの変更によるアプリケーション依存関係の更新」と「移行の問題のデバッグと解決」を参照してください。
3.1.5. アプリケーションパッケージの変更 リンクのコピーリンクがクリップボードにコピーされました!
3.1.5.1. EAR および WAR パッケージの編集 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションを移行する際、モジュラークラスローディングの変更に伴い、EAR または WAR のパッケージ構造を変更する必要がある場合があります。モジュール依存関係は次の順序でロードされます。
- システム依存関係
- ユーザー依存関係
- ローカルリソース
- デプロイメント間の依存性
手順3.7 アーカイブパッケージの編集
WAR のパッケージ化
WAR は単一のモジュールで、WAR のすべてのクラスは同じクラスローダーでロードされます。そのためWEB-INF/lib/
ディレクトリーにパッケージされるクラスは、WEB-INF/classes
ディレクトリーのクラスと同様に処理されます。EAR のパッケージ化
EAR は複数のモジュールによって構成されます。EAR/lib/
ディレクトリーは単一のモジュールで、EAR 内の各 WAR や EJB jar サブデプロイメントは個別のモジュールになります。依存関係が明示的に定義された場合を除き、クラスは EAR 内の他のモジュールにあるクラスへアクセスすることはできません。サブデプロイメントは常に親モジュール上で自動的な依存関係を持ち、親モジュールはEAR/lib/
ディレクトリーのクラスへのアクセスを許可します。しかし、サブデプロイメントはお互いのアクセスを許可するため常に自動的な依存関係を持っているわけではありません。この挙動は次のようにee
サブシステム設定の<ear-subdeployments-isolated>
要素を設定すると制御することができます。<subsystem xmlns="urn:jboss:domain:ee:1.0" > <ear-subdeployments-isolated>false</ear-subdeployments-isolated> </subsystem>
<subsystem xmlns="urn:jboss:domain:ee:1.0" > <ear-subdeployments-isolated>false</ear-subdeployments-isolated> </subsystem>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow デフォルトでは false に設定され、EAR 内の他のサブデプロイメントに属するクラスがサブデプロイメントに対して可視化されます。クラスローディングの詳細については、https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/ にある JBoss EAP 6 向け『開発ガイド『』』の章「クラスローディングとモジュール『』」を参照してください。
3.1.6. データソースおよびリソースアダプター設定の変更 リンクのコピーリンクがクリップボードにコピーされました!
3.1.6.1. 設定変更によるアプリケーションの更新 リンクのコピーリンクがクリップボードにコピーされました!
- アプリケーションがデータソースを使用する場合は、 「DataSource 設定の更新」を参照してください。
- アプリケーションが JPA を使用し、現在 Hibernate JAR をバンドルする場合は、 「Hibernate または JPA 用のデータソースの設定」を参照し、移行のオプションについて確認してください。
- アプリケーションがリソースアダプターを使用する場合は、 「リソースアダプター設定の更新」を参照してください。
- 「アプリケーションセキュリティーの変更設定」を参照し、基本的なセキュリティーの設定変更方法について確認してください。
3.1.6.2. DataSource 設定の更新 リンクのコピーリンクがクリップボードにコピーされました!
以前のバージョンの JBoss EAP では、ファイル名の最後に *-ds.xml
が付くファイルに JCA データソースの設定が定義されていました。このファイルはサーバーの deploy/
ディレクトリーにデプロイされるか、アプリケーションによってパッケージ化されました。JDBC ドライバーは server/lib/
ディレクトリーにコピーされるか、アプリケーションの WEB-INF/lib/
ディレクトリーにパッケージ化されました。この設定方法は開発環境では今でもサポートされていますが、JBoss の管理ツールではサポートされていないため実稼働環境では推奨されません。
domain/configuration/domain.xml
ファイルに設定されます。JBoss EAP 6 インスタンスがスタンドアロンサーバーとして実行されている場合、データソースは standalone/configuration/standalone.xml
ファイルに設定されます。このように設定されたデータソースは、Web 管理コンソールやコマンドラインインターフェース (CLI) などが含まれる JBoss 管理インターフェースを使用して管理および制御されます。これらのツールはデプロイメントの管理や、管理対象ドメインで実行されている複数のサーバーの設定を容易にします。
JDBC 4.0 対応のドライバーはデプロイメントまたはコアモジュールとしてインストールすることができます。JDBC 4.0 対応のドライバーには、ドライバークラス名を指定する META-INF/services/java.sql.Driver
ファイルが含まれています。JDBC 4.0 対応でないドライバーには追加の設定が必要となります。ドライバーを JDBC 4.0 対応にする方法や、現在のデータソース設定を Web 管理コンソールや CLI によって管理可能な設定に更新する方法の詳細については、 「JDBC ドライバーのインストールと設定」を参照してください。
IronJacamar ツールを使用するとデータソースおよびリソースアダプターの設定を移行できます。このツールは、*-ds.xml
形式の設定ファイルを JBoss EAP 6 が想定する形式に変換します。詳細は 「IronJacamar ツールを使用してデータソースとリソースアダプターの設定を移行する」を参照してください。
3.1.6.3. JDBC ドライバーのインストールと設定 リンクのコピーリンクがクリップボードにコピーされました!
次の 2 つの方法の 1 つを用いて JDBC ドライバーをコンテナにインストールできます。
- デプロイメントとしてのインストール
- コアモジュールとしてのインストール
domain/configuration/domain.xml
ファイルに設定されます。JBoss EAP 6 インスタンスがスタンドアロンサーバーとして実行されている場合、データソースは standalone/configuration/standalone.xml
ファイルに設定されます。両モードで共通のスキーマ参照情報は JBoss EAP 6 インストールの doc/schema/
ディレクトリーにあります。ここでは説明上、サーバーがスタンドアロンサーバーとして稼働し、データソースが standalone.xml
ファイルに設定されていると仮定します。
手順3.8 JDBC ドライバーのインストールと設定
JDBC ドライバーのインストール
JDBC ドライバーのデプロイメントとしてのインストール
これはドライバーのインストールに推奨される方法です。JDBC ドライバーがデプロイメントとしてインストールされると、普通の JAR としてデプロイされます。JBoss EAP 6 インスタンスがスタンドアロンサーバーとして実行されている場合は、 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/
$cp mysql-connector-java-5.1.15.jar EAP_HOME/standalone/deployments/EAP_HOME/standalone/deployments/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
com.mysql.jdbc.Driver
Copy to Clipboard Copied! Toggle word wrap Toggle overflow java.sql.Driver
ファイルをデプロイメントディレクトリーに作成します。スタンドアロンサーバーとして実行されている JBoss EAP 6 のインスタンスの場合、このファイルをEAP_HOME/standalone/deployments/META-INF/services/java.sql.Driver
に置く必要があります。サーバーが管理ドメインで実行されている場合、EAP_HOME/domain/deployments/META-INF/services/java.sql.Driver
に置く必要があります。
この方法の利点は次のとおりです。この方法の欠点は次のとおりです。- モジュールを定義する必要がないため、これが最も簡単な方法です。
- サーバーが管理対象ドメインで実行されている場合は、この方法を使用するデプロイメントがドメイン内のすべてのサーバーに自動的に伝播されます。つまり、管理者はドライバー JAR を手動で配布する必要がありません。
- JDBC ドライバーが複数の JAR (たとえば、ドライバー JAR および依存ライセンス JAR またはローカリゼーション JAR) から構成される場合、ドライバーをデプロイメントとしてインストールすることはできません。JDBC ドライバーは、コアモジュールとしてインストールする必要があります。
- ドライバーが JDBC 4.0 対応でない場合は、ドライバークラス名を含むファイルを作成し、JAR にインポートするか、
deployments/
ディレクトリーにオーバーレイする必要があります。
コアモジュールとしての JDBC ドライバーのインストール
JDBC ドライバーをコアモジュールとしてインストールするには、EAP_HOME/modules/
ディレクトリー下にファイルパス構造を作成する必要があります。この構造には、JDBC ドライバー JAR、任意の追加ベンダーライセンスまたはローカリゼーション JAR、およびモジュールを定義するmodule.xml
ファイルが含まれます。MySQL JDBC ドライバーをコアモジュールとしてインストール
- ディレクトリー構造
EAP_HOME/modules/com/mysql/main/
を作成します。 main/
サブディレクトリーで、MySQL JDBC ドライバーに対する以下のモジュール定義を含むmodule.xml
ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow モジュール名 "com.mysql" はこのモジュールのディレクトリー構造と一致します。<dependencies>
要素は、このモジュールの他のモジュールへの依存関係を指定するために使用されます。この場合、全 JDBC データソースの場合と同様に、javax.api
という名前の他のモジュールによって定義される Java JDBC API に依存します。このモジュールはmodules/system/layers/base/javax/api/main/
ディレクトリーに存在します。注記
module.xml
ファイルの最初に空白文字が存在しないようにしてください。空白文字が存在すると、このドライバーに対して 「New missing/unsatisfied dependencies」エラーが発生します。- MySQL JDBC ドライバー JAR を
EAP_HOME/modules/com/mysql/main/
ディレクトリーへコピーします。cp mysql-connector-java-5.1.15.jar EAP_HOME/modules/com/mysql/main/
$ cp mysql-connector-java-5.1.15.jar EAP_HOME/modules/com/mysql/main/EAP_HOME/modules/com/mysql/main/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
IBM DB2 JDBC ドライバーおよびライセンス JAR をコアモジュールとしてインストール
この例は、 JDBC ドライバー JAR 以外に JAR が必要なドライバーをデプロイする方法を示すためにのみ提供されています。- ディレクトリー構造
EAP_HOME/modules/com/ibm/db2/main/
を作成します。 main/
サブディレクトリーで、IBM DB2 JDBC ドライバーとライセンスに対する以下のモジュール定義を含むmodule.xml
ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記
module.xml
ファイルの最初に空白文字が存在しないようにしてください。空白文字が存在すると、このドライバーに対して 「New missing/unsatisfied dependencies」エラーが発生します。- JDBC ドライバーおよびライセンス JAR を
EAP_HOME/modules/com/ibm/db2/main/
ディレクトリーにコピーします。cp db2jcc.jar EAP_HOME/modules/com/ibm/db2/main/ cp db2jcc_license_cisuz.jar EAP_HOME/modules/com/ibm/db2/main/
$ cp db2jcc.jar EAP_HOME/modules/com/ibm/db2/main/EAP_HOME/modules/com/ibm/db2/main/ $ cp db2jcc_license_cisuz.jar EAP_HOME/modules/com/ibm/db2/main/EAP_HOME/modules/com/ibm/db2/main/
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
この方法の利点は次のとおりです。この方法の欠点は次のとおりです。- これは、JDBC ドライバーが複数の JAR から構成される場合に有効な唯一の方法です。
- この方法では、JDBC 4.0 対応でないドライバーは、ドライバー JAR を変更したり、ファイルオーバーレイを作成したりせずにインストールできます。
- モジュールのセットアップはより困難になります。
- モジュールは、管理対象ドメインで実行されている各サーバーに手動でコピーする必要があります。
データソースの設定
データベースドライバーの追加
<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 ドライバーのドライバー要素の例は次のとおりです。JDBC 4.0 対応でないドライバーには、ドライバークラスを指定する<driver name="mysql-connector-java-5.1.15.jar" module="com.mysql"/>
<driver name="mysql-connector-java-5.1.15.jar" module="com.mysql"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <driver-class>
属性が必要です。これは、ドライバークラス名を指定するMETA-INF/services/java.sql.Driver
ファイルが存在しないためです。JDBC 4.0 対応でないドライバーのドライバー要素の例は、次のとおりです。<driver name="mysql-connector-java-5.1.15.jar" module="com.mysql"><driver-class>com.mysql.jdbc.Driver</driver-class></driver>
<driver name="mysql-connector-java-5.1.15.jar" module="com.mysql"><driver-class>com.mysql.jdbc.Driver</driver-class></driver>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow データソースの作成
standalone.xml
ファイルの<datasources>
セクションに<datasource>
要素を作成します。このファイルには、以前に*-ds.xml
ファイルに定義されたデータソース情報とほとんど同じ情報が含まれています。重要
変更がサーバーの再起動後にも維持されるようにするには、サーバー設定ファイルの編集前にサーバーを停止する必要があります。standalone.xml
ファイルの MySQL データソース要素の例は次のとおりです。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.6.4. Hibernate または JPA 用のデータソースの設定 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションが JPA を使用し、現在 Hibernate JAR をバンドルする場合、JBoss EAP 6 に含まれる Hibernate を使用した方がよいでしょう。このバージョンの Hibernate を使用するには、アプリケーションから古いバージョンの Hibernate バンドルを削除する必要があります。
手順3.9 Hibernate バンドルの削除
- アプリケーションライブラリーフォルダーより Hibernate JAR を削除します。
persistence.xml
ファイルの<hibernate.transaction.manager_lookup_class>
要素は必要がないため、削除またはコメントアウトします。
3.1.6.5. リソースアダプター設定の更新 リンクのコピーリンクがクリップボードにコピーされました!
以前のバージョンのアプリケーションサーバーでは、リソースアダプター設定は、ファイル名の最後に *-ds.xml
が付くファイルで定義されました。JBoss EAP 6 では、リソースアダプターはサーバー設定ファイルで設定されます。管理対象ドメインで実行されている場合、設定ファイルは EAP_HOME/domain/configuration/domain.xml
ファイルになります。スタンドアロンサーバーとして実行されている場合、EAP_HOME/standalone/configuration/standalone.xml
ファイルのリソースアダプターを設定します。リソースアダプター記述子 にあるスキーマ参照情報は両モード共通です。
重要
リソースアダプター記述子の情報は、サーバー設定ファイルの次のサブシステム要素下に定義されます。
<subsystem xmlns="urn:jboss:domain:resource-adapters:1.1"/>
<subsystem xmlns="urn:jboss:domain:resource-adapters:1.1"/>
*-ds.xml
ファイルに定義された情報と同じものの一部を使用します。
3.1.7. セキュリティーの変更 リンクのコピーリンクがクリップボードにコピーされました!
3.1.7.1. アプリケーションセキュリティーの変更設定 リンクのコピーリンクがクリップボードにコピーされました!
以前のバージョンの JBoss EAP では、EAP_HOME/server/SERVER_NAME/conf/
ディレクトリーに置かれたプロパティーファイルはクラスパス上にあり、UsersRolesLoginModule
によって簡単に見つかりました。JBoss EAP 6 ではディレクトリー構造が変更されたため、プロパティーファイルをアプリケーション内でパッケージ化し、クラスパスで使用できるようにする必要があります。
重要
security-domains
下の新しいセキュリティードメインを standalone/configuration/standalone.xml
または domain/configuration/domain.xml
サーバー設定ファイルに追加します。
${jboss.server.config.dir}
は EAP_HOME/standalone/configuration/
ディレクトリーを参照します。インスタンスが管理対象ドメインで実行されている場合、 ${jboss.server.config.dir}
は EAP_HOME/domain/configuration/
ディレクトリーを参照します。
JBoss EAP 6 では、セキュリティードメインは名前で接頭辞 java:/jaas/
を使用しなくなりました。
- Web アプリケーションの場合は、
jboss-web.xml
のセキュリティードメイン設定からこの接頭辞を削除する必要があります。 - エンタープライズアプリケーションの場合は、
jboss-ejb3.xml
ファイルのセキュリティードメイン設定からこの接頭辞を削除する必要があります。JBoss EAP 6 では、jboss.xml
はこのファイルに置き換えられました。
3.1.8. JNDI の変更 リンクのコピーリンクがクリップボードにコピーされました!
3.1.8.1. アプリケーションの JNDI 名前空間名の更新 リンクのコピーリンクがクリップボードにコピーされました!
EJB 3.1 には、標準化されたグローバル JNDI 名前空間や、Java EE アプリケーションのさまざまなスコープへマップする名前空間が導入されました。移植可能な EJB 名は、java:global
、 java:module
、 java:app
の 3 つのみへバインドされます。EJB を用いるアプリケーションが JNDI を使用する場合、そのアプリケーションを変更し、新しい標準 JNDI 名前空間の慣例に従うようにする必要があります。
手順3.10 JNDI ルックアップの変更
- 「移植可能な EJB JNDI 名」を確認する
以前のリリースにおける JNDI 名前空間の例や、 JBoss EAP 6 で指定する方法については、 「以前のリリースでの JNDI 名前空間の例、および JBoss EAP 6 での名前空間の指定方法」を参照してください。
3.1.8.2. 移植可能な EJB JNDI 名 リンクのコピーリンクがクリップボードにコピーされました!
Java EE 6 仕様には、独自のスコープを持つ 4 つの論理的な名前空間が定義されていますが、移植可能な EJB 名はそのうちの 3 つの名前空間へのみバインドされます。下表は、各名前空間の使用方法と使用時の詳細を表しています。
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 名前空間のリソースにアクセスできます。
java:app 名前空間の例は、
java:app/jboss-seam-booking-jar/HotelBookingAction です。
|
3.1.8.3. JNDI 名前空間のルールの確認 リンクのコピーリンクがクリップボードにコピーされました!
JBoss EAP 6 では JNDI 名前空間の名前が改良され、アプリケーションにバインドされた名前に対して予測可能で一貫性のあるルールを提供するだけでなく、将来的に互換性の問題が起こらないよう対処されます。そのため、現在の名前空間が新ルールに準拠しない場合、問題が発生することがあります。
DefaultDS
やjdbc/DefaultDS
などの不適切な相対名は、コンテキストに応じてjava:comp/env
、java:module/env
、またはjava:jboss/env
に対して相対的に修飾する必要があります。/jdbc/DefaultDS
などの不適切なabsolute
名は、java:jboss/root
名に対して相対的に修飾する必要があります。java:/jdbc/DefaultDS
などの適切なabsolute
名は、上記の不適切なabsolute
名と同様に修飾する必要があります。- 特別な
java:jboss
名前空間は、 AS サーバーインスタンス全体で共有されます。 java:
接頭辞を持つrelative
名は、comp
、module
、app
、global
、または商用のjboss
の 5 つの名前空間のいずれかに属する必要があります。xxx がこの 5 つのいずれにも一致しないjava:xxx
で始まる名前の場合は、無効な名前エラーが発生します。
3.1.8.4. JNDI 名前空間の新ルールに準拠するようアプリケーションを変更する リンクのコピーリンクがクリップボードにコピーされました!
- JBoss EAP 5.1 の JNDI ルックアップの例は次のとおりです。通常、このコードは初期化メソッドに存在します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ルックアップ名はOrderManagerApp/ProductManagerBean/local
になります。 - 次の例は、JBoss EAP 6 では同じルックアップがどのようにコード化されるかを表しています。
@EJB(lookup="java:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager") private ProductManager productManager;
@EJB(lookup="java:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager") private ProductManager productManager;
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ルックアップ値はメンバー変数として定義され、新しい移植可能なjava:app
JNDI 名前空間名であるjava:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager
が使用されます。 - CDI を使用したくない場合は、前述のとおりに新しい InitialContext を作成し、新しい JNDI 名前空間名を使用するようにルックアップを編集します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.8.5. 以前のリリースでの JNDI 名前空間の例、および JBoss EAP 6 での名前空間の指定方法 リンクのコピーリンクがクリップボードにコピーされました!
JBoss EAP 5.x の名前空間 | JBoss EAP 6 の名前空間 | 追加コメント |
---|---|---|
OrderManagerApp/ProductManagerBean/local | java:module/ProductManagerBean!services.ejb.ProductManager | Java EE 6 の標準バインディング。現在のモジュールへスコープ指定され、同じモジュール内でのみアクセス可能。 |
OrderManagerApp/ProductManagerBean/local | java:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager | Java EE 6 の標準バインディング。現在のアプリケーションへスコープ指定され、同じアプリケーション内でのみアクセス可能。 |
OrderManagerApp/ProductManagerBean/local | java:global/OrderManagerApp/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManager | Java EE 6 の標準バインディング。アプリケーションサーバーへスコープ指定され、グローバルにアクセス可能です。 |
java:comp/UserTransaction | java:comp/UserTransaction | 名前空間は現在のコンポーネントへスコープ指定されます。アプリケーションによって直接作成されるスレッドなど、Java EE 6 でないスレッドはアクセスできません。 |
java:comp/UserTransaction | java:jboss/UserTransaction | グローバルにアクセス可能です。java:comp/UserTransaction が使用できないときに使用します。 |
java:/TransactionManager | java:jboss/TransactionManager | |
java:/TransactionSynchronizationRegistry | java:jboss/TransactionSynchronizationRegistry |
3.2. アプリケーションのアーキテクチャーやコンポーネントによって異なる変更 リンクのコピーリンクがクリップボードにコピーされました!
3.2.1. アプリケーションのアーキテクチャーやコンポーネントによって異なる変更の確認 リンクのコピーリンクがクリップボードにコピーされました!
- Hibernate および JPA
- アプリケーションが Hibernate または JPA を使用する場合は、アプリケーションを変更する必要があります。詳細については、 「Hibernate や JPA を使用するアプリケーションの更新」を参照してください。
- REST
- アプリケーションが JAX-RS を使用する場合、JBoss EAP 6 は自動的に RESTEasy を設定するため、手作業で設定する必要がなくなりました。詳細については、 「JAX-RS および RESTEasy の変更の設定」を参照してください。
- LDAP
- JBoss EAP 6 では LDAP セキュリティーレルムの設定が異なります。アプリケーションが LDAP を使用する場合は、 「LDAP セキュリティーレルムの変更設定」で詳細を確認してください。
- メッセージング
- JBoss Messaging は JBoss EAP 6 から除外されました。アプリケーションがメッセージングプロバイダーとして JBoss Messaging を使用する場合は、JBoss Messaging コードを HornetQ に置き換える必要があります。詳細については、 「HornetQ を JMS プロバイダーとして使用するためにアプリケーションを移行」を参照してください。
- クラスタリング
- JBoss EAP 6 では、クラスタリングを有効にする方法が変更になりました。詳細は、 「クラスタリングに対するアプリケーションの変更」を参照してください。
- サービススタイルのデプロイメント
- JBoss EAP 6 では、サービススタイル記述子を使用しないようになりましたが、できる限り変更がない状態でコンテナはサービススタイルデプロイメントをサポートします。デプロイメントの情報については、 「サービススタイルデプロイメントを使用するアプリケーションの更新」を参照してください。
- リモート呼び出し
- アプリケーションがリモート呼び出しを行う場合、JNDI を使用して Bean のプロキシをルックアップし、返されたプロキシ上で呼び出しすることができます。必要な構文や名前空間の変更については、 「JBoss EAP 5 にデプロイされ、JBoss EAP 6 へリモート呼び出しを行うアプリケーションの移行」を参照してください。
- Seam 2.2
- アプリケーションが Seam 2.2 を使用する場合は、 「Seam 2.2 アーカイブの JBoss EAP 6 への移行」を参照して必要な変更について確認してください。
- Spring
- アプリケーションが Spring を使用する場合は、 「Spring アプリケーションの移行」を参照してください。
- 移行に影響する可能性があるその他の変更
- アプリケーションに影響する可能性がある JBoss EAP 6 のその他の変更については、 「移行に影響する可能性があるその他の変更について理解する」を参照してください。
3.2.2. Hibernate および JPA の変更 リンクのコピーリンクがクリップボードにコピーされました!
3.2.2.1. Hibernate や JPA を使用するアプリケーションの更新 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションが Hibernate または JPA を使用する場合は、次の項を読んで JBoss EAP 6 への移行に必要な変更を行ってください。
手順3.11
3.2.2.2. Hibernate および JPA を使用するアプリケーションの変更設定 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションに persistence.xml
ファイルが含まれていたり、コードが @PersistenceContext
アノテーションや @PersistenceUnit
アノテーションを使用する場合、 JBoss EAP 6 はデプロイメント中にこれを検出し、アプリケーションによって JPA が使用されることを想定します。Hibernate 4 とその他の依存関係の一部を暗黙的にアプリケーションのクラスパスへ追加します。
現在、アプリケーションが Hibernate 3 ライブラリーを使用する場合、ほとんどの場合で Hibernate 4 へ切り替えることが可能で、Hibernate 4 を使用して正常に実行されるはずです。しかし、アプリケーションをデプロイする時に ClassNotFoundExceptions
が発生した場合、次の方法の 1 つを用いて問題解決を図ることができます。
重要
手順3.12 アプリケーションの設定
必要な Hibernate 3 の JAR をアプリケーションライブラリーへコピーする
見つからないクラスが含まれる特定の Hibernate 3 JAR をアプリケーションのlib/
ディレクトリーへコピーするか、他の方法を使用してクラスパスに追加すると問題を解決できることがあります。これにより、Hibernate のバージョンを複数使用することが原因でClassCastExceptions
や他のクラスローディングの問題が発生することがあります。この問題が発生した場合、次の方法で対処する必要があります。Hibernate 3 ライブラリーのみを使用するようサーバーへ指示する
JBoss EAP 6 では、Hibernate 3.5 (およびそれ以降のバージョン) の永続性プロバイダー jar をアプリケーションと共にパッケージ化することができます。サーバーで Hibernate 3 ライブラリーのみを使用し、Hibernate 4 ライブラリーを除外するようにするには、次のようにjboss.as.jpa.providerModule
をpersistence.xml
のhibernate3-bundled
に設定する必要があります。Java Persistence API (JPA) デプロイヤーは、アプリケーションに永続性プロバイダーがあることを検出し、Hibernate 3 ライブラリーを使用します。JPA 永続性プロパティーの詳細については、 「永続ユニットプロパティー」を参照してください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Hibernate の 2 次キャッシュの無効化
JBoss EAP 6 では、Hibernate 3 の 2 次キャッシュの挙動が以前のリリースと異なります。アプリケーションを用いて Hibernate の 2 次キャッシュを使用している場合、Hibernate 4 にアップグレードするまで 2 次キャッシュを無効にする必要があります。2 次キャッシュを無効にするには、persistence.xml
ファイルの<hibernate.cache.use_second_level_cache>
をfalse
に設定します。
3.2.2.3. 永続ユニットプロパティー リンクのコピーリンクがクリップボードにコピーされました!
JBoss EAP 6 は、以下の Hibernate 4.x 設定プロパティを自動的に設定します。
プロパティー名 | デフォルト値 | 目的 |
---|---|---|
hibernate.id.new_generator_mappings | true |
この設定は、
@GeneratedValue(AUTO) を使用して新しいエンティティーに対して一意のインデックスキーを生成する場合に有効です。新規のアプリケーションのデフォルト値は true になるはずです。Hibernate 3.3.x を使用した既存のアプリケーションが継続してシーケンスオブジェクトやテーブルベースのジェネレーターを使用し、後方互換性を維持するにはデフォルト値を false に変更する必要がある場合があります。アプリケーションは persistence.xml ファイルにあるこの値を上書きすることが可能です。
この動作の詳細は、以下で提供されています。
|
hibernate.transaction.jta.platform | org.hibernate.service.jta.platform.spi.JtaPlatform インターフェースのインスタンス |
このクラスはトランザクションマネージャーやユーザーのトランザクション、トランザクション同期化レジストリーを Hibernate に渡します。
|
hibernate.ejb.resource_scanner | org.hibernate.ejb.packaging.Scanner インターフェースのインスタンス |
このクラスは、JBoss EAP 6 のアノテーションインデクサーを使用して、より高速なデプロイメントを提供する方法を認識しています。
|
hibernate.transaction.manager_lookup_class |
このプロパティーは
hibernate.transaction.jta.platform と競合することがあるため、persistence.xml に存在する場合は削除されます。
| |
hibernate.session_factory_name | QUALIFIED_PERSISTENCE_UNIT_NAME |
アプリケーション名 + 永続ユニット名に設定されます。アプリケーションは異なる値を指定することができますが、JBoss EAP 6 インスタンス上のすべてのアプリケーションデプロイメントで一意となる値でなければなりません。
|
hibernate.session_factory_name_is_jndi | false |
アプリケーションが
hibernate.session_factory_name の値を指定しなかった場合のみ設定されます。
|
hibernate.ejb.entitymanager_factory_name | QUALIFIED_PERSISTENCE_UNIT_NAME |
アプリケーション名 + 永続ユニット名に設定されます。アプリケーションは異なる値を指定することができますが、JBoss EAP 6 インスタンス上のすべてのアプリケーションデプロイメントで一意となる値でなければなりません。
|
new_generator_mappings
が true
に設定されると以下が実行されます。
@GeneratedValue(AUTO)
がorg.hibernate.id.enhanced.SequenceStyleGenerator
へマッピングします。@GeneratedValue(TABLE)
がorg.hibernate.id.enhanced.TableGenerator
へマッピングします。@GeneratedValue(SEQUENCE)
がorg.hibernate.id.enhanced.SequenceStyleGenerator
へマッピングします。
new_generator_mappings
が false
に設定されると以下が実行されます。
@GeneratedValue(AUTO)
が Hibernate "native" へマッピングします。@GeneratedValue(TABLE)
がorg.hibernate.id.MultipleHiLoPerTableGenerator
へマッピングします。@GeneratedValue(SEQUENCE)
が Hibernate "seqhilo" へマッピングします。
以下の JPA プロパティーが、persistence.xml
ファイルの永続ユニット定義でサポートされます。
プロパティー名 | デフォルト値 | 目的 |
---|---|---|
jboss.as.jpa.providerModule | org.hibernate |
永続プロバイダーモジュールの名前。
Hibernate 3 JAR がアプリケーションアーカイブに含まれる場合、値は
hibernate3-bundled である必要があります。
永続プロバイダーがアプリケーションでパッケージ化された場合、この値は
application である必要があります。
|
jboss.as.jpa.adapterModule | org.jboss.as.jpa.hibernate:4 |
JBoss EAP 6 が永続プロバイダーと動作するようにする統合クラスの名前。
現在の有効値は以下のとおりです。
|
3.2.2.4. Hibernate 4 を使用するよう Hibernate 3 のアプリケーションを更新する リンクのコピーリンクがクリップボードにコピーされました!
Hibernate 4 を使用するようアプリケーションを更新する場合、一般的な更新は、アプリケーションが現在使用する Hibernate のバージョンに関係なく適用されます。その他の更新についてはアプリケーションが現在使用するバージョンを判断する必要があります。
手順3.13 Hibernate 4 を使用するようアプリケーションを更新する
- 自動インクリメントシーケンスジェネレーターのデフォルトの動作は JBoss EAP 6 で変更になりました。詳細については、 「Hibernate アイデンティティの自動生成値の既存動作を保持する」を参照してください。
- アプリケーションによって現在使用されている Hibernate のバージョンを判断し、下記より適切な更新手順を選択します。
- アプリケーションをクラスター化された環境で実行する場合は、 「クラスター環境で稼働する、移行された Seam および Hibernate アプリケーションの永続プロパティーの変更」を参照してください。
3.2.2.5. Hibernate アイデンティティの自動生成値の既存動作を保持する リンクのコピーリンクがクリップボードにコピーされました!
@GeneratedValue
を使用する際にアイデンティティやシーケンスカラムの生成方法を指示する hibernate.id.new_generator_mappings
というコアプロパティーが導入されました。JBoss EAP 6 では、このプロパティーのデフォルト値が次のように設定されています。
- ネイティブの Hibernate アプリケーションをデプロイする場合、デフォルト値は
false
になります。 - JPA アプリケーションをデプロイする場合、デフォルト値は
true
になります。
@GeneratedValue
アノテーションを使用する新しいアプリケーションでは hibernate.id.new_generator_mappings
プロパティーの値を true
に設定するようにします。この設定は異なるデータベースにおける移植性が高まるため推奨設定となります。ほとんどの場合で効率がよく、場合によっては JPA 2 仕様との互換性に対応します。
- 新しい JPA アプリケーションでは JBoss EAP 6 の
hibernate.id.new_generator_mappings
プロパティーのデフォルトはtrue
になります。この値は変更しないでください。 - 新しいネイティブの Hibernate アプリケーションでは JBoss EAP 6 の
hibernate.id.new_generator_mappings
プロパティーのデフォルトはfalse
になります。このプロパティーをtrue
に設定してください。
JBoss EAP 6 へ移行する際、新しいエンティティーのプライマリキー値の作成に、@GeneratedValue
アノテーションを使用する既存のアプリケーションと同じジェネレーターが使用されるようにする必要があります。
- 既存の JPA アプリケーションでは JBoss EAP 6 の
hibernate.id.new_generator_mappings
プロパティーのデフォルトはtrue
になります。persistence.xml
ファイルでこのプロパティーをfalse
に設定してください。 - 既存のネイティブ Hibernate アプリケーションでは JBoss EAP 6 の
hibernate.id.new_generator_mappings
プロパティーのデフォルト値はfalse
になります。この値は変更しないでください。
3.2.2.6. Hibernate 3.3.x アプリケーションの Hibernate 4.x への移行 リンクのコピーリンクがクリップボードにコピーされました!
手順3.14
Hibernate の
text
タイプをJDBC LONGVARCHAR
へマッピングするバージョンが 3.5 以前の Hibernate ではtext
型はJDBC CLOB
へマッピングされていました。JavaString
プロパティーをJDBC CLOB
へマッピングするため、新しい Hibernate タイプmaterialized_clob
が Hibernate 4 に追加されました。JDBC CLOB
へのマッピングが目的でtype="text"
と設定されているプロパティーがアプリケーションにある場合は、次の項目の 1 つを実行する必要があります。- アプリケーションが hbm マッピングファイルを使用する場合、プロパティーを
type="materialized_clob"
に変更します。 - アプリケーションがアノテーションを使用する場合、
@Type(type = "text")
を@Lob
に置き換えます。
コードを確認し戻り値型の変更を探す
数値集約の基準射影 (criteria projection) は HQL と同じ値型を返すようになるはずです。その結果、org.hibernate.criterion
の以下の射影からの戻り型が変更されます。CountProjection
、Projections.rowCount()
、Projections.count(propertyName)
、Projections.countDistinct(propertyName)
の変更により、count
およびcount distinct
射影はLong
値を返すようになります。Projections.sum(propertyName)
の変更により、sum
射影はプロパティー型によって異なる値タイプを返すようになります。注記
アプリケーションコードを変更しないと、java.lang.ClassCastException
が発生する原因となります。- Long、Short、Integer、プリミティブ型整数のいずれかとしてマッピングされているプロパティーは Long 値が返されます。
- Float、Double、プリミティブ浮動小数点型のいずれかとしてマッピングされているプロパティーは Double 値が返されます。
3.2.2.7. Hibernate 3.5.x アプリケーションの Hibernate 4.x への移行 リンクのコピーリンクがクリップボードにコピーされました!
手順3.15
AnnotationConfiguration の設定へのマージ
AnnotationConfiguration
はすでに廃止されていますが、移行に影響しないようにする必要があります。hbm.xml
ファイルを使用している場合、JBoss EAP 6 では 以前のリリースで使用されたorg.hibernate.cfg.DefaultNamingStrategy
ではなく、AnnotationConfiguration
のorg.hibernate.cfg.EJB3NamingStrategy
が使用されることに注意してください。そのため、名前付けの不一致が発生する可能性があります。名前付けストラテジーがデフォルトのアソシエーション (多対多および要素のコレクション) テーブルに依存する場合、この問題が発生することがあります。この問題を解決するには、レガシーのorg.hibernate.cfg.DefaultNamingStrategy
を使用するように Hibernate に指示するため、Configuration#setNamingStrategy
を呼び出してorg.hibernate.cfg.DefaultNamingStrategy#INSTANCE
に渡します。新しい Hibernate DTD ファイル名に適合するように名前空間を変更する
Expand 表3.5 以前の DTD 名前空間 新しい DTD 名前空間 http://hibernate.sourceforge.net/hibernate-configuration-3.0.dtd http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd 環境変数を編集する
- Oracle で
materialized_clob
またはmaterialized_blob
プロパティーを使用している場合、グローバル環境変数hibernate.jdbc.use_streams_for_binary
を true に設定する必要があります。 - PostgreSQL で
CLOB
またはBLOB
プロパティーを使用している場合、グローバル環境変数hibernate.jdbc.use_streams_for_binary
を false に設定する必要があります。
3.2.2.8. クラスター環境で稼働する、移行された Seam および Hibernate アプリケーションの永続プロパティーの変更 リンクのコピーリンクがクリップボードにコピーされました!
javax.ejb.EJBTransactionRolledbackException: JBAS010361: Failed to deserialize .... Caused by: java.io.InvalidObjectException: could not resolve session factory during session deserialization [uuid=8aa29e74373ce3a301373ce3a44b0000, name=null]
javax.ejb.EJBTransactionRolledbackException: JBAS010361: Failed to deserialize
....
Caused by: java.io.InvalidObjectException: could not resolve session factory during session deserialization [uuid=8aa29e74373ce3a301373ce3a44b0000, name=null]
persistence.xml
ファイルになります。ネイティブの Hibernate API アプリケーションでは hibernate.cfg.xml
ファイルになります。
手順3.16 クラスター環境で稼働する永続プロパティー設定
hibernate.session_factory_name
値を一意名に設定します。この名前は、JBoss EAP 6 インスタンス上のすべてのアプリケーションデプロイメントで一意となる必要があります。例は次のとおりです。<property name="hibernate.session_factory_name" value="jboss-seam-booking.ear_session_factory"/>
<property name="hibernate.session_factory_name" value="jboss-seam-booking.ear_session_factory"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow hibernate.ejb.entitymanager_factory_name
値を一意名に設定します。この名前は、JBoss EAP 6 インスタンス上のすべてのアプリケーションデプロイメントで一意となる必要があります。例は次のとおりです。<property name="hibernate.ejb.entitymanager_factory_name" value="seam-booking.ear_PersistenceUnitName"/>
<property name="hibernate.ejb.entitymanager_factory_name" value="seam-booking.ear_PersistenceUnitName"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.2.9. JPA 2.0 の仕様に準拠するようアプリケーションを更新する リンクのコピーリンクがクリップボードにコピーされました!
JPA 2.0 の仕様では、永続コンテキストが JTA トランザクションの外部では伝播できないことが要件となっています。トランザクションスコープの永続コンテキストのみがアプリケーションによって使用される場合、JBoss EAP 6 での挙動は以前のバージョンと変わらないため、変更を加える必要はありません。アプリケーションが拡張永続コンテキスト (XPC) を使用してデータ変更のキューやバッチ処理を許可する場合は、アプリケーションを変更する必要があります。
拡張永続コンテキストを使用するステートフルセッション Bean である Bean1
がアプリケーションにあり、トランザクションスコープの永続コンテキストを使用するステートレスセッション Bean である Bean2
を呼び出す場合、次のような挙動が想定されます。
Bean1
が JTA トランザクションを開始し、JTA トランザクションがアクティブな状態でBean2
メソッドを呼び出す場合、JBoss EAP 6 での挙動は以前のリリースと変わらないため、変更を加える必要はありません。Bean1
が JTA トランザクションを開始せず、Bean2
メソッドを呼び出す場合、JBoss EAP 6 は拡張永続コンテキストをBean2
へ伝播しません。この挙動は、拡張永続コンテキストをBean2
へ伝播した以前のリリースとは異なっています。拡張永続コンテキストがトランザクションエンティティーマネージャーによって Bean へ伝播されることをアプリケーションが想定している場合、アクティブな JTA トランザクション内で呼び出しを行うようにアプリケーションを変更する必要があります。
3.2.2.10. Infinispan による JPA/Hibernate 2 次キャッシュの置き換え リンクのコピーリンクがクリップボードにコピーされました!
2 次キャッシュ (2LC) に関し、 JBoss Cache は Infinispan に置き換えられました。これにより、persistence.xml
ファイルの変更が必要になります。使用する 2 次キャッシュが JPA または Hibernate であるかによって、構文は若干異なります。ここで取り上げる例は Hibernate の使用が前提となっています。
persistence.xml
ファイルで 2 次キャッシュのプロパティーを設定する例です。
手順3.17 Infinispan を使用するよう persistence.xml
ファイルを変更する
JBoss EAP 6 の JPA アプリケーション向けに Infinispan を設定する
JBoss EAP 6 で Infinispan を使用し、プロパティーを指定して JPA アプリケーションに同じ設定を行う方法は次のとおりです。また、次のように、<property name="hibernate.cache.use_second_level_cache" value="true"/>
<property name="hibernate.cache.use_second_level_cache" value="true"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow shared-cache-mode
をENABLE_SELECTIVE
またはALL
の値で指定する必要があります。- デフォルト値は
ENABLE_SELECTIVE
で、これが推奨値となります。この場合、エンティティーは明示的にキャッシュ可能であるとマークされない限りキャッシュされません。<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
<shared-cache-mode>ENABLE_SELECTIVE</shared-cache-mode>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ALL
では、エンティティーはキャッシュ不可能としてマークした場合であっても常にキャッシュされます。<shared-cache-mode>ALL</shared-cache-mode>
<shared-cache-mode>ALL</shared-cache-mode>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
JBoss EAP 6 のネイティブ Hibernate アプリケーション向けに Infinispan を設定する
JBoss EAP 6 で Infinispan を使用し、ネイティブ Hibernate アプリケーションに同じ設定を指定する方法は次のとおりです。また、以下の依存関係をCopy to Clipboard Copied! Toggle word wrap Toggle overflow MANIFEST.MF
ファイルに追加する必要があります。Manifest-Version: 1.0 依存関係: org.infinispan, org.hibernate
Manifest-Version: 1.0 依存関係: org.infinispan, org.hibernate
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.2.11. Hibernate キャッシュプロパティー リンクのコピーリンクがクリップボードにコピーされました!
プロパティー名 | 説明 |
---|---|
hibernate.cache.provider_class |
カスタム
CacheProvider のクラス名。
|
hibernate.cache.use_minimal_puts |
ブール変数です。2 次キャッシュの操作を最適化し、読み取りを増やして書き込みを最小限にします。これはクラスター化されたキャッシュで最も便利な設定であり、Hibernate 3 ではクラスター化されたキャッシュの実装に対してデフォルトで有効になっています。
|
hibernate.cache.use_query_cache |
ブール変数です。クエリーキャッシュを有効にします。各クエリーをキャッシュ可能に設定する必要があります。
|
hibernate.cache.use_second_level_cache |
ブール変数です。
<cache> マッピングを指定するクラスに対してデフォルトで有効になっている 2 次 キャッシュを完全に無効にするため使用されます。
|
hibernate.cache.query_cache_factory |
カスタム
QueryCache インターフェースのクラス名です。デフォルト値は組み込みの StandardQueryCache です。
|
hibernate.cache.region_prefix |
2 次キャッシュのリージョン名に使用するプレフィックスです。
|
hibernate.cache.use_structured_entries |
ブール変数です。人間が解読可能な形式でデータを 2 次キャッシュに保存するよう Hibernate を設定します。
|
hibernate.cache.default_cache_concurrency_strategy | @Cacheable または @Cache が使用される場合に使用するデフォルトの org.hibernate.annotations.CacheConcurrencyStrategy の名前を付与するため使用される設定です。@Cache(strategy="..") を使用してこのデフォルト値が上書きされます。
|
3.2.2.12. Hibernate Validator 4 への移行 リンクのコピーリンクがクリップボードにコピーされました!
Hibernate Validator 4.x は、JSR 303 - Bean Validation を実装する完全に新しいコードベースです。Validator 3.x から 4.x への移行プロセスは非常に簡単ですが、アプリケーションの移行時にいくつかの変更を行う必要があります。
手順3.18 以下の 1 つまたは複数のタスクを実行する必要がある場合があります。
デフォルトの ValidatorFactory へのアクセス
JBoss EAP 6 は、デフォルトの ValidatorFactory をjava:comp/ValidatorFactory
以下にある JNDI コンテキストにバインドします。ライフサイクルでトリガーされた検証の理解
Hibernate Core 4 と組み合わせて使用する場合、ライフサイクルベースの検証は Hibernate Core により自動的に有効になります。- 検証は、エンティティー
INSERT
操作、UPDATE
操作、およびDELETE
操作に対して行われます。 - 次のプロパティーを使用してイベントタイプによってグループが検証されるよう設定することができます。これらのプロパティーの値は、検証するグループのカンマ区切り完全修飾クラス名です。
javax.persistence.validation.group.pre-persist
javax.persistence.validation.group.pre-update
javax.persistence.validation.group.pre-remove
検証グループは、Bean Validation 仕様の新しい機能です。この新しい機能を使用しない場合は、Hibernate Validator 4 に移行するときに変更を必要としません。 - ライフサイクルベース検証は、
javax.persistence.validation.mode
プロパティーをnone
に設定することにより無効にできます。このプロパティーの他の有効値はauto
(デフォルト値)、callback
、およびddl
です。
アプリケーションが手動の検証を使用するよう設定
- 手動で検証を制御する場合は、次のいずれかの方法で Validator を作成できます。
getValidator()
メソッドを使用して、ValidatorFactory
からValidator
インスタンスを作成します。- Validator インスタンスを EJB、CDI Bean、または他の Java EE インジェクト可能リソースにインジェクトします。
- Validator インスタンスをカスタマイズするために、
ValidatorFactory.usingContext()
により返されたValidatorContext
を使用できます。この API を使用して、カスタムMessageInterpolator
、TraverableResolver
、およびConstraintValidatorFactory
を設定できます。これらのインターフェースは、Bean Validation 仕様で指定され、Hibernate Validator 4 で新しい機能です。
新しい Bean Validation の制約を使用するようコードを変更
Hibernate Validator 4 への移行時に、新しい Bean レベル検証制約では、コードの変更が必要です。- Hibernate Validator 4 にアップグレードする場合は、次のパッケージの制約を使用する必要があります。
javax.validation.constraints
org.hibernate.validator.constraints
- Hibernate Validator 3 に存在していたすべての制約は、Hibernate Validator 4 でも引き続き利用できます。これらを使用するには、指定されたクラスをインポートします。場合によっては、制約パラメーターの名前またはタイプを変更する必要があります。
カスタム制約の使用
Hibernate Validator 3 では、カスタム制約でorg.hibernate.validator.Validator
インターフェースを実装する必要がありました。Hibernate Validator 4 では、javax.validation.ConstraintValidator
インターフェースを実装する必要があります。このインターフェースには、以前のインターフェースと同じinitialize()
メソッドとisValid()
メソッドが含まれますが、メソッドシグネチャーが変更されました。また、代替のDDL
は Hibernate Validator 4 でサポートされなくなりました。
3.2.3. JSF の変更 リンクのコピーリンクがクリップボードにコピーされました!
3.2.3.1. アプリケーションが JSF の古いバージョンを使用できるようにする リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションが JSF の古いバージョンを使用する場合は、JSF 2.0 にアップグレードする必要はありません。代わりに、jboss-deployment-structure.xml
ファイルを作成して、JBoss EAP 6 がアプリケーションデプロイメントで JSF 2.0 ではなく JSF 1.2 を使用するよう要求できます。この JBoss 固有のデプロイメント記述子は、クラスローディングを制御するために使用され、WAR の META-INF/
または WEB-INF/
ディレクトリー、あるいは EAR の META-INF/
ディレクトリーに格納されます。
jboss-deployment-structure.xml
ファイルの例は次のとおりです。
3.2.4. Web Services Changes リンクのコピーリンクがクリップボードにコピーされました!
3.2.4.1. Web サービスの変更 リンクのコピーリンクがクリップボードにコピーされました!
- JBossWS API プロジェクトの変更
- JBossWS では、SPI および Common コンポーネントがリファクタリングされました。下表は、アプリケーションの移行に影響する可能性がある API およびパッケージの変更を表しています。
Expand 表3.7 サイズログハンドラープロパティー 従来の JAR 従来のパッケージ 新しい JAR 新しいパッケージ JBossWS SPI org.jboss.wsf.spi.annotation.* JBossWS API org.jboss.ws.api.annotation.* JBossWS SPI org.jboss.wsf.spi.binding.* JBossWS API org.jboss.ws.api.binding.* JBossWS SPI org.jboss.wsf.spi.management.recording.* JBossWS API org.jboss.ws.api.monitoring.* JBossWS SPI org.jboss.wsf.spi.tools.* JBossWS API org.jboss.ws.api.tools.* JBossWS SPI org.jboss.wsf.spi.tools.ant.* JBossWS API org.jboss.ws.tools.ant.* JBossWS SPI org.jboss.wsf.spi.tools.cmd.* JBossWS API org.jboss.ws.tools.cmd.* JBossWS SPI org.jboss.wsf.spi.util.ServiceLoader JBossWS API org.jboss.ws.api.util.ServiceLoader JBossWS Common org.jboss.wsf.common.* JBossWS API org.jboss.ws.common.* JBossWS Common org.jboss.wsf.common.handler.* JBossWS API org.jboss.ws.api.handler.* JBossWS Common org.jboss.wsf.common.addressing.* JBossWS API org.jboss.ws.api.addressing.* JBossWS Common org.jboss.wsf.common.DOMUtils JBossWS API org.jboss.ws.api.util.DOMUtils JBossWS Native org.jboss.ws.annotation.EndpointConfig JBossWS API org.jboss.ws.api.annotation.EndpointConfig - @WebContext アノテーション
- JBossWS 3.4.x では、このアノテーションは JBossWS SPI プロジェクトの
org.jboss.wsf.spi.annotation.WebContext
としてパッケージ化されていました。JBossWS 4.0 では、このアノテーションは JBossWS API プロジェクトのorg.jboss.ws.api.annotation.WebContext
に移動しました。アプリケーションに廃止された依存関係が含まれている場合は、アプリケーションのソースコードのインポートおよび依存関係を置き換え、新しい JBossWS API JAR に対してコンパイルする必要があります。また、後方互換性への非対応が変更になりました。String[] virtualHosts
属性がString virtualHosts
へ変更になりました。JBoss EAP 6 では、デプロイメント毎に 1 つの仮想ホストのみを指定できます。複数の Web サービスが@WebContext
アノテーションを使用する場合は、デプロイメントアーカイブに定義されるすべてのエンドポイントで virtualHost の値が同じになるようにする必要があります。 - エンドポイントの設定
- JBossWS 4.0 は、JBoss Web Services スタックと、ほとんどの Apache CXF プロジェクトモジュールとの統合を実現します。統合レイヤーにより、JAX-WS を含む標準の Web サービス API を使用できます。また、複雑な設定を必要とせずに、JBoss EAP 6 コンテナ上で Apache CFX の拡張機能を使用できます。JBoss EAP 6 のドメイン設定にある
webservice
サブシステムには、事前定義されたエンドポイントの設定が含まれています。独自のエンドポイント設定を追加で設定することも可能です。指定のエンドポイント設定の参照には、@org.jboss.ws.api.annotation.EndpointConfig
アノテーションを使用します。JBoss サーバーで Web サービスエンドポイントを設定する方法の詳細は、https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/ にある JBoss EAP 6 向け『開発ガイド』の章「JAX-WS Web サービス『』」を参照してください。 - jboss-webservices.xml デプロイメント記述子
- JBossWS 4.0 には、Web サービスを設定する新しいデプロイメント記述子が導入されました。
jboss-webservices.xml
ファイルが指定のデプロイメントの追加情報を提供し、廃止されたjboss.xml
ファイルを部分的に置き換えます。EJB Web サービスデプロイメントでは、jboss-webservices.xml
記述子ファイルの想定される場所はMETA-INF/
ディレクトリー内になります。WAR ファイルでバンドルされた POJO および EJB Web サービスエンドポイントの想定される場所は、WEB-INF/
ディレクトリーのjboss-webservices.xml
ファイル内になります。以下は、jboss-webservices.xml
記述子ファイルの例と、要素を説明する表になります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Expand 表3.8 jboss-webservice.xml ファイル要素の説明 要素名 説明 context-rootWeb サービスデプロイメントのコンテキストルートをカスタマイズするために使用されます。config-nameconfig-file指定のエンドポイント設定へエンドポイントデプロイメントを関連付けするために使用されます。エンドポイント設定は、参照された設定ファイルまたはドメイン設定のwebservices
サブシステムに指定されます。propertyWeb サービススタックの挙動を設定するため、簡単なプロパティー名と値のペアを指定するために使用されます。port-componentEJB エンドポイントのターゲット URI のカスタマイズまたはセキュリティー関連プロパティーの設定に使用されます。webservice-descriptionWeb サービス WSDL がパブリッシュされる場所をカスタマイズまたは上書きするために使用されます。
3.2.5. JAX-RS および RESTEasy の変更 リンクのコピーリンクがクリップボードにコピーされました!
3.2.5.1. JAX-RS および RESTEasy の変更の設定 リンクのコピーリンクがクリップボードにコピーされました!
web.xml
ファイルから既存の RESTEasy の設定をすべて削除し、次の 3 つのオプションの 1 つに置き換える必要があります。
- Subclass
javax.ws.rs.core.Application
および@ApplicationPath
annotation アノテーションを使用します。これが最も簡単なオプションで、xml の設定が必要ありません。次のようにアプリケーションでjavax.ws.rs.core.Application
をサブクラス化し、 JAX-RS クラスを使用可能にするパスを用いてアノテーションを付けます。@ApplicationPath("/mypath") public class MyApplication extends Application { }
@ApplicationPath("/mypath") public class MyApplication extends Application { }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記の例では、JAX-RS リソースはパス/MY_WEB_APP_CONTEXT/mypath/
で使用できるようになります。注記
パスは/mypath/*
ではなく/mypath
として指定する必要があることに注意してください。最後にフォワードスラッシュやアスタリスクがあってはなりません。 - サブクラス
javax.ws.rs.core.Application
および JAX-RS マッピングの設定にweb.xml
を使用します。@ApplicationPath
アノテーションを使用したくない場合でもjavax.ws.rs.core.Application
をサブクラス化する必要があります。サブクラス化した後にweb.xml
ファイルに JAX-RS マッピングを設定します。public class MyApplication extends Application { }
public class MyApplication extends Application { }
Copy to Clipboard Copied! Toggle word wrap Toggle overflow <servlet-mapping> <servlet-name>com.acme.MyApplication</servlet-name> <url-pattern>/hello/*</url-pattern> </servlet-mapping>
<servlet-mapping> <servlet-name>com.acme.MyApplication</servlet-name> <url-pattern>/hello/*</url-pattern> </servlet-mapping>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記の例では、JAX-RS リソースはパス/MY_WEB_APP_CONTEXT/hello
で使用できるようになります。注記
この方法を使用して@ApplicationPath
アノテーションを使用して設定されたアプリケーションパスを上書きすることもできます。 web.xml
ファイルを変更します。Application
をサブクラス化したくない場合、次のようにweb.xml
ファイルで JAX-RS のマッピングを設定することが可能です。<servlet-mapping> <servlet-name>javax.ws.rs.core.Application</servlet-name> <url-pattern>/hello/*</url-pattern> </servlet-mapping>
<servlet-mapping> <servlet-name>javax.ws.rs.core.Application</servlet-name> <url-pattern>/hello/*</url-pattern> </servlet-mapping>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記の例では、JAX-RS リソースはパス/MY_WEB_APP_CONTEXT/hello
で使用できるようになります。注記
このオプションを選択した場合、マッピングの追加のみが必要となります。対応するサーブレットを追加する必要はありません。対応するサーブレットはサーバーによって自動的に追加されるはずです。
3.2.6. LDAP セキュリティーレルムの変更 リンクのコピーリンクがクリップボードにコピーされました!
3.2.6.1. LDAP セキュリティーレルムの変更設定 リンクのコピーリンクがクリップボードにコピーされました!
login-config.xml
ファイルの <application-policy>
要素に設定されていました。JBoss EAP 6 では、LDAP セキュリティーレルムはサーバー設定ファイルの <security-domain>
要素に設定されています。サーバー設定ファイルはスタンドアロンサーバーでは standalone/configuration/standalone.xml
ファイルになります。サーバーが管理ドメインで実行されている場合、domain/configuration/domain.xml
ファイルがサーバー設定ファイルになります。
login-config.xml
ファイルにある LDAP セキュリティーレルム設定の例は次のとおりです。
注記
<module-option name="java.naming.factory.initial">com.sun.jndi.ldap.LdapCtxFactory</module-option>
<module-option name="java.naming.factory.initial">com.sun.jndi.ldap.LdapCtxFactory</module-option>
<module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
<module-option name="java.naming.factory.initial" value="com.sun.jndi.ldap.LdapCtxFactory"/>
3.2.7. HornetQ の変更 リンクのコピーリンクがクリップボードにコピーされました!
3.2.7.1. HornetQ および NFS について リンクのコピーリンクがクリップボードにコピーされました!
- Red Hat Enterprise Linux NFS クライアントのキャッシュは無効にする必要があります。
重要
重要
libaio
がインストールされている必要があります。
3.2.7.2. 既存の JMS メッセージを JBoss EAP 6 へ移行するために JMS ブリッジを設定する リンクのコピーリンクがクリップボードにコピーされました!
手順3.19 JBoss EAP 5.x サーバーへデプロイされた JMS ブリッジの設定
EAP5_HOME/server/PROFILE_NAME/deploy/myBridge.sar
のように、JBoss EAP 5 デプロイディレクトリーに SAR を格納するサブディレクトリーを作成します。EAP5_HOME/server/PROFILE_NAME/deploy/myBridge.sar/
にMETA-INF
という名前のサブディレクトリーを作成します。- 以下と似た情報が含まれる
jboss-service.xml
ファイルをEAP5_HOME/server/PROFILE_NAME/deploy/myBridge.sar/META-INF/
ディレクトリーに作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記
<load-repository>
は SAR に分離されたクラスローダーが確実に存在するようにします。JNDI ルックアップとブリッジの「ターゲット」の両方に、パスワードが 「jbosspass」であるユーザー 「jbossuser」のセキュリティー認証情報が含まれていることに注意してください。これは、JBoss EAP 6 はデフォルトで保護されているからです。パスワードが 「jbosspass」であるユーザー「jbossuser」はguest
ロールを持ち、EAP_HOME/bin/add_user.sh
スクリプトを使用してApplicationRealm
に作成されました。 - 次の JAR を
EAP_HOME/modules/system/layers/base/
ディレクトリーからEAP5_HOME/server/PROFILE_NAME/deploy/myBridge.sar/
ディレクトリーへコピーします。 VERSION_NUMBER を JBoss EAP 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 クラスは JBoss EAP 5.x のクラスと競合するため、単にそのままEAP_HOME/bin/client/jboss-client.jar
をコピーしないようにしてください。
手順3.20 JBoss EAP 6.x サーバーへデプロイされた JMS ブリッジの設定
- メッセージプロバイダーの JBoss モジュールを作成します。
- 新しいモジュール向けに
EAP_HOME/modules/system/layers/base/
下にディレクトリー構造を作成します。main/
サブディレクトリーには、クライアント JAR とmodule.xml
ファイルを格納します。EAP_HOME/modules/system/layers/base/org/mycustommq/main/
は MyCustomMQ メッセージングプロバイダー用に作成されたディレクトリー構造の例になります。 main/
サブディレクトリー内に、メッセージングプロバイダーのモジュール定義が含まれるmodule.xml
ファイルを作成します。MyCustomMQ メッセージプロバイダー用に作成されたmodule.xml
の例は次のとおりです。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ソースリソースの JNDI ルックアップに必要なメッセージングプロバイダー JAR をモジュールの
main/
サブディレクトリーへコピーします。MyCustomMQ モジュールのディレクトリー構造は次のようになるはずです。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- JBoss EAP 6 サーバーの
messaging
サブシステムに JMS ブリッジを設定します。- 設定を行う前に、サーバーを停止し、現在のサーバー設定ファイルをバックアップしてください。スタンドアロンサーバーを実行している場合は、
EAP_HOME/standalone/configuration/standalone-full-ha.xml
ファイルをバックアップします。管理対象ドメインを実行している場合は、EAP_HOME/domain/configuration/domain.xml
ファイルおよびEAP_HOME/domain/configuration/host.xml
ファイルを両方バックアップします。 <jms-bridge>
要素を、サーバー設定ファイルのmessaging
サブシステムへ追加します。<source>
および<target>
要素は、JNDI ルックアップに使用される JMS リソースの名前を提供します。<user>
および<password>
クレデンシャルが指定されいると、JMS 接続の作成時に引数として渡されます。MyCustomMQ メッセージングプロバイダー用に設定された<jms-bridge>
要素の例は次のとおりです。JNDI プロパティーはCopy to Clipboard Copied! Toggle word wrap Toggle overflow <source>
の<context>
要素に定義されています。上記の<target>
の例のように、<context>
要素を省略すると、JMS リソースはローカルインスタンスでルックアップされます。
3.2.7.3. HornetQ を JMS プロバイダーとして使用するためにアプリケーションを移行 リンクのコピーリンクがクリップボードにコピーされました!
手順3.21 開始する前に
- クライアントとサーバーをシャットダウンします。
- JBoss Messaging データのバックアップコピーを作成します。メッセージデータは、
JBM_
という接頭辞でデータベースのテーブルに格納されます。
手順3.22 HornetQ へのプロバイダーの変更
設定の転送
既存の JBoss Messaging 設定を JBoss EAP 6 設定に転送します。以下の設定が、 JBoss Mesaging サーバーにあるデプロイメント記述子に存在します。- 接続ファクトリーサービス設定この設定は、 JBoss Messaging サーバーにデプロイされた JMS 接続ファクトリーを定義します。JBoss Messaging は、アプリケーションサーバーのデプロイメントディレクトリーにある
connection-factories-service.xml
という名前のファイルで接続ファクトリーを設定します。 - 宛先設定この設定は、JBoss Messaging サーバーでデプロイされた JMS キューおよびトピックを定義します。デフォルトでは、JBoss Messaging は、アプリケーションサーバーのデプロイメントディレクトリーにある
destinations-service.xml
という名前のファイルで宛先を設定します。 - メッセージブリッジサービス設定この設定には、JBoss Messaging サーバーでデプロイされたブリッジサービスが含まれます。デフォルトではブリッジがデプロイされないため、デプロイメントファイルの名前は、JBoss Messaging インストールによって異なります。
アプリケーションコードの変更
アプリケーションコードで標準的な JMS を使用する場合は、コードの変更が必要ありません。ただし、アプリケーションがクラスターに接続する場合は、クラスタリングセマンティクスについて HornetQ ドキュメンテーションを参照する必要があります。クラスタリングは、JMS 仕様の範囲外であり、クラスタリング機能の各実装において JBoss Messaging は非常に異なる方法を取ります。アプリケーションが JBoss Messaging に固有な機能を使用する場合は、HornetQ で利用可能な同等の機能を使用するようコードを変更する必要があります。HornetQ でメッセージングを設定する方法の詳細については、 「HornetQ でのメッセージングの設定」を参照してください。既存のメッセージの移行
JMS ブリッジを使用して JBoss Messaging データベースのすべてのメッセージを HornetQ ジャーナルに移動します。JMS ブリッジの設定手順については、 「既存の JMS メッセージを JBoss EAP 6 へ移行するために JMS ブリッジを設定する」を参照してください。
3.2.7.4. HornetQ でのメッセージングの設定 リンクのコピーリンクがクリップボードにコピーされました!
standalone.xml
や domain.xml
設定ファイルを手作業で編集せずに永続的な変更を行うことができますが、デフォルト設定ファイルのメッセージングコンポーネントについて理解できると便利です。デフォルトの設定ファイルでは、管理ツールを使用するドキュメントサンプルにより参考用の設定ファイル断片が提供されます。
3.2.8. クラスタリングの変更 リンクのコピーリンクがクリップボードにコピーされました!
3.2.8.1. クラスタリングに対するアプリケーションの変更 リンクのコピーリンクがクリップボードにコピーされました!
手順3.23
クラスタリグが有効な状態で JBoss EAP 6 を起動する
JBoss EAP 5.x でクラスタリングを有効にするには、次のようにall
プロファイル (またはその派生プロファイル) を使用してサーバーインスタンスを起動する必要がありました。$ EAP5_HOME/bin/run.sh -c all
JBoss EAP 6 でクラスタリングを有効にする方法は、サーバーがスタンドアロンであるかまたは管理ドメインで実行されているかによって異なります。管理対象ドメインで実行されているサーバーに対してクラスタリングを有効にする
ドメインコントローラーを使用して起動したサーバーに対してクラスタリングを有効にするには、domain.xml
を更新し、ha
プロファイルとha-sockets
ソケットバインディンググループを使用するサーバーグループを指定します。例は次のとおりです。Copy to Clipboard Copied! Toggle word wrap Toggle overflow スタンドアローンサーバーに対してクラスタリングを有効にする
スタンドアロンサーバーに対してクラスタリングを有効にするには、$ EAP_HOME/bin/standalone.sh --server-config=standalone-ha.xml -Djboss.node.name=UNIQUE_NODE_NAME
のように、適切な設定ファイルを使用してサーバーを起動します。
バインドアドレスを指定する
JBoss EAP 5.x では、通常$ EAP_HOME/bin/run.sh -c all -b 192.168.0.2
のように-b
コマンドライン引数を用いて、クラスタリングに使用するバインドアドレスを指定しました。JBoss EAP 6 では、JBoss EAP 6 の設定ファイル内の関連するソケットバインディングによってバインドアドレスが明示的に定義されます。ドメインコントローラーを用いて起動したサーバーの場合、バインドアドレスはdomain/configuration/host.xml
ファイル内で指定されます。スタンドアロンサーバーの場合、バインドアドレスはstandalone-ha.xml
ファイル内で指定されます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 上記の例では、Copy to Clipboard Copied! Toggle word wrap Toggle overflow public
インターフェースは、ha-sockets
ソケットバインディンググループ内のすべてのソケットに対するデフォルトのインターフェースとして指定されます。jvmRoute
が mod_jk と mod_proxy をサポートするよう設定するJBoss EAP 5 では、Web サーバーjvmRoute
はserver.xml
ファイルのプロパティーを使用して設定されていました。JBoss EAP 6 では、jvmRoute
属性は、以下のようにinstance-id
属性を使用してサーバー設定ファイルの Web サブシステムで設定されます。上記の {JVM_ROUTE_SERVER} は、jvmRoute サーバー ID で置き換える必要があります。<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="false" instance-id="{JVM_ROUTE_SERVER}">
<subsystem xmlns="urn:jboss:domain:web:1.1" default-virtual-server="default-host" native="false" instance-id="{JVM_ROUTE_SERVER}">
Copy to Clipboard Copied! Toggle word wrap Toggle overflow instance-id
は、管理コンソールを使用して設定することもできます。マルチキャストアドレスおよびポートを指定する
JBoss EAP 5.x では、$ EAP_HOME/bin/run.sh -c all -u 228.11.11.11 -m 45688
のように、コマンドライン引数-u
を使用してクラスター内の通信に使用されるマルチキャストアドレスを指定できました。 同様に、引数-m
を使用してクラスター内の通信に使用されるポートを指定できました。JBoss EAP 6 では、クラスター内の通信に使用されるマルチキャストアドレスとポートは、以下のように該当する JGroups プロトコルにより参照されたソケットバインディングにより定義されます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow コマンドラインでマルチキャストアドレスおよびポートを指定する場合は、マルチキャストアドレスとポートをシステムプロパティーとして定義し、サーバーを起動するときにこれらのプロパティーをコマンドラインで使用できます。以下の例では、Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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}"/>
<socket-binding name="jgroups-udp" port="55200" multicast-address="${jboss.mcast.addr:230.0.0.4}" multicast-port="${jboss.mcast.port:45688}"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow $ EAP_HOME/bin/domain.sh -Djboss.mcast.addr=228.11.11.11 -Djboss.mcast.port=45688
を使用してサーバーを起動できます。代替のプロトコルスタックを使用する
JBoss EAP 5.x では、jboss.default.jgroups.stack
システムプロパティーを使用してすべてのクラスタリングサービスに使用されるデフォルトのプロトコルスタックを操作することができました。$ EAP_HOME/bin/run.sh -c all -Djboss.default.jgroups.stack=tcp
JBoss EAP 6 では、domain.xml
またはstandalone-ha.xml
内の JGroups サブシステムによってデフォルトのプロトコルスタックが定義されます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow バディーレプリケーション
JBoss EAP 5.x は JBoss Cache のバディーレプリケーションを使用して、クラスターのすべてのインスタンスへのデータレプリケーションを抑制しました。JBoss サーバーの起動時に、コマンドラインで引数-Djboss.cluster.buddyRepl
を渡す必要がありました。JBoss EAP 6 ではバディーレプリケーションは、Infinispan のはるかに優れた分散キャッシュまたは DIST モードに置き換えられました。DIST (分散) は強力なクラスタリングモードで、サーバーがクラスターに追加されると Infinispan によって直線的なスケーラビリティを実現できます。サーバーが DIST キャッシングモードを使用するよう設定する方法の例は次のとおりです。- コマンドラインを開き、次のように HA または Full プロファイルのいずれかでサーバーを起動します。
EAP_HOME/bin/standalone.sh -c standalone-ha.xml
EAP_HOME/bin/standalone.sh -c standalone-ha.xml
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 別のコマンドラインを開き、管理 CLI へ接続します。
- Linux の場合は、コマンドラインで以下を入力します。
EAP_HOME/bin/jboss-cli.sh --connect
$ EAP_HOME/bin/jboss-cli.sh --connect
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Windows の場合は、コマンドラインで以下を入力します。
C:\>EAP_HOME\bin\jboss-cli.bat --connect
C:\>EAP_HOME\bin\jboss-cli.bat --connect
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次の応答が表示されるはずです。Connected to standalone controller at localhost:9999
Connected to standalone controller at localhost:9999
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 以下のコマンドを実行します。
/subsystem=infinispan/cache-container=web/:write-attribute(name=default-cache,value=dist) /subsystem=infinispan/cache-container=web/distributed-cache=dist/:write-attribute(name=owners,value=3) :reload
/subsystem=infinispan/cache-container=web/:write-attribute(name=default-cache,value=dist) /subsystem=infinispan/cache-container=web/distributed-cache=dist/:write-attribute(name=owners,value=3) :reload
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 各コマンドの後に、以下の応答が表示されるはずです。"outcome" => "success"
"outcome" => "success"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow これらのコマンドは、standalone-ha.xml
ファイルのinfinispan
サブシステムに以下の設定を作成します。詳細は、 https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/ にある JBoss EAP 6 向け『開発ガイド『』』の章「Web アプリケーションのクラスター化『』」を参照してください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.8.2. HA シングルトンの実装 リンクのコピーリンクがクリップボードにコピーされました!
JBoss EAP 5 では、HA シングルトンアーカイブは他のデプロイメントとは別に deploy-hasingleton/
ディレクトリーにデプロイされていました。これは自動デプロイメントが発生しないようにするためで、また確実に HASingletonDeployer サービスがデプロイメントを制御し、クラスターのマスターノードのみにアーカイブがデプロイされるようにするための処置でした。ホットデプロイメント機能がなかったため、再デプロイメントにはサーバーの再起動が必要でした。また、マスターノードに障害が発生し、他のノードがマスターとして引き継ぐ必要がある場合、シングルトンサービスはサービスを提供するためデプロイメントプロセス全体を実行する必要がありました。
手順3.24 HA シングルトンサービスの実装
HA シングルトンサービスアプリケーションを作成します。
シングルトンサービスとしてデプロイされる SingletonService デコレーターでラッピングされたサービスの簡単な例は次のとおりです。シングルトンサービスを作成します。
以下のリストは、シングルトンサービスの例です。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サーバー起動時にサービスを SingletonService として起動するためにシングルトン EJB を作成します。
以下のリストは、サーバー起動時に SingletonService を起動するシングルトン EJB の例です。Copy to Clipboard Copied! Toggle word wrap Toggle overflow クライアントよりサービスへアクセスするためステートレスセッション Bean を作成します。
以下は、クライアントからサービスにアクセスするステートレスセッション Bean の例です。Copy to Clipboard Copied! Toggle word wrap Toggle overflow SingletonService のビジネスロジックインターフェースを作成します。
以下は、SingletonService に対するビジネスロジックインターフェースの例です。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
クラスタリングが有効な状態で各 JBoss EAP 6 インスタンスを起動します。
クラスターを有効化する方法は、サーバーがスタンドアローンであるか管理対象ドメインで実行されているかによって異なります。管理対象ドメインで実行されているサーバーに対してクラスタリングを有効にします。
管理 CLI を使用してクラスタリングを有効にするか、設定ファイルを手動で編集できます。管理 CLI を使用してクラスタリングを有効にします。
ドメインコントローラーを起動します。
オペレーティングシステムのコマンドプロンプトを開きます。
ドメインコントローラーの IP アドレスまたは DNS 名を渡して管理 CLI に接続します。
この例では、ドメインコントローラーの IP アドレスが192.168.0.14
であることを前提とします。- Linux の場合は、コマンドラインで以下を入力します。
EAP_HOME/bin/jboss-cli.sh --connect --controller=192.168.0.14
$ EAP_HOME/bin/jboss-cli.sh --connect --controller=192.168.0.14
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Windows の場合は、コマンドラインで以下を入力します。
C:\>EAP_HOME\bin\jboss-cli.bat --connect --controller=192.168.0.14
C:\>EAP_HOME\bin\jboss-cli.bat --connect --controller=192.168.0.14
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
次の応答が表示されるはずです。Connected to domain controller at 192.168.0.14
Connected to domain controller at 192.168.0.14
Copy to Clipboard Copied! Toggle word wrap Toggle overflow main-server
サーバーグループを追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow server-one
という名前のサーバーを作成し、main-server
サーバーグループに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow main-server
サーバーグループに対して JVM を設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow server-two
という名前のサーバーを作成し、別のサーバーグループに置き、ポートオフセットを 100 に設定します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
サーバー設定ファイルを手動で編集してクラスタリングを有効にします。
JBoss EAP 6 サーバーを停止します。
重要
変更がサーバーの再起動後にも維持されるようにするには、サーバー設定ファイルの編集前にサーバーを停止する必要があります。domain.xml
設定ファイルを開いて編集します。ha
プロファイルとha-sockets
ソケットバインディンググループを使用するサーバーグループを指定します。例は次のとおりです。Copy to Clipboard Copied! Toggle word wrap Toggle overflow host.xml
設定ファイルを開いて編集します。以下のようにファイルを変更します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーを起動します。
- Linux の場合は、
EAP_HOME/bin/domain.sh
と入力します。 - Microsoft Windows の場合は、
EAP_HOME\bin\domain.bat
と入力します。
スタンドアローンサーバーに対してクラスタリングを有効にする
スタンドアローンサーバーに対してクラスタリングを有効にするには、次のようにノード名とstandalone-ha.xml
設定ファイルを使用してサーバーを起動します。- Linux の場合は、
EAP_HOME/bin/standalone.sh --server-config=standalone-ha.xml -Djboss.node.name=UNIQUE_NODE_NAME
と入力します。 - Microsoft Windows の場合は、
EAP_HOME\bin\standalone.bat --server-config=standalone-ha.xml -Djboss.node.name=UNIQUE_NODE_NAME
と入力します。
注記
1 つのマシン上で複数のサーバーが実行されている時にポートの競合が発生しないようにするため、別のインターフェースでバインドするように各サーバーインスタンスに対してstandalone-ha.xml
ファイルを設定します。または、コマンドラインで-Djboss.socket.binding.port-offset=100
のような引数を使用し、ポートオフセットを持つ後続のサーバーインスタンスを開始して対応することも可能です 。アプリケーションをサーバーにデプロイします。
Maven を使用してアプリケーションをデプロイする場合は、次の Maven コマンドを使用してデフォルトのポートで稼働しているサーバーへデプロイします。mvn clean install jboss-as:deploy
追加のサーバーをデプロイするには、サーバー名とポート番号をコマンドラインに渡します。mvn clean package jboss-as:deploy -Ddeploy.hostname=localhost -Ddeploy.port=10099
3.2.9. サービススタイルデプロイメントの変更 リンクのコピーリンクがクリップボードにコピーされました!
3.2.9.1. サービススタイルデプロイメントを使用するアプリケーションの更新 リンクのコピーリンクがクリップボードにコピーされました!
JBoss EAP 6 はサービススタイル記述子を使用しないようになりましたが、できる限り変更がない状態でコンテナはサービススタイルデプロイメントをサポートします。そのため、JBoss EAP 5.x アプリケーションの jboss-service.xml
または jboss-beans.xml
デプロイメント記述子を使用した場合、JBoss EAP 6 へ変更をほとんどまたは全く加えなくても実行できるはずです。継続してファイルを EAR や SAR にパッケージ化することが可能ですが、ファイルを直接 deployments ディレクトリーに置くこともできます。スタンドアロンサーバーをを実行している場合、deployments ディレクトリーは EAP_HOME/standalone/deployments/
になります。管理ドメインを実行している場合、 deployments フォルダーは EAP_HOME/domain/deployments/
になります。
3.2.10. リモート呼び出しの変更 リンクのコピーリンクがクリップボードにコピーされました!
3.2.10.1. JBoss EAP 5 にデプロイされ、JBoss EAP 6 へリモート呼び出しを行うアプリケーションの移行 リンクのコピーリンクがクリップボードにコピーされました!
JBoss EAP 6 では、次の 2 つの方法でサーバーへリモート呼び出しすることができます。
- 新しい JBoss 固有の EJB クライアント API を使用して呼び出しを行う。
- JNDI を使用して Bean のプロキシをルックアップし、返されたプロキシ上で呼び出しを行う。
ejb:
NAMESPACE_NAME を使用して EJB へリモートアクセスします。ステートレス Bean の場合、構文は次のようになります。
ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>
ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>
ejb:<app-name>/<module-name>/<distinct-name>/<bean-name>!<fully-qualified-classname-of-the-remote-interface>?stateful
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 EAP 6 サーバーにデプロイしたことにします。これにより、Bean のリモートビューが公開されます。
final RemoteCalculator statefulRemoteCalculator = (RemoteCalculator) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName + "?stateful")
final RemoteCalculator statefulRemoteCalculator = (RemoteCalculator) context.lookup("ejb:" + appName + "/" + moduleName + "/" + distinctName + "/" + beanName + "!" + viewClassName + "?stateful")
3.2.10.2. JNDI を使用したリモートでのセッション Bean の呼び出し リンクのコピーリンクがクリップボードにコピーされました!
ejb-remote
クイックスタートには、この機能のデモを行う Maven プロジェクトが含まれています。このクイックスタートには、デプロイするセッション Bean のプロジェクトとリモートクライアントのプロジェクトの両方が含まれています。下記のコード例はリモートクライアントのプロジェクトから引用されています。
要件
- Maven プロジェクトが作成され、使用できる状態です。
- JBoss EAP 6 の Maven リポジトリが既に追加されています。
- 呼び出しするセッション Bean が既にデプロイされています。
- デプロイされたセッション Bean がリモートビジネスインターフェースを実装します。
- セッション Bean のリモートビジネスインターフェースは Maven 依存関係として使用できます。リモートビジネスインターフェースが JAR ファイルとしてのみ使用できる場合は、JAR をアーティファクトとして Maven リポジトリに追加することが推奨されます。手順については、http://maven.apache.org/plugins/maven-install-plugin/usage.html にある Maven ドキュメントの
install:install-file
ゴールを参照してください。 - セッション Bean をホストするサーバーのホスト名と JNDI ポートを覚えておく必要があります。
手順3.25 セッション Bean のリモート呼び出しに対する Maven プロジェクト設定を追加する
必要なプロジェクト依存関係の追加
必要な依存関係が含まれるようにするため、プロジェクトのpom.xml
を更新する必要があります。jboss-ejb-client.properties
ファイルの追加JBoss EJB クライアント API は、JNDI サービスの接続情報が含まれるjboss-ejb-client.properties
という名前のプロジェクトのルートにファイルがあることを想定します。このファイルを以下の内容と共にプロジェクトのsrc/main/resources/
ディレクトリーに追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ホスト名とポートを変更してサーバーと一致するようにします。4447
がデフォルトのポート番号です。 安全な接続の場合、SSL_ENABLED
行をtrue
に設定し、SSL_STARTTLS
行をアンコメントします。コンテナ内のリモーティングインターフェースは同じポートを使用して安全な接続と安全でない接続をサポートします。リモートビジネスインターフェースの依存関係の追加
セッション Bean のリモートビジネスインターフェースに対するpom.xml
に Maven の依存関係を追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順3.26 JNDI を使用して Bean プロキシを取得し、Bean のメソッドを呼び出す
チェック例外の処理
次のコードに使用されるメソッドの 2 つ (InitialContext()
およびlookup()
) は、タイプjavax.naming.NamingException
のチェック済み例外を持っています。これらのメソッド呼び出しはNamingException
をキャッチする try/catch ブロックか、NamingException
のスローが宣言されたメソッドに存在する必要があります。ejb-remote
クイックスタートでは、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);
final Hashtable jndiProperties = new Hashtable(); jndiProperties.put(Context.URL_PKG_PREFIXES, "org.jboss.ejb.client.naming"); final Context context = new InitialContext(jndiProperties);
Copy to Clipboard Copied! Toggle word wrap Toggle overflow JNDI サービスの接続プロパティーはjboss-ejb-client.properties
ファイルより読み取られます。JNDI コンテキストの lookup() メソッドを使用した Bean プロキシの取得
Bean プロキシのlookup()
メソッドを呼び出し、必要なセッション Bean の JNDI 名 へ渡します。これにより、呼び出したいメソッドが含まれるリモートビジネスインターフェースのタイプへキャストされなければならないオブジェクトが返されます。final RemoteCalculator statelessRemoteCalculator = (RemoteCalculator) context.lookup( "ejb:/jboss-as-ejb-remote-server-side/CalculatorBean!" + RemoteCalculator.class.getName());
final RemoteCalculator statelessRemoteCalculator = (RemoteCalculator) context.lookup( "ejb:/jboss-as-ejb-remote-server-side/CalculatorBean!" + RemoteCalculator.class.getName());
Copy to Clipboard Copied! Toggle word wrap Toggle overflow セッション Bean の JNDI 名は特別な構文によって定義されます。呼び出しメソッド
プロキシ Bean オブジェクトを取得したため、リモートビジネスインターフェースに含まれるすべてのメソッドを呼び出しすることができます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow メソッド呼び出し要求が実行されるサーバー上で、プロキシ Bean がメソッド呼び出し要求をセッション Bean へ渡します。結果はプロキシ Bean へ返され、プロキシ Bean によって結果が呼び出し側へ返されます。プロキシ Bean とリモートセッション Bean 間の通信は呼び出し側に透過的です。
3.2.11. EJB 2.x の変更 リンクのコピーリンクがクリップボードにコピーされました!
3.2.11.1. EJB 2.x を使用するアプリケーションの更新 リンクのコピーリンクがクリップボードにコピーされました!
手順3.27 JBoss EAP 6 で EJB 2.x を起動する
JNDI 名前空間の新しいルールを使用するようコードを変更する
EJB 3.0 と同様に、EJB 2.x でも完全な JNDI プレフィックスを使用する必要があります。新しい JNDI 名前空間ルールやコード例の詳細については、 「アプリケーションの JNDI 名前空間名の更新」を参照してください。以前のリリースから JNDI 名前空間を更新する方法を表す例は 「以前のリリースでの JNDI 名前空間の例、および JBoss EAP 6 での名前空間の指定方法」にあります。jboss-web.xml
ファイル記述子を変更する各<ejb-ref>
に対する<jndi-name>
を変更し、新しい JNDI 完全修飾ルックアップ形式を使用するようにします。jboss.xml
デプロイメント記述子ファイルを置き換えるJava Enterprise Edition (EE) によって定義されるejb-jar.xml
デプロイメント記述子によって提供される機能を上書きしたり追加するために、jboss.xml
はjboss-ejb3.xml
デプロイメント記述子に置き換えられました。この新しいファイルはjboss.xml
との互換性がないため、jboss.xml
はデプロイメントで無視されます。完全プロファイルでサーバーを起動する
EJB 2.x には Java Enterprise Edition 6 の完全プロファイルが必要となります。完全プロファイルで JBoss EAP 6 を起動するには、サーバーの起動時に引数-c standalone-full.xml
をコマンドラインに渡します。クラスター化はサポートされない
EJB 2.x エンティティー Bean のクラスター化は JBoss EAP 6 ではサポートされないようになりました。
3.2.12. JBoss AOP Changes リンクのコピーリンクがクリップボードにコピーされました!
3.2.12.1. JBoss AOP を使用するアプリケーションの更新 リンクのコピーリンクがクリップボードにコピーされました!
- 以前、
ejb3-interceptors-aop.xml
ファイルで行われた標準的な EJB3 設定は、サーバー設定ファイルで設定されるようになりました。スタンドアロンサーバーの場合、このファイルはstandalone/configuration/standalone-full.xml
ファイルになります。サーバーが管理ドメインで実行されている場合はdomain/configuration/domain.xml
ファイルになります。 - サーバー側の AOP インターセプターが標準の Java EE
Interceptor
を使用するよう変更する必要があります。コンテナインターセプターの詳細や、アプリケーションでクライアント側インターセプターを使用する方法については、https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/ にある JBoss EAP 6 向け『開発ガイド『』』の章「コンテナインターセプター『』」を参照してください。
- コードをリファクタリングできない場合は、JBoss AOP ライブラリーのコピーを取得し、そのコピーとアプリケーションをバンドルできます。AOP ライブラリーは JBoss EAP 6 で動作することがありますが、デプロイされません。手動でデプロイするには、サーバーの起動時にコマンドライン引数
Djboss.aop.path=PATH_TO_AOP_CONFIG
を使用します。注記
JBoss AOP ライブラリーは JBoss EAP 6 で動作することがありますが、この設定はサポートされません。
3.2.13. Seam 2.2 アプリケーションの移行 リンクのコピーリンクがクリップボードにコピーされました!
3.2.13.1. Seam 2.2 アーカイブの JBoss EAP 6 への移行 リンクのコピーリンクがクリップボードにコピーされました!
Seam 2.2 アプリケーションを移行する際、データソースを設定し、モジュール依存関係を指定する必要があります。また、JBoss EAP 6 に同梱されないアーカイブにアプリケーションの依存関係があるかを判断し、依存している JAR をアプリケーションの lib/
ディレクトリーにコピーする必要があります。
重要
手順3.28 Seam 2.2 アーカイブの移行
データソース設定を更新する
一部の Seam 2.2 の例は、java:/ExampleDS
という名前のデフォルトの JDBC データソースを使用します。このデフォルトデータソースは JBoss EAP 6 ではjava:jboss/datasources/ExampleDS
に変更になりました。例のデータベースがアプリケーションによって使用される場合、以下の方法の 1 つ実行します。データソースの設定方法の詳細については 、 「DataSource 設定の更新」 を参照してください。- JBoss EAP 6 に同梱されるサンプルデータベースを使用する場合は、既存の
jta-data-source
要素をサンプルデータベースのデータソース JNDI 名に置き換えるようMETA-INF/persistence.xml
ファイルを変更します。<!-- <jta-data-source>java:/ExampleDS</jta-data-source> --> <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
<!-- <jta-data-source>java:/ExampleDS</jta-data-source> --> <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 既存のデータベースを維持したい場合は、データソースの定義を
EAP_HOME/standalone/configuration/standalone.xml
ファイルに追加することができます。重要
変更がサーバーの再起動後にも維持されるようにするには、サーバー設定ファイルの編集前にサーバーを停止する必要があります。JBoss EAP 6 で定義されたデフォルトの HSQL データソースのコピーは以下のとおりです。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 管理 CLI コマンドラインインターフェースを使用してデータソースの定義を追加することも可能です。データソースを追加する場合に使用しなければならない構文の例は次のとおりです。行の最後にある「\」はコマンドが次の行に続くことを表しています。
例3.1 データソース定義を追加する構文の例
EAP_HOME/bin/jboss-cli --connect
$ 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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
必要な依存関係を追加する
Seam 2.2 アプリケーションは JSF 1.2 を使用するため、JSF 1.2 モジュールの依存関係を追加し、 JSF 2.0 モジュールを除外する必要があります。これを実行するには、以下のデータが格納される EAR のMETA-INF/
ディレクトリーにjboss-deployment-structure.xml
ファイルを作成する必要があります。アプリケーションがサードパーティー製のロギングフレームワークを使用する場合は、 「ロギング依存関係の編集」で説明されているようにこれらの依存関係を追加する必要があります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションが Hibernate 3.x を使用する場合は、最初に Hibernate 4 ライブラリーを使用してアプリケーションを実行する
アプリケーションが Seam Managed Persistence Context、Hibernate 検索、検証、または Hibernate 4 で変更された他の機能を使用しない場合は、Hibernate 4 ライブラリーで実行できることがあります。ただし、Hibernate クラスを参照するClassNotFoundExceptions
またはClassCastExceptions
がある場合や以下のようなエラーが発生した場合は、次の手順に従い、Hibernate 3.3 ライブラリーを使用するようアプリケーションを変更する必要があることがあります。Caused by: java.lang.LinkageError: loader constraint violation in interface itable initialization: when resolving method "org.jboss.seam.persistence.HibernateSessionProxy.getSession(Lorg/hibernate/EntityMode;)Lorg/hibernate/Session;" the class loader (instance of org/jboss/modules/ModuleClassLoader) of the current class, org/jboss/seam/persistence/HibernateSessionProxy, and the class loader (instance of org/jboss/modules/ModuleClassLoader) for interface org/hibernate/Session have different Class objects for the type org/hibernate/Session used in the signature
Caused by: java.lang.LinkageError: loader constraint violation in interface itable initialization: when resolving method "org.jboss.seam.persistence.HibernateSessionProxy.getSession(Lorg/hibernate/EntityMode;)Lorg/hibernate/Session;" the class loader (instance of org/jboss/modules/ModuleClassLoader) of the current class, org/jboss/seam/persistence/HibernateSessionProxy, and the class loader (instance of org/jboss/modules/ModuleClassLoader) for interface org/hibernate/Session have different Class objects for the type org/hibernate/Session used in the signature
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 外部フレームワークまたは他の場所より依存するアーカイブをコピーする
アプリケーションが Hibernate 3.x を使用し、アプリケーションが Hibernate 4 を使用すると問題がある場合は、Hibernate 3.x JAR を/lib
ディレクトリーにコピーし、以下のようにMETA-INF/jboss-deployment-structure.xml
のデプロイメントセクションで Hibernate モジュールを除外する必要があります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションで Hibernate 3.x をバンドルする場合は、他にも実行する必要がある手順があります。詳細については、 「Hibernate および JPA を使用するアプリケーションの変更設定」を参照してください。Seam 2.2 JNDI エラーをデバッグおよび解決する
Seam 2.2 アプリケーションを移行する時に次のようなjavax.naming.NameNotFoundException
エラーがログに記録されることがあります。コード全体で JNDI ルックアップを変更しない場合は、以下のようにアプリケーションのjavax.naming.NameNotFoundException: Name 'jboss-seam-booking' not found in context ''
javax.naming.NameNotFoundException: Name 'jboss-seam-booking' not found in context ''
Copy to Clipboard Copied! Toggle word wrap Toggle overflow components.xml
ファイルを変更できます。既存の core-init 要素の置き換え
最初に、以下のように既存の core-init 要素を置き換える必要があります。<!-- <core:init jndi-pattern="jboss-seam-booking/#{ejbName}/local" debug="true" distributable="false"/> --> <core:init debug="true" distributable="false"/>
<!-- <core:init jndi-pattern="jboss-seam-booking/#{ejbName}/local" debug="true" distributable="false"/> --> <core:init debug="true" distributable="false"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サーバーログでの JNDI バインディング INFO メッセージの検索
次に、アプリケーションがデプロイされたときに、JNDI バインディング INFO メッセージがサーバーログに記録されていることを確認します。JNDI バインディングメッセージは以下のようになるはずです。Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンポーネント要素の追加
ログの各 JNDI バインディング INFO メッセージに対して、一致するcomponent
要素をcomponents.xml
ファイルに追加します。<component class="org.jboss.seam.example.booking.AuthenticatorAction" jndi-name="java:app/jboss-seam-booking.jar/AuthenticatorAction" />
<component class="org.jboss.seam.example.booking.AuthenticatorAction" jndi-name="java:app/jboss-seam-booking.jar/AuthenticatorAction" />
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
移行の問題をデバッグおよび解決する方法の詳細については、 「移行の問題のデバッグと解決」を参照してください。Seam 2 アーカイブでの既知の移行の問題一覧については、 「Seam 2.2 アーカイブの移行の問題」を参照してください。
Seam 2.2 アーカイブが JBoss EAP 6 上にデプロイされ、正常に実行されます。
3.2.13.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 の例が動作しない - JBoss EAP 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
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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この問題を回避するには、次のように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 EAP 6 で UserTransaction の JNDI 名が変更になったことが原因です。この問題を回避するには https://issues.jboss.org/browse/JBPAPP-8322 の記述とおりに
org.jboss.seam.transaction.Transaction.getUserTransaction
を上書きします。 - Tasks の例が
org.jboss.resteasy.spi.UnhandledException
: Unable to unmarshall request body をスローする - このバグの原因は JBoss EAP 5.1.2 に含まれる seam-resteasy-2.2.5 と、JBoss EAP 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.
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.
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この問題は JPA 仕様の変更が原因です。この問題を修正するには、CheckoutAction
クラスとShowOrdersAction
クラスの永続コンテキストをtransactional
に変更し、エンティティーマネージャーのマージ操作をcancelOrder
およびdetailOrder
メソッドで使用します。 - JBoss Cache の Seam キャッシュプロバイダーを JBoss EAP 6 で使用できない
- JBoss Cache は JBoss EAP 6 ではサポートされていません。そのため、JBoss Cache の Seam キャッシュプロバイダーは、以下エラーによりアプリケーションサーバーの Seam アプリケーションで失敗します。.
java.lang.NoClassDefFoundError: org/jboss/util/xml/JBossEntityResolver
java.lang.NoClassDefFoundError: org/jboss/util/xml/JBossEntityResolver
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - JBoss EAP 6 での JPA エンティティーの Hibernate 3.3.x 自動スキャンの問題
- この問題を修正するには、すべてのエンティティークラスを手動で persistence.xml ファイルにリストします。例は次のとおりです。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - EJB でないスレッドから EJB Seam コンポーネントを呼び出すと javax.naming.NameNotFoundException が発生する
- この問題は、新しいモジュラークラスローディングシステムを実装し、新たに標準化された JNDI 名前空間の慣例を採用する JBoss EAP 6 の変更が原因です。
java:app
名前空間は、単一のアプリケーションですべてのコンポーネントによって共有される名前を対象としています。Quartz の非同期スレッドなどの EE でないスレッドは、アプリケーションサーバーインスタンスにデプロイされたすべてのアプリケーションによって共有されるjava:global
名前空間を使用する必要があります。Quartz 非同期メソッドより EJB Seam コンポーネントを呼び出そうとした時にjavax.naming.NameNotFoundException
を受信した場合、グローバル JNDI 名を使用するようにcomponents.xml
ファイルを次のように変更する必要があります。<component class="org.jboss.seam.example.quartz.MyBean" jndi-name="java:global/seam-quartz/quartz-ejb/myBean"/>
<component class="org.jboss.seam.example.quartz.MyBean" jndi-name="java:global/seam-quartz/quartz-ejb/myBean"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow JNDI の変更に関する詳細は、「アプリケーションの JNDI 名前空間名の更新」 を参照してください。この問題の詳細は、カスタマーポータル https://access.redhat.com/site/documentation/JBoss_Web_Framework_Kit/ の JBoss Web Framework Kit『』 向け『2.2.0 Release Notes『』』に記載されている「BZ#948215 - Seam2.3 javax.naming.NameNotFoundException trying to call EJB Seam components from quartz asynchronous methods『』」を参照してください。
3.2.14. Spring アプリケーションの移行 リンクのコピーリンクがクリップボードにコピーされました!
3.2.14.1. Spring アプリケーションの移行 リンクのコピーリンクがクリップボードにコピーされました!
3.2.15. 移行に影響するその他の変更 リンクのコピーリンクがクリップボードにコピーされました!
3.2.15.1. 移行に影響する可能性があるその他の変更について理解する リンクのコピーリンクがクリップボードにコピーされました!
3.2.15.2. Maven プラグイン名の変更 リンクのコピーリンクがクリップボードにコピーされました!
jboss-maven-plugin
は更新されていないため、JBoss EAP 6 では動作しません。org.jboss.as.plugins:jboss-as-maven-plugin
を使用して正しいディレクトリーをデプロイする必要があります。
3.2.15.3. クライアントアプリケーションの変更 リンクのコピーリンクがクリップボードにコピーされました!
jboss-client.jar
に変更され、EAP_HOME/bin/client/
ディレクトリーにあります。この JAR は EAP_HOME/client/jbossall-client.jar
に置き換わるもので、リモートクライアントから JBoss EAP 6 に接続するために必要なすべての依存関係が含まれています。
第4章 ツールとヒント リンクのコピーリンクがクリップボードにコピーされました!
4.1. 移行に役立つリソース リンクのコピーリンクがクリップボードにコピーされました!
4.1.1. 移行に役立つリソース リンクのコピーリンクがクリップボードにコピーされました!
- ツール
- 設定変更の一部を自動化するのに役立つツールが複数あります。詳細については、 「移行に便利なツールについて理解する」を参照してください。
- デバッグのヒント
- アプリケーションの移行時に発生する問題やエラーの最も一般的な原因と解決法については、 「移行の問題のデバッグと解決」を参照してください。
- 移行の例
- JBoss EAP 6 へ移行されたアプリケーションの例については、 「サンプルアプリケーションの移行の確認」を参照してください。
4.1.2. 移行に便利なツールについて理解する リンクのコピーリンクがクリップボードにコピーされました!
移行に便利なツールは複数あります。これらのツールとその説明の一覧は次のとおりです。
- Tattletale
- モジュラークラスローディングの変更に伴い、アプリケーション依存関係を検索し、修正する必要があります。Tattletale は依存するモジュールの名前を特定し、アプリケーションに対して設定 XML を生成する時に便利なツールです。
- IronJacamar 移行ツール
- JBoss EAP 6 ではデータソースとリソースアダプターは個別のファイルに設定されていません。データソースとリソースアダプターはサーバー設定ファイルに定義され、新しいスキーマを使用します。IronJacamar 移行ツールは以前の設定を JBoss EAP 6 が想定する形式に変換するときに便利です。
4.1.3. Tattletale を用いたアプリケーション依存関係の検索 リンクのコピーリンクがクリップボードにコピーされました!
JBoss EAP 6 のモジュラークラスローディングの変更に伴い、アプリケーションを移行する時に JBoss ログに ClassNotFoundException
または ClassCastException
トレースが記録されることがあります。このエラーを解決するには、例外が指定するクラスが含まれる JAR を探す必要があります。
jboss-deployment-structure.xml
ファイルが含まれるようにすることが可能です。
手順4.1 Tattletale をインストールおよび実行してアプリケーションの依存関係を検索する
注記
4.1.4. Tattletale のダウンロードとインストール リンクのコピーリンクがクリップボードにコピーされました!
手順4.2
- http://sourceforge.net/projects/jboss/files/JBoss%20Tattletale より Tattletale バージョン 1.2.0.Beta2 またはそれ以降のバージョンをダウンロードします。
- 希望のディレクトリーにファイルを展開します。
- 次のように
TATTLETALE_HOME/jboss-tattletale.properties
ファイルを変更します。ee6
とas7
をprofiles
プロパティーに追加します。profiles=java5, java6, ee6, as7
profiles=java5, java6, ee6, as7
Copy to Clipboard Copied! Toggle word wrap Toggle overflow scan
とreports
プロパティーをアンコメントします。
注記
4.1.5. Tattletale レポートの作成および確認 リンクのコピーリンクがクリップボードにコピーされました!
手順4.3
- 次のコマンドを実行して Tattletale レポートを作成します。
java -jar
TATTLETALE_HOME/tattletale.jar
APPLICATION_ARCHIVE
OUTPUT_DIRECTORY
たとえば、java -jar tattletale-1.2.0.Beta2/tattletale.jar applications/jboss-seam-booking.ear output-results/
となります。 - ブラウザーで
OUTPUT_DIRECTORY/index.html
ファイルを開き、「Reports」セクション下の「JBoss EAP 6」をクリックします。- 左側の列にはアプリケーションによって使用されるアーカイブが一覧表示されます。ARCHIVE_NAME リンクをクリックし、場所やマニュフェスト情報、含まれるクラスなどアーカイブの詳細を表示します。
- 右側の列にある
jboss-deployment-structure.xml
リンクは、左側の列に名前が表示されているアーカイブのモジュール依存関係を指定する方法を表示します。このリンクをクリックし、アーカイブのデプロイメント依存関係モジュール情報を定義する方法を確認します。
注記
4.1.6. IronJacamar ツールを使用してデータソースとリソースアダプターの設定を移行する リンクのコピーリンクがクリップボードにコピーされました!
以前のバージョンのアプリケーションサーバーでは、ファイル名が *-ds.xml
で終わるファイルを使用してデータソースとリソースアダプターが設定されデプロイされました。IronJacamar 1.1 ディストリビューションには、これらの設定ファイルを JBoss EAP 6 が想定する形式に変換できるツールが含まれています。このツールは、以前のリリースよりソースの設定ファイルを解析し、XML 設定を作成してファイルを新しい形式で出力します。この XML を、JBoss EAP 6 のサーバー設定ファイルにある正しいサブシステム下にコピーおよび貼り付けできます。このツールは、できる限り以前の属性や要素を新しい形式に変換しますが、生成されたファイルに変更を追加する必要がある場合があります。
手順4.4 IronJacamar 移行ツールのインストールと実行
注記
4.1.7. IronJacamar 移行ツールのダウンロードとインストール リンクのコピーリンクがクリップボードにコピーされました!
注記
手順4.5
- IronJacamar 1.1 以降のディストリビューションを http://www.jboss.org/ironjacamar/downloads/ よりダウンロードします。
- 希望のディレクトリーにダウンロードしたファイルを展開します。
- IronJacamar ディストリビューションのコンバータースクリプトを探します。
- Linux スクリプトは、
IRONJACAMAR_HOME/doc/as/converter.sh
にあります。 - Windows バッチファイルは、
IRONJACAMAR_HOME/doc/as/converter.bat
にあります。
注記
4.1.8. IronJacamar 移行ツールを使用したデータソース設定ファイルの変換 リンクのコピーリンクがクリップボードにコピーされました!
手順4.6
- コマンドラインを開き、
IRONJACAMAR_HOME/docs/as/
ディレクトリーへ移動します。 - 以下のコマンドを入力して、コンバータースクリプトを実行します。
- Linux の場合:
./converter.sh -ds
SOURCE_FILE
TARGET_FILE
- Microsoft Windows の場合:
./converter.bat -ds
SOURCE_FILE
TARGET_FILE
SOURCE_FILE
は以前のリリースのデータソース -ds.xml ファイルです。TARGET_FILE
に新しい設定が含まれます。例えば、カレントディレクトリーにあるjboss-seam-booking-ds.xml
データソース設定ファイルを変換するには、以下のように入力します。- Linux の場合:
./converter.sh -ds
jboss-seam-booking-ds.xml
new-datasource-config.xml
- Microsoft Windows の場合:
./converter.bat -ds
jboss-seam-booking-ds.xml
new-datasource-config.xml
データソース変換のパラメーターは-ds
になります。 - ターゲットファイルから
<datasource>
要素をコピーし、<subsystem xmlns="urn:jboss:domain:datasources:1.1">
<datasources>
要素下のサーバー設定ファイルに貼り付けます。重要
変更がサーバーの再起動後にも維持されるようにするには、サーバー設定ファイルの編集前にサーバーを停止する必要があります。- 管理対象ドメインで実行している場合は、XML を
EAP_HOME/domain/configuration/domain.xml
ファイルにコピーします。 - スタンドアロンサーバーとして実行している場合は、XML を
EAP_HOME/standalone/configuration/standalone.xml
ファイルにコピーします。
- 新しい設定ファイルに生成された XML を変更します。以下に、JBoss EAP 5.x に同梱された Seam 2.2 Booking サンプルの
jboss-seam-booking-ds.xml
データソースの例を示します。以下はコンバータースクリプトを実行して生成された設定ファイルになります。生成されたファイルにはCopy to Clipboard Copied! Toggle word wrap Toggle overflow <driver-class>
要素が含まれます。JBoss EAP 6 では、<driver>
要素を使用してドライバークラスを定義する方法が推奨されます。<driver-class>
要素がコメントアウトされ、対応する<driver>
要素が追加された JBoss EAP 6 の設定ファイルにある XML は次のようになります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
注記
4.1.9. IronJacamar 移行ツールを使用したリソースアダプター設定ファイルの変換 リンクのコピーリンクがクリップボードにコピーされました!
手順4.7
- コマンドラインを開き、
IRONJACAMAR_HOME/docs/as/
ディレクトリーへ移動します。 - 以下のコマンドを入力して、コンバータースクリプトを実行します。
- Linux の場合:
./converter.sh -ra
SOURCE_FILE
TARGET_FILE
- Microsoft Windows の場合:
./converter.bat -ra
SOURCE_FILE
TARGET_FILE
SOURCE_FILE
は以前のリリースのリソースアダプター -ds.xml ファイルです。TARGET_FILE
には、新しい設定が含まれます。例えば、カレントディレクトリーにあるmttestadapter-ds.xml
リソースアダプター設定ファイルを変換するには、以下のように入力します。- Linux の場合:
./converter.sh -ra
mttestadapter-ds.xml
new-adapter-config.xml
- Microsoft Windows の場合:
./converter.bat -ra
mttestadapter-ds.xml
new-adapter-config.xml
リソースアダプター変換のパラメーターは-ra
になります。 - ターゲットファイルから
<resource-adapters>
要素全体をコピーし、<subsystem xmlns="urn:jboss:domain:resource-adapters:1.1">
要素下のサーバー設定ファイルに貼り付けます。重要
変更がサーバーの再起動後にも維持されるようにするには、サーバー設定ファイルの編集前にサーバーを停止する必要があります。- 管理対象ドメインで実行している場合は、XML を
EAP_HOME/domain/configuration/domain.xml
ファイルにコピーします。 - スタンドアロンサーバーとして実行している場合は、XML を
EAP_HOME/standalone/configuration/standalone.xml
ファイルにコピーします。
- 新しい設定ファイルに生成された XML を変更します。以下に、JBoss EAP 5.x TestSuite の
mttestadapter-ds.xml
リソースアダプター設定ファイルの例を示します。以下はコンバータースクリプトを実行して生成された設定ファイルになります。生成された XML ファイルのクラス名属性値 「FIXME_MCF_CLASS_NAME」を管理対象接続ファクトリー (この例では、「org.jboss.test.jca.adapter.TestManagedConnectionFactory」) の正しいクラス名に置き換えます。JBoss EAP 6 の設定ファイルにあるCopy to Clipboard Copied! Toggle word wrap Toggle overflow <class-name>
要素値が変更された XML は次のようになります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
注記
4.2. 移行の問題のデバッグ リンクのコピーリンクがクリップボードにコピーされました!
4.2.1. 移行の問題のデバッグと解決 リンクのコピーリンクがクリップボードにコピーされました!
4.2.2. ClassNotFoundExceptions および NoClassDefFoundErrors のデバッグと解決 リンクのコピーリンクがクリップボードにコピーされました!
通常、ClassNotFoundExceptions は未解決の依存関係が原因で発生します。そのため、他のモジュール上で依存関係を明示的に定義するか、外部ソースより JAR をコピーする必要があります。
手順4.8
- 最初に、「JBoss モジュール依存関係の検索」の手順を実行します。
- 見つからないクラスのモジュールがない場合は、「以前のインストールでの JAR の検索」に記載されているように JAR を探します。
4.2.3. JBoss モジュール依存関係の検索 リンクのコピーリンクがクリップボードにコピーされました!
EAP_HOME/modules/system/layers/base/
ディレクトリー内で 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)
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)
手順4.9
- 最初にクラスの明白なモジュールがあるかを判断します。
EAP_HOME/modules/system/layers/base/
ディレクトリーへ移動し、ClassNotFoundException
で指定されたクラスと一致するモジュールパスを探します。モジュールパスorg/apache/commons/logging/
が見つかります。EAP_HOME/modules/system/layers/base/org/apache/commons/logging/main/module.xml
ファイルを開き、モジュール名を探します。この例では "org.apache.commons.logging" になります。MANIFEST.MF
ファイルの Dependencies にモジュール名を追加します。Manifest-Version: 1.0 Dependencies: org.apache.commons.logging
Manifest-Version: 1.0 Dependencies: org.apache.commons.logging
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- クラスの明白なモジュールパスがない場合、依存関係を他の場所で探す必要があることがあります。
- Tattletale レポートで
ClassNotFoundException
によって名前付けされたクラスを探します。 EAP_HOME/modules
ディレクトリーで JAR が含まれているモジュールを探し、前の手順のとおりにモジュール名を探します。
4.2.4. 以前のインストールでの JAR の検索 リンクのコピーリンクがクリップボードにコピーされました!
lib/
ディレクトリーで JAR を探します。
ClassNotFoundException
トレースが記録されているとします。
Caused by: java.lang.NoClassDefFoundError: org/hibernate/validator/ClassValidator at java.lang.Class.getDeclaredMethods0(Native Method)
Caused by: java.lang.NoClassDefFoundError: org/hibernate/validator/ClassValidator at java.lang.Class.getDeclaredMethods0(Native Method)
- ターミナルを開き、
EAP5_HOME/
ディレクトリーに移動します。 - コマンドを実行します。
grep 'org.hibernate.validator.ClassValidator' `find . \-name '*.jar'`
- 複数の結果が表示されることもあります。その場合、必要な JAR は次のとおりです。
Binary file ./jboss-eap-5.1/seam/lib/hibernate-validator.jar matches
Binary file ./jboss-eap-5.1/seam/lib/hibernate-validator.jar matches
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - この JAR をアプリケーションの
lib/
ディレクトリーへコピーします。大量の JAR が必要な場合は、クラスのモジュールを定義した方が簡単な場合があります。詳細については、https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/ にある JBoss EAP 6 向け『開発ガイド』の章『アプリケーションの開発』の『モジュール』を参照してください。 - アプリケーションを再ビルドし、再デプロイします。
4.2.5. ClassCastExceptions のデバッグと解決 リンクのコピーリンクがクリップボードにコピーされました!
手順4.10
ClassCastException
によって名前付けされたクラスが含まれる JAR をすべて見つけるため、アプリケーションを検索します。クラスに対して定義されたモジュールがある場合、アプリケーションの WAR や EAR より重複する JAR を探し、削除します。- クラスが含まれる JBoss モジュールを探し、
MANIFEST.MF
ファイルまたはjboss-deployment-structure.xml
ファイルに依存関係を明示的に定義します。詳細については、https://access.redhat.com/site/documentation/JBoss_Enterprise_Application_Platform/ にある JBoss EAP 6 向け『開発ガイド『』』の章「クラスローディングとモジュール『』」の「クラスローディングとサブデプロイメント『』」を参照してください。 - 上記の手順に従っても解決されない場合、クラスローダーの情報をログに出力すると問題の原因を判断できることがあります。例えば、次の
ClassCastException
がログに記録されているとします。java.lang.ClassCastException: com.example1.CustomClass1 cannot be cast to com.example2.CustomClass2
java.lang.ClassCastException: com.example1.CustomClass1 cannot be cast to com.example2.CustomClass2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - コードで
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());
logger.info("Class loader for CustomClass1: " + com.example1.CustomClass1.getClass().getClassLoader().toString()); logger.info("Class loader for CustomClass2: " + com.example2.CustomClass2.getClass().getClassLoader().toString());
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ログの情報にはどのモジュールがクラスをロードするかが記載されています。アプリケーションに基づき、競合する JAR を削除または移動する必要があります。
4.2.6. DuplicateServiceExceptions のデバッグと解決 リンクのコピーリンクがクリップボードにコピーされました!
- 生成される Web コンテキストと WAR コンテキストが一意になるよう、JAR ファイルの名前を WAR とは異なる名前に変更します。
<context-root>
要素をjboss-web.xml
ファイルに提供します。<context-root>
要素をjboss-webservices.xml
ファイルに提供します。- WAR の
<context-root>
要素をapplication.xml
ファイルでカスタマイズします。
4.2.7. JBoss Seam のデバッグページエラーのデバッグと解決 リンクのコピーリンクがクリップボードにコピーされました!
図4.1 JBoss Seam デバッグページ
手順4.11
- このページの
Component
セクションを展開し、org.jboss.seam.caughtException
コンポーネントを探します。 - 原因とスタックトレースが欠落している依存関係を示しているはずです。
図4.2 コンポーネント
org.jboss.seam.caughtException
の情報 - 「ClassNotFoundExceptions および NoClassDefFoundErrors のデバッグと解決」で説明されている手法を使用してモジュール依存関係を解決します。上記の例では、
org.slf4j
をMANIFEST.MF
に追加するのが最も簡単な解決方法になります。Manifest-Version: 1.0 Dependencies: org.slf4j
Manifest-Version: 1.0 Dependencies: org.slf4j
Copy to Clipboard Copied! Toggle word wrap Toggle overflow モジュールの依存関係をjboss-deployment-structure.xml
ファイルに追加して解決する方法もあります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.3. アプリケーション例の移行の確認 リンクのコピーリンクがクリップボードにコピーされました!
4.3.1. サンプルアプリケーションの移行の確認 リンクのコピーリンクがクリップボードにコピーされました!
以下は、JBoss EAP 6 へ移行された JBoss EAP 5.x サンプルアプリケーションの一覧になります。リンクをクリックすると、特定アプリケーションの変更内容の詳細を確認できます。
4.3.2. Seam 2.2 JPA サンプルの JBoss EAP 6 への移行 リンクのコピーリンクがクリップボードにコピーされました!
下記のタスクリストには、Seam 2.2 JPA のサンプルアプリケーションを JBoss EAP 6 へ正常に移行するために必要な変更の概要が記載されています。このサンプルアプリケーションは、JBoss EAP 5.1 ディストリビューションの EAP5.1_HOME/jboss-eap-5.1/seam/examples/jpa/
下にあります。
重要
手順4.12 Seam 2.2 JPA サンプルを移行する
jboss-web.xml ファイルを削除する
jboss-seam-jpa.war/WEB-INF/
ディレクトリーよりjboss-web.xml
ファイルを削除します。jboss-web.xml
に定義されるクラスローディングがデフォルトの挙動になります。以下のように
jboss-seam-jpa.jar/META-INF/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"/> -->
<!-- <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/> -->
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - プロバイダーモジュールプロパティーを
jboss-seam-booking.jar/META-INF/persistence.xml
ファイルに追加します。<property name="jboss.as.jpa.providerModule" value="hibernate3-bundled" />
<property name="jboss.as.jpa.providerModule" value="hibernate3-bundled" />
Copy to Clipboard Copied! Toggle word wrap Toggle overflow jta-data-source
プロパティーを変更し、デフォルトの JDBC データソース JNDI 名を使用するようにします。<jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
<jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Seam 2.2 依存関係を追加する
下記の JAR を Seam 2.2 ディストリビューションのライブラリーであるSEAM_HOME/lib/
からjboss-seam-jpa.war/WEB-INF/lib/
ディレクトリーへコピーします。- antlr.jar
- slf4j-api.jar
- slf4j-log4j12.jar
- hibernate-entitymanager.jar
- hibernate-core.jar
- hibernate-annotations.jar
- hibernate-commons-annotations.jar
- hibernate-validator.jar
残りの依存関係を追加するため jboss-deployment-structure ファイルを作成する
以下のデータを含むjboss-deployment-structure.xml
ファイルをjboss-seam-jpa.war/WEB-INF/
フォルダーで作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Seam 2.2 JAP のサンプルアプリケーションが JBoss EAP 6 上にデプロイされ、正常に実行されます。
4.3.3. Seam 2.2 Booking サンプルの JBoss EAP 6 への移行 リンクのコピーリンクがクリップボードにコピーされました!
Seam 2.2 Booking EAR の移行は Seam 2.2 JPA WAR サンプルの移行よりも複雑です。Seam 2.2 JPA WAR サンプルの移行に関するドキュメントについては、「Seam 2.2 JPA サンプルの JBoss EAP 6 への移行」を参照してください。アプリケーションを移行するには、以下を実行する必要があります。
- デフォルトの JSF 2 の代わりに JSF 1.2 を初期化します。
- JBoss EAP 6 に同梱された Hibernate JAR を使用せずに、古いバージョンの Hibernate JAR をバンドルします。
- 新しい Java EE 6 JNDI の移植可能な構文を使用するよう JNDI バインディングを変更します。
重要
手順4.13 Seam 2.2 Booking サンプルの移行
jboss-deployment-structure.xml
ファイルを作成するjboss-deployment-structure.xml
という名前の新しいファイルをjboss-seam-booking.ear/META-INF/
で作成し、以下の内容を追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のように
jboss-seam-booking.jar/META-INF/persistence.xml
ファイルを変更する- キャッシュプロバイダークラスの hibernate プロパティーを削除またはコメントアウトします。
<!-- <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/> -->
<!-- <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/> -->
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - プロバイダーモジュールプロパティーを
jboss-seam-booking.jar/META-INF/persistence.xml
ファイルに追加します。<property name="jboss.as.jpa.providerModule" value="hibernate3-bundled" />
<property name="jboss.as.jpa.providerModule" value="hibernate3-bundled" />
Copy to Clipboard Copied! Toggle word wrap Toggle overflow jta-data-source
プロパティーを変更し、デフォルトの JDBC データソース JNDI 名を使用するようにします。<jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
<jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Seam 2.2 ディストリビューションより JAR をコピーする
以下の JAR を Seam 2.2 ディストリビューションのEAP5.x_HOME/jboss-eap5.x/seam/lib/
からjboss-seam-booking.ear/lib
ディレクトリーにコピーします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow JNDI ルックアップ名を変更する
jboss-seam-booking.war/WEB-INF/components.xml
ファイルの JNDI ルックアップ文字列を変更します。新しい移植可能な JNDI のルールが導入されたため、JBoss EAP 6 は 移植可能な JNDI の構文ルールを使用して EJB をバインドします。JBoss EAP 5 で使用された単一の jndiPattern を使用することはできません。JBoss EAP 6 では、アプリケーションの EJB JNDI ルックアップ文字列を次のように変更する必要があります。Seam 2.2 フレームワーク EJB に対する JNDI ルックアップ文字列は、以下のように変更する必要があります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下のどちらかの方法を使用できます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow コンポーネント要素を追加する
各 EJB に対するjndi-name
をWEB-INF/components.xml
に追加できます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - JNDI パスを指定する
@JNDIName(value="")
アノテーションを追加してコードを変更することができます。変更されたステートレスセッション Bean のコード例は次のとおりです。この処理の詳細については、Seam 2.2 のリファレンスドキュメントを参照してください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
Seam 2.2 JAP の Booking アプリケーションが JBoss EAP 6 上にデプロイされ、正常に実行されます。
4.3.4. Seam 2.2 Booking アーカイブの JBoss EAP 6 への移行: 手順説明 リンクのコピーリンクがクリップボードにコピーされました!
EAP6_HOME/standalone/deployments
ディレクトリーにデプロイされ、変更はアーカイブの変更のみとなります。これにより、問題の発生や解決時にアーカイブ内にある XML ファイルの変更が容易になります。
重要
手順4.14 アプリケーションの移行
4.3.5. JBoss EAP 5.1 バージョンの Seam 2.2 Booking アプリケーションのビルドおよびデプロイ リンクのコピーリンクがクリップボードにコピーされました!
手順4.15 EAR のビルドとデプロイ
- EAR をビルドします。
cd /EAP5_HOME/jboss-eap5.1/seam/examples/booking ANT_HOME/ant explode
$ cd /EAP5_HOME/jboss-eap5.1/seam/examples/booking $ ANT_HOME/ant explode
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - EAR を EAP6_HOME デプロイメントディレクトリーへコピーします。
cp -r EAP5_HOME/seam/examples/booking/exploded-archives/jboss-seam-booking.ear EAP6_HOME/standalone/deployments/ cp -r EAP5_HOME/seam/examples/booking/exploded-archives/jboss-seam-booking.war EAP6_HOME/standalone/deployments/jboss-seam.ear cp -r EAP5_HOME/seam/examples/booking/exploded-archives/jboss-seam-booking.jar EAP6_HOME/standalone/deployments/jboss-seam.ear
$ cp -r EAP5_HOME/seam/examples/booking/exploded-archives/jboss-seam-booking.ear EAP6_HOME/standalone/deployments/ $ cp -r EAP5_HOME/seam/examples/booking/exploded-archives/jboss-seam-booking.war EAP6_HOME/standalone/deployments/jboss-seam.ear $ cp -r EAP5_HOME/seam/examples/booking/exploded-archives/jboss-seam-booking.jar EAP6_HOME/standalone/deployments/jboss-seam.ear
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - JBoss EAP 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
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
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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"
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"
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この時点で最初のデプロイメントエラーが発生します。次の手順で各問題を確認し、デバッグおよび解決方法について説明します。デプロイメントの問題のデバッグおよび解決方法については、「Seam 2.2 Booking アーカイブのデプロイメントエラーや例外のデバッグおよび解決」をクリックしてください。以前のトピックに戻るには、「Seam 2.2 Booking アーカイブの JBoss EAP 6 への移行: 手順説明」をクリックしてください。
4.3.6. Seam 2.2 Booking アーカイブのデプロイメントエラーや例外のデバッグおよび解決 リンクのコピーリンクがクリップボードにコピーされました!
重要
手順4.16 デプロイメントエラーや例外のデバッグおよび解決
- 問題 - java.lang.ClassNotFoundException: javax.faces.FacesExceptionアプリケーションをデプロイする場合に、ログに以下のエラーが含まれます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ログの解説ClassNotFoundException は見つからない依存関係があることを示しています。この例では、クラス
javax.faces.FacesException
が見つからないため、依存関係を明示的に追加する必要があります。解決方法見つからないクラスと一致するパスを探し、
EAP6_HOME/modules/system/layers/base/
ディレクトリー内でそのクラスのモジュール名を見つけます。この例では、以下の 2 つのモジュールが見つかります。両モジュールのモジュール名は同じjavax/faces/api/main javax/faces/api/1.2
javax/faces/api/main javax/faces/api/1.2
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
ファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow deployment
セクションで、JSF 1.2 モジュール用javax.faces.api
に対する依存関係を追加します。また、WAR のサブデプロイメントセクションで JSF 1.2 モジュール用依存関係を追加し、JSF 2.0 用モジュールを除外します。EAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed
ファイルを削除して同じディレクトリーに空のjboss-seam-booking.ear.dodeploy
ファイルを作成し、アプリケーションを再デプロイします。 - 問題 - java.lang.ClassNotFoundException: org.apache.commons.logging.Logアプリケーションをデプロイする場合に、ログに以下のエラーが含まれます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ログの解説ClassNotFoundException
は見つからない依存関係があることを示しています。この例では、クラスorg.apache.commons.logging.Log
が見つからないため、依存関係を明示的に追加する必要があります。解決方法見つからないクラスと一致するパスを探し、
EAP6_HOME/modules/system/layers/base/
ディレクトリー内でそのクラスのモジュール名を見つけます。この例では、パスorg/apache/commons/logging/
と一致するモジュールが 1 つあります。モジュール名は "org.apache.commons.logging"です。モジュール依存関係をファイルのデプロイメントセクションに追加するようjboss-deployment-structure.xml
ファイルを変更します。<module name="org.apache.commons.logging" export="true"/>
<module name="org.apache.commons.logging" export="true"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow jboss-deployment-structure.xml
の内容は以下のようになります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow EAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed
ファイルを削除して同じディレクトリーに空のjboss-seam-booking.ear.dodeploy
ファイルを作成し、アプリケーションを再デプロイします。 - 問題 - java.lang.ClassNotFoundException: org.dom4j.DocumentExceptionアプリケーションをデプロイする場合に、ログに以下のエラーが含まれます。
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/seam-booking]] (MSC service thread 1-3) Exception sending context initialized event to listener instance of class org.jboss.seam.servlet.SeamListener: java.lang.NoClassDefFoundError: org/dom4j/DocumentException (... additional logs removed ...) Caused by: java.lang.ClassNotFoundException: org.dom4j.DocumentException from [Module "deployment.jboss-seam-booking.ear.jboss-seam.jar:main" from Service Module Loader]
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]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ログの解説ClassNotFoundException
は見つからない依存関係があることを示しています。この例では、クラスorg.dom4j.DocumentException
が見つかりません。解決方法org/dom4j/DocumentException
を探して、EAP6_HOME/modules/system/layers/base/
ディレクトリーを見つけます。モジュール名は、“org.dom4j” です。モジュール依存関係をファイルのデプロイメントセクションに追加するようjboss-deployment-structure.xml
ファイルを変更します。<module name="org.dom4j" export="true"/>
<module name="org.dom4j" export="true"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow jboss-deployment-structure.xml
ファイルの内容は以下のようになります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow EAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed
ファイルを削除して同じディレクトリーに空のjboss-seam-booking.ear.dodeploy
ファイルを作成し、アプリケーションを再デプロイします。 - 問題 - java.lang.ClassNotFoundException: org.hibernate.validator.InvalidValueアプリケーションをデプロイする場合に、ログに以下のエラーが含まれます。
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/seam-booking]] (MSC service thread 1-6) Exception sending context initialized event to listener instance of class org.jboss.seam.servlet.SeamListener: java.lang.RuntimeException: Could not create Component: org.jboss.seam.international.statusMessages (... additional logs removed ...) Caused by: java.lang.ClassNotFoundException: org.hibernate.validator.InvalidValue from [Module "deployment.jboss-seam-booking.ear.jboss-seam.jar:main" from Service Module Loader]
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]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ログの解説ClassNotFoundException
は見つからない依存関係があることを示しています。この例では、クラスorg.hibernate.validator.InvalidValue
が見つかりません。解決方法モジュール「org.hibernate.validator」は存在しますが JAR に
org.hibernate.validator.InvalidValue
クラスが含まれていないため、モジュールの依存関係を追加してもこの問題は解決しません。この例では、クラスが含まれる JAR は JBoss EAP 5.1 デプロイメントの一部になります。EAP5_HOME/seam/lib/
ディレクトリーに不明なクラスが含まれている JAR を探します。これを実行するには、コンソールを開いて以下の内容を入力します。結果は以下のようになります。cd EAP5_HOME/seam/lib grep 'org.hibernate.validator.InvalidValue' `find . -name '*.jar'`
$ cd EAP5_HOME/seam/lib $ grep 'org.hibernate.validator.InvalidValue' `find . -name '*.jar'`
Copy to Clipboard Copied! Toggle word wrap Toggle overflow この場合は、Binary file ./hibernate-validator.jar matches Binary file ./test/hibernate-all.jar matches
$ Binary file ./hibernate-validator.jar matches $ Binary file ./test/hibernate-all.jar matches
Copy to Clipboard Copied! Toggle word wrap Toggle overflow hibernate-validator.jar
をjboss-seam-booking.ear/lib/
ディレクトリーにコピーします。cp EAP5_HOME/seam/lib/hibernate-validator.jar jboss-seam-booking.ear/lib
$ cp EAP5_HOME/seam/lib/hibernate-validator.jar jboss-seam-booking.ear/lib
Copy to Clipboard Copied! Toggle word wrap Toggle overflow EAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed
ファイルを削除して同じディレクトリーに空のjboss-seam-booking.ear.dodeploy
ファイルを作成し、アプリケーションを再デプロイします。 - 問題 - java.lang.InstantiationException: org.jboss.seam.jsf.SeamApplicationFactoryアプリケーションをデプロイする場合に、ログに以下のエラーが含まれます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ログの解説com.sun.faces.config.ConfigurationException
とjava.lang.InstantiationException
は依存関係の問題があることを示しています。この例では、原因は明らかではありません。解決方法com.sun.faces
クラスが含まれるモジュールを探す必要があります。com.sun.faces
モジュールは存在しませんが、com.sun.jsf-impl
モジュールが 2 つあります。1.2 ディレクトリーのjsf-impl-1.2_13.jar
を確認すると、com.sun.faces
クラスが含まれていることがすぐに分かります。javax.faces.FacesException
ClassNotFoundException
の場合と同様、メインディレクトリーの JSF 2.0 バージョンではなく JFS 1.2 バージョンを使用したいため、使用したい方を指定し、使用したくない方を除外します。ファイルのデプロイメントセクションにモジュールの依存関係を追加するようjboss-deployment-structure.xml
を変更する必要があります。また、WAR のサブデプロイメントに追加し、JSF 2.0 モジュールを除外する必要もあります。ファイルの内容は次のようになるはずです。Copy to Clipboard Copied! Toggle word wrap Toggle overflow EAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed
ファイルを削除して同じディレクトリーに空のjboss-seam-booking.ear.dodeploy
ファイルを作成し、アプリケーションを再デプロイします。 - 問題 - java.lang.ClassNotFoundException: org.apache.commons.collections.ArrayStackアプリケーションをデプロイする場合に、ログに以下のエラーが含まれます。
ERROR [org.apache.catalina.core.ContainerBase.[jboss.web].[default-host].[/seam-booking]] (MSC service thread 1-1) Exception sending context initialized event to listener instance of class com.sun.faces.config.ConfigureListener: java.lang.RuntimeException: com.sun.faces.config.ConfigurationException: CONFIGURATION FAILED! org.apache.commons.collections.ArrayStack from [Module "deployment.jboss-seam-booking.ear:main" from Service Module Loader] (... additional logs removed ...) Caused by: java.lang.ClassNotFoundException: org.apache.commons.collections.ArrayStack from [Module "deployment.jboss-seam-booking.ear:main" from Service Module Loader]
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]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ログの解説ClassNotFoundException
は見つからない依存関係があることを示しています。この例では、クラスorg.apache.commons.collections.ArrayStack
が見つかりません。解決方法org/apache/commons/collections
パスを探して、EAP6_HOME/modules/system/layers/base/
ディレクトリーを見つけます。モジュール名は、"org.apache.commons.collections" です。モジュール依存関係をファイルのデプロイメントセクションに追加するようjboss-deployment-structure.xml
を変更します。<module name="org.apache.commons.collections" export="true"/>
<module name="org.apache.commons.collections" export="true"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow jboss-deployment-structure.xml
ファイルの内容は以下のようになります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow EAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed
ファイルを削除して同じディレクトリーに空のjboss-seam-booking.ear.dodeploy
ファイルを作成し、アプリケーションを再デプロイします。 - 問題 - Services with missing/unavailable dependenciesアプリケーションをデプロイする場合に、ログに以下のエラーが含まれます。
ERROR [org.jboss.as.deployment] (DeploymentScanner-threads - 2) {"Composite operation failed and was rolled back. Steps that failed:" => {"Operation step-2" => {"Services with missing/unavailable dependencies" => ["jboss.deployment.subunit.\"jboss-seam-booking.ear\".\"jboss-seam-booking.jar\".component.AuthenticatorAction.START missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seam-booking.jar\".AuthenticatorAction.\"env/org.jboss.seam.example.booking.AuthenticatorAction/em\" ]","jboss.deployment.subunit.\"jboss-seam-booking.ear\".\"jboss-seam-booking.jar\".component.HotelSearchingAction.START missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seam-booking.jar\".HotelSearchingAction.\"env/org.jboss.seam.example.booking.HotelSearchingAction/em\" ]"," (... additional logs removed ...) "jboss.deployment.subunit.\"jboss-seam-booking.ear\".\"jboss-seam-booking.jar\".component.BookingListAction.START missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seam-booking.jar\".BookingListAction.\"env/org.jboss.seam.example.booking.BookingListAction/em\" ]","jboss.persistenceunit.\"jboss-seam-booking.ear/jboss-seam-booking.jar#bookingDatabase\" missing [ jboss.naming.context.java.bookingDatasource ]"]}}}
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 ]"]}}}
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ログの解説「Services with missing/unavailable dependencies」(見つからない/使用できない依存関係を持つサービス) のエラーが発生したら、「missing」の後の括弧内にある文字を確認してください。この場合は、次のようになります。
「/em」は、Entity Manager とデータソースの問題を示します。missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seam-booking.jar\".AuthenticatorAction.\"env/org.jboss.seam.example.booking.AuthenticatorAction/em\" ]
missing [ jboss.naming.context.java.comp.jboss-seam-booking.\"jboss-seam-booking.jar\".AuthenticatorAction.\"env/org.jboss.seam.example.booking.AuthenticatorAction/em\" ]
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 解決方法JBoss EAP 6 ではデータソースの設定が変更になったため、
EAP6_HOME/standalone/configuration/standalone.xml
ファイルに定義する必要があります。JBoss EAP 6 には、すでにstandalone.xml
ファイルに定義されているデータベースの例が含まれているため、 このアプリケーションでサンプルデータベースを使用するようpersistence.xml
ファイルを変更します。standalone.xml
ファイルを見るとサンプルデータベースのjndi-name
はjava:jboss/datasources/ExampleDS
であることが分かります。jboss-seam-booking.jar/META-INF/persistence.xml
ファイルを変更して既存のjta-data-source
要素をコメントアウトし、以下のように置き換えます。<!-- <jta-data-source>java:/bookingDatasource</jta-data-source> --> <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
<!-- <jta-data-source>java:/bookingDatasource</jta-data-source> --> <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow EAP6_HOME/standalone/deployments/jboss-seam-booking.ear.failed
ファイルを削除して同じディレクトリーに空のjboss-seam-booking.ear.dodeploy
ファイルを作成し、アプリケーションを再デプロイします。 - この時点で、アプリケーションはエラーを引き起こさずにデプロイされますが、ブラウザーで URL http://localhost:8080/seam-booking/ へアクセスし、アカウントへログインしようとするとランタイムエラー 「The page isn't redirecting properly」(ページが正しくリダイレクトしません) が発生します。次の手順でランタイムエラーのデバッグおよび解決方法について学びましょう。ランタイム問題のデバッグおよび解決方法については、「Seam 2.2 Booking アーカイブのランタイムエラーや例外のデバッグおよび解決」を参照してください。以前のトピックに戻るには、「Seam 2.2 Booking アーカイブの JBoss EAP 6 への移行: 手順説明」をクリックしてください。
4.3.7. Seam 2.2 Booking アーカイブのランタイムエラーや例外のデバッグおよび解決 リンクのコピーリンクがクリップボードにコピーされました!
重要
手順4.17 ランタイムエラーや例外のデバッグおよび解決
- 問題 - javax.naming.NameNotFoundException: Name 'jboss-seam-booking' not found in context ''ブラウザーで URL http://localhost:8080/seam-booking/ にアクセスすると、"The page isn't redirecting properly (ページが正常にリダイレクトされていません)" というメッセージが示され、ログに以下のエラーが含まれます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ログの解説NameNotFoundException
は JNDI の命名の問題であることを示しています。JBoss EAP 6 では JNDI の命名ルールが変更になったため、新しいルールに従ってルックアップ名を変更する必要があります。解決方法これをデバッグするには、使用された JNDI バインディングに対するサーバーログトレースを確認します。サーバーログを確認すると、内容は以下のようになります。
ログには、各セッション Bean に対して 1 つずつ合計で 8 つの INFO JNDI バインディング (RegisterAction、BookingListAction、HotelBookingAction、AuthenticatorAction、ChangePasswordAction、HotelSearchingAction、EjbSynchronizations、および TimerServiceDispatcher) がリストされます。新しい JNDI バインディングを使用するよう WAR のCopy to Clipboard Copied! Toggle word wrap Toggle overflow lib/components.xml
ファイルを変更します。ログで、EJB JNDI バインディングがすべて "java:app/jboss-seam-booking.jar" で始まっていることに注意してください。以下のようにcore:init
要素を置き換えます。次に、EjbSynchronizations バインディングと TimerServiceDispatcher JNDI バインディングを追加する必要があります。ファイルに以下のコンポーネント要素を追加します。<!-- <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: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"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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.transaction.EjbSynchronizations" jndi-name="java:app/jboss-seam/EjbSynchronizations"/> <component class="org.jboss.seam.async.TimerServiceDispatcher" jndi-name="java:app/jboss-seam/TimerServiceDispatcher"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow Copy to Clipboard Copied! Toggle word wrap Toggle overflow standalone/deployments/jboss-seam-booking.ear.failed
ファイルを削除して同じディレクトリーに空のjboss-seam-booking.ear.dodeploy
ファイルを作成し、アプリケーションを再デプロイします。 - 問題 - エラーが発生せずにアプリケーションがデプロイされ、実行されます。ブラウザーで URL http://localhost:8080/seam-booking/ にアクセスし、ログインしようとすると「Login failed. Transaction failed.」 というメッセージが表示され、ログインに失敗します。サーバーログに次のような例外トレースが記録されるはずです。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ログの解説ClassNotFoundException は Hibernate ライブラリーがないことを示しています。この場合、
hibernate-core.jar
が存在しません。解決方法hibernate-core.jar
JAR をEAP5_HOME/seam/lib/
ディレクトリーからjboss-seam-booking.ear/lib
ディレクトリーへコピーします。standalone/deployments/jboss-seam-booking.ear.failed
ファイルを削除して同じディレクトリーに空のjboss-seam-booking.ear.dodeploy
ファイルを作成し、アプリケーションを再デプロイします。 - 問題 - エラーが発生せずにアプリケーションがデプロイされ、実行されます。ブラウザーで URL http://localhost:8080/seam-booking/ にアクセスすると正常にログインできますが、ホテルを予約しようとすると、例外トレースが記録されます。これをデバッグするには、真のエラーを隠している
jboss-seam-booking.ear/jboss-seam-booking.war/WEB-INF/lib/jboss-seam-debug.jar
を最初に削除します。この時点で、次のエラーが表示されるはずです。java.lang.NoClassDefFoundError: org/hibernate/annotations/common/reflection/ReflectionManager
java.lang.NoClassDefFoundError: org/hibernate/annotations/common/reflection/ReflectionManager
Copy to Clipboard Copied! Toggle word wrap Toggle overflow ログの解説NoClassDefFoundError は Hibernate ライブラリーがないことを示しています。
解決方法hibernate-annotations.jar
およびhibernate-commons-annotations.jar
JAR をEAP5_HOME/seam/lib/
ディレクトリーからjboss-seam-booking.ear/lib
ディレクトリーへコピーします。standalone/deployments/jboss-seam-booking.ear.failed
ファイルを削除して同じディレクトリーに空のjboss-seam-booking.ear.dodeploy
ファイルを作成し、アプリケーションを再デプロイします。 - ランタイムおよびアプリケーションエラーが解決されるはずです。この時点で、エラーが発生せずにアプリケーションがデプロイおよび実行されます。以前のトピックに戻るには、「Seam 2.2 Booking アーカイブの JBoss EAP 6 への移行: 手順説明」をクリックしてください。
4.3.8. Seam 2.2 Booking アプリケーションの移行時に加えられる変更概要の確認 リンクのコピーリンクがクリップボードにコピーされました!
重要
jboss-deployment-structure.xml
ファイルを、EAR のMETA-INF/
ディレクトリーに作成しました。ClassNotFoundExceptions
を解決するために、<dependencies>
と<exclusions>
を追加しました。このファイルには、以下のデータが含まれます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow ClassNotFoundExceptions
を解決するため、次の JAR をEAP5_HOME/jboss-eap-5.1/seam/lib/
ディレクトリーからjboss-seam-booking.ear/lib/
ディレクトリーへコピーしました。- hibernate-core.jar
- hibernate-validator.jar
- 次のように
jboss-seam-booking.jar/META-INF/persistence.xml
ファイルを変更しました。- JBoss EAP 6 に同梱されるサンプルデータベースを使用するよう
jta-data-source
要素を変更しました。<!-- <jta-data-source>java:/bookingDatasource</jta-data-source> --> <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
<!-- <jta-data-source>java:/bookingDatasource</jta-data-source> --> <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - hibernate.cache.provider_class プロパティーをコメントアウトしました。
<!-- <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/> -->
<!-- <property name="hibernate.cache.provider_class" value="org.hibernate.cache.HashtableCacheProvider"/> -->
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 新しい JNDI バインディングを使用するよう、WAR の
lib/components.xml
ファイルを変更しました。- 以下のように既存の
core:init
要素を置き換えました。<!-- <core:init jndi-pattern="jboss-seam-booking/#{ejbName}/local" debug="true" distributable="false"/> --> <core:init jndi-pattern="java:app/jboss-seam-booking.jar/#{ejbName}" debug="true" distributable="false"/>
<!-- <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"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - "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"/>
<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"/>
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
付録A Revision History リンクのコピーリンクがクリップボードにコピーされました!
改訂履歴 | |||
---|---|---|---|
改訂 2.0-20 | Wed Dec 4 2013 | ||
|