移行ガイド
Red Hat JBoss Enterprise Application Platform 6 向け
概要
第1章 はじめに リンクのコピーリンクがクリップボードにコピーされました!
1.1. Red Hat JBoss Enterprise Application Platform 6 リンクのコピーリンクがクリップボードにコピーされました!
1.2. 移行ガイド リンクのコピーリンクがクリップボードにコピーされました!
第2章 移行の準備 リンクのコピーリンクがクリップボードにコピーされました!
2.1. 移行の準備 リンクのコピーリンクがクリップボードにコピーされました!
JBoss EAP 6 の新機能と変更内容
本リリースには JBoss EAP 5 アプリケーションのデプロイメントに影響する可能性がある複数の変更が含まれています。これには、ファイルディレクトリー構造、スクリプト、デプロイメント設定、クラスローディング、および JNDI ルックアップの変更が含まれます。詳細は、 「JBoss EAP 6 の新機能と変更内容」 を参照してください。スタートガイドのドキュメント
必ずJBoss EAP 6 の『Development Guide』 の『Get Started Developing Applications』の章を確認してください (https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/?version=6.4)。これには、以下に関する重要な情報が含まれています。- Java EE 6
- 新しいモジュラークラスローディングシステム
- ファイル構造の変更
- JBoss EAP 6 のダウンロードおよびインストール方法
- JBoss Developer Studio のダウンロードおよびインストール方法
- 開発環境用に Maven を設定する方法
- 製品に同梱されたクイックスタートサンプルアプリケーションのダウンロードおよび実行方法
Maven プロジェクトで JBoss EAP 6 の依存関係を使用する方法
必ずJBoss EAP 6 の『Development Guide』 の『Maven Guide』の章を確認してください (https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/?version=6.4)。プロジェクト 『Manage Project Dependencies』 セクションには、JBoss EAP の BOM (Bill of Material)アーティファクトを使用するようにプロジェクトを設定する方法に関する重要な情報が記載されています。アプリケーションの分析と理解
アプリケーションはそれぞれ異なるため、移行を始める前に既存のアプリケーションのコンポーネントおよびアーキテクチャーを十分に理解する必要があります。
2.2. JBoss EAP 6 の新機能と変更内容 リンクのコピーリンクがクリップボードにコピーされました!
はじめに
以下は、以前のリリースから JBoss EAP 6 への主な変更点です。
- モジュールベースのクラスローディング
- JBoss EAP 5 では、クラスローディングアーキテクチャーは階層的でした。JBoss EAP 6 では、クラスローディングは JBoss Modules をベースにしています。これにより、完全にアプリケーションが分離され、サーバー実装クラスが隠され、アプリケーションが必要とするクラスのみが読み込まれます。クラスローディングにより、同時にパフォーマンスが向上します。JBoss EAP 5 用に作成されたアプリケーションでは、モジュールの依存関係を指定し、場合によってはアーカイブを再パッケージ化するように変更する必要があります。詳細については、JBoss EAP 6 『Development Guide』の 『Class Loading and Modules』を参照してください(https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/?version=6.4)。
- ドメイン管理
- JBoss EAP 6 では、サーバーをスタンドアロンサーバーまたは管理対象ドメインで実行できます。管理対象ドメインでは、サーバーのグループ全体を一度に設定し、サーバーのネットワーク全体で設定を同期できます。これは以前のリリース用にビルドされたアプリケーションに影響を与えることはありませんが、これにより複数のサーバーへのデプロイメントの管理が簡素化されます。詳細については、JBoss EAP 6 の 『Administration and Configuration Guide』の『About Managed Domains』を参照してください(https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/?version=6.4)。
- デプロイメント設定
- スタンドアロンサーバーおよび管理対象ドメイン
- 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 としてデプロイされた複数のモジュールで構成される JBoss EAP 5 アプリケーション、または CDI インジェクションやリソース参照エントリーの代わりにレガシー JNDI ルックアップを使用する JBoss EAP 5 アプリケーションには、設定の変更が必要になる場合があります。
- ディレクトリー構造およびスクリプト
- 前述のように、JBoss EAP 6 はプロファイルベースのデプロイメント設定を使用しないため、
EAP_HOME/server/ディレクトリーはありません。スタンドアロンサーバーの設定ファイルはEAP_HOME/standalone/configuration/ディレクトリーに配置され、デプロイメントはEAP_HOME/standalone/deployments/ディレクトリーにあります。管理対象ドメインで稼働しているサーバーの場合は、設定ファイルはEAP_HOME/domain/configuration/ディレクトリーにあります。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 名前空間を使用するようになりました。JNDI ルックアップを使用する JBoss EAP 5 用に書かれたアプリケーションは、新しい標準化された JNDI 名前空間規則に従うように変更する必要があります。JNDI 命名構文の詳細は、「移植可能な EJB JNDI 名」 を参照してください。
- 仮想ファイルシステム
- JBoss EAP 6 では、VFS2 が VFS3 に置き換えられました。VFS2 を使用した JBoss EAP 5 で利用できた設定オプションの一部が JBoss EAP 6 では必要なくなりました。VFS2 で利用できたSystemプロパティー設定は、VFS3 では使用されず、利用できなくなりました。キャッシュシステムが VFS3 で置き換えられ、VFS2 に存在したキャッシュ問題を解決しました。VFS は JBoss EAP によって内部的に使用され、アプリケーションコード内で直接アクセスする必要はありません。
2.3. 非推奨および未サポート機能リストの確認 リンクのコピーリンクがクリップボードにコピーされました!
- サーバー起動の -b コマンドライン引数
- 以前のバージョンでは、JBoss EAP は IP アドレスに関係なく、
-b起動パラメーターで指定されたアドレスを自動的に使用していました。JBoss EAP 6 では、サーバー<inet-address>設定は、一致する IP アドレスで設定されたネットワークインターフェースを検索します。IPアドレス127.0.0.1は機能しますが、127.*.*.*は機能しなくなりました。127.*.*.*IP アドレスにバインドする-bコマンドライン引数を使用して JBoss EAP 6 サーバーを起動した場合は、まずサーバー設定ファイルでインターフェースを<inet-address>から<loopback-address>に変更する必要があります。管理 CLI を使用してサーバーを設定する方法は、カスタマーポータルの JBoss Enterprise Application Platform の 『Administration and Configuration Guide』 の 『Management CLI Operations』 を参照してください (https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/?version=6.4)。 - EJB 依存関係
- これまでのバージョンの JBoss EAP では、他の EJB を含むサービスの EJB 依存関係は、
jboss.xmlデプロイメント記述子の<depends>タグを使用して指定できました。以下に例を示します。JBoss EAP 6 では、<depends>jboss.j2ee:jndiName=com/myorg/app/Foo,service=EJB</depends> <depends>jboss.mq.destination:service=Queue,name=queue/HelloworldQueue</depends>
<depends>jboss.j2ee:jndiName=com/myorg/app/Foo,service=EJB</depends> <depends>jboss.mq.destination:service=Queue,name=queue/HelloworldQueue</depends>Copy to Clipboard Copied! Toggle word wrap Toggle overflow @EJBアノテーションを使用して EJB 参照を注入し、@Resourceアノテーションを使用してデータソースやその他のリソースにアクセスする必要があります。以下に例を示します。@EJB(lookup="java:global/MyApp/FooImpl!com.myorg.app.Foo") @Resource(mappedName = "java:/queue/HelloworldQueue")
@EJB(lookup="java:global/MyApp/FooImpl!com.myorg.app.Foo") @Resource(mappedName = "java:/queue/HelloworldQueue")Copy to Clipboard Copied! Toggle word wrap Toggle overflow JNDI ルックアップも変更になりました。詳細は、本ガイドの 『JNDI の変更』 セクションを参照してください。EJB 参照の詳細は、カスタマーポータルの JBoss Enterprise Application Platform の 『Development Guide』 の 『EJB Reference Resolution』 セクションを参照してください (https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/?version=6.4)。 - HTTPInvoker
- これまでのバージョンの JBoss EAP では、HTTPInvoker を使用して EJB、JNDI、または JMS を設定して HTTP プロトコルを使用することができました。これは JBoss EAP 6 では不可能になりました。
- HA Singleton デプロイメントおよび BarrierController サービス
- HA SingletonService は、クラスター内で実行されるサービスのインスタンスが 1 つだけであることを保証します。JBoss EAP 5 は、HASingletonDeployer サービス、HASingletonController を使用した POJO デプロイメント、BarrierController サービスを使用した HASingleton デプロイメントなど、HA Singleton デプロイメントの複数の方式をサポートしていました。これらの方式は、クラスター内の異なるノードが起動および停止した際の通知を提供するのにすべて HAPartition に依存していたので、利用できなくなりました。JBoss EAP 6 では、HA Singleton デプロイメントが完全に変更になりました。シングルトンデプロイヤーは Modular Service Container (MSC)サービスでのみ動作するようになりました。SingletonService を使用すると、ターゲットサービスはクラスター内のすべてのノードにインストールされますが、常に1つのノード上でのみ起動されます。この方法では、デプロイメント要件を単純化し、シングルトンマスターサービスをノード間で再配置するために必要な時間を最小限にします。ただし、同じ機能を実現するには、カスタムコードを作成する必要があります。HA Singleton デプロイメントの例は、製品に同梱される JBoss EAP クイックスタートサンプルアプリケーションに含まれています。HA Singleton に関する詳細は、「HA シングルトンの実装」 を参照してください。
- JAAS Security Manager サービス
- JBoss EAP 5 には JAAS Security Manager が同梱されており、データソースパスワード暗号化サービスを提供し、パスワードベースの暗号化(PBE)でアイデンティティーを設定していました。このサービスは JBoss EAP 6 には含まれていません。JBoss EAP 6 では、データソースパスワードの暗号化にパスワード vault を使用することを推奨しています。JAAS Security Manager サービスと JBoss EAP 5 を使用したパスワード暗号化アルゴリズムは、JBoss EAP 6 でパスワード vault を使用してパスワードを暗号化するときに使用されるアルゴリズムと互換性がありません。管理者は、以前のリリースでパスワードベースの暗号化を使用して暗号化されたパスワードを再生成する必要があります。以前のバージョンの JBoss EAP でクレデンシャルを動的にデプロイするのに DynamicLoginConfig サービスを使用した場合、JBoss EAP 6 ではクレデンシャルを動的にデプロイするための同様の方法はありません。広く知られた既知のマスク値以外の方法で vault パスワードをセキュアにする機能は、JBoss EAP 6.4 以降でのみ利用できます。
2.4. 移行およびアップグレード リンクのコピーリンクがクリップボードにコピーされました!
メジャーアップグレード
JBoss EAP 5 から JBoss EAP 6 など、アプリケーションを他のメジャーリリースに移動する場合にメジャーアップグレードまたは移行が必要になります。これは、本ガイドで取り上げている移行のタイプです。アプリケーションが Java EE 仕様に準拠し、非推奨の API にアクセスせず、プロプライエタリーコードを含まない場合、変更なしにアプリケーションを JBoss EAP 6 で実行できる可能性があります。それ以外の場合は、アプリケーションコードの変更が必要になることがあります。JBoss EAP 6 でサーバー設定が変更になり、すべてのサーバー設定で移行が必要です。
マイナーアップデート
JBoss EAP では、定期的にポイントリリースが提供されます。JBoss EAP 6.3 から JBoss EAP 6.4 など、ある JBoss EAP ポイントリリースから別のポイントリリースに移行する予定の場合は、カスタマーポータルのJBoss EAP 6の『Installation Guide』 の『Patching JBoss EAP 6』の章を参照してください(https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/?version=6.4)。
累積パッチ
JBoss EAP では、バグおよびセキュリティーの修正が含まれる累積パッチも定期的に提供されます。累積パッチのリリースごとに、リリース番号の最後の数字が 1 ずつ増えます (例: 6.4.1 から 6.4.2)。パッチインストールの詳細は、カスタマーポータルの JBoss EAP 6 の『Installation Guide』 の『Patching JBoss EAP 6』を参照してください (https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/?version=6.4)。
第3章 アプリケーションの移行 リンクのコピーリンクがクリップボードにコピーされました!
3.1. ほとんどのアプリケーションで必要な変更 リンクのコピーリンクがクリップボードにコピーされました!
3.1.1. ほとんどのアプリケーションで必要な変更の確認 リンクのコピーリンクがクリップボードにコピーされました!
3.1.2. クラスローディングの変更 リンクのコピーリンクがクリップボードにコピーされました!
3.1.2.1. クラスローディングの変更によるアプリケーションの更新 リンクのコピーリンクがクリップボードにコピーされました!
- まず、アプリケーションとその依存関係のパッケージ化を確認します。詳細は、 「クラスローディングの変更によるアプリケーション依存関係の更新」を参照してください。
- アプリケーションがロギングする場合は、正しいモジュール依存関係を指定する必要があります。詳細は、 「ロギング依存関係の変更」を参照してください。
- モジュラークラスローディングの変更により、EAR または WAR のパッケージ構造を変更しなければならない場合があります。詳細は、 「EAR と WAR のパッケージ化の変更」を参照してください。
3.1.2.2. モジュール依存関係について リンクのコピーリンクがクリップボードにコピーされました!
概要
モジュールは、独自のクラスと、明示的または暗黙的な依存関係がある任意のモジュールのクラスにのみアクセスできます。
暗黙的な依存関係
サーバー内のデプロイヤーは、javax.api や sun.jdk などの一般的に使用されているモジュールの依存関係を暗黙的に自動的に追加します。これにより、クラスが実行時にデプロイメントからアクセス可能になり、依存関係を明示的に追加するタスクから開発者を解放します。これらの暗黙的な依存関係が追加される方法とタイミングに関する詳細は、JBoss EAP 6 の 『Development Guide』 の『Class Loading and Modules』の章の『Implicit Module Dependencies』を参照してください(https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/?version=6.4)。
明示的な依存関係
他のクラスでは、モジュールを明示的に指定しないと、依存関係がないため、デプロイメントまたはランタイムエラーが発生します。依存関係がない場合、サーバーログに ClassNotFoundExceptions または NoClassDefFoundErrors トレースが記録されます。複数のモジュールが同じ JAR を読み込むか、またはモジュールが別のモジュールによって読み込まれたクラスを拡張するクラスを読み込む場合、サーバーログに ClassCastExceptions トレースが記録されます。依存関係を明示的に指定するには、MANIFEST.MF を変更するか、JBoss 固有のデプロイメント記述子ファイル jboss-deployment-structure.xml を作成します。モジュールの依存関係の詳細は、JBoss EAP 6 の『Development Guide』 の『Class Loading and Module』 の章の『Overview of Class Loading and Modules』を参照してください(https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/?version=6.4)。
3.1.2.3. クラスローディングの変更によるアプリケーション依存関係の更新 リンクのコピーリンクがクリップボードにコピーされました!
概要
JBoss EAP 6 でのクラスローディングは、これまでのバージョンの JBoss EAP とは大きく異なります。クラスローディングは JBoss Modules プロジェクトをベースにするようになりました。すべての JAR をフラットクラスパスに読み込む単一の階層構造クラスローダーではなく、各ライブラリーは、依存するモジュールにのみリンクするモジュールになります。JBoss EAP 6 のデプロイメントもモジュールであり、これらのクラスへの明示的な依存関係が定義されない限り、アプリケーションサーバーの JAR で定義されたクラスにアクセスできません。アプリケーションサーバーによって定義されるモジュール依存関係の一部が自動的に設定されます。たとえば、Java EE アプリケーションをデプロイする場合は、Java EE API の依存関係が自動的または暗黙的に追加されます。サーバーによって自動的に追加される依存関係の完全なリストについては、JBoss EAP 6 の 『Development Guide』 の『Class Loading and Modules』の章の『Implicit Module Dependencies』を参照してください(https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/?version=6.4)。
タスク
アプリケーションを JBoss EAP 6 に移行する場合は、モジュラークラスローディングの変更により、以下のタスクの 1 つまたは複数を実行しなければならない場合があります。
3.1.3. 設定ファイルの変更 リンクのコピーリンクがクリップボードにコピーされました!
3.1.3.1. JBoss EAP 6 でクラスローディングを制御するファイルの作成または変更 リンクのコピーリンクがクリップボードにコピーされました!
概要
モジュラークラスローディングを使用する JBoss EAP 6 の変更に伴い、1 つまたは複数のファイルを作成または編集して依存関係を追加したり、自動的な依存関係がロードされないようにする必要がある場合があります。クラスローディングとクラスローディングの優先順位に関する詳細は、JBoss EAP 6 の 『Development Guide』 の『Class Loading and Modules』の章を参照してください (https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/?version=6.4)。
- 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.jarCopy 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.loggingCopy 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.loggingCopy 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 モジュールがデプロイされる順序を制御することができます。多くの場合、デプロイメント順序を指定する必要はありません。アプリケーションが依存関係注入とリソース参照を使用して外部モジュールのコンポーネントを参照する場合、アプリケーションサーバーは正しく最適なコンポーネントの順序決定方法を暗黙的に決定できるため、多くの場合<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に設定し、application.xmlファイルでmyBeans.jarモジュールおよびmyApp.warモジュールの順序を指定します。以下は、<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に設定すると、デプロイメントが遅くなることに注意してください。デプロイメントの最適化に関してコンテナーの柔軟性を高めることができるため、依存関係の注入やリソース参照を使用して適切な依存関係を定義することが推奨されます。 - jboss-ejb3.xml
jboss-ejb3.xmlデプロイメント記述子はjboss.xmlデプロイメント記述子に置き換わり、Java Enterprise Edition (EE)で定義されたejb-jar.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 6 サーバーで実行しているすべてのアプリケーションでカスタムリソースを使用できるようにするには、カスタムモジュールを作成する必要があります。このアプローチの詳細は、 「カスタムモジュールの作成」 を参照してください。
3.1.3.4. ResourceBundle プロパティーの場所の変更 リンクのコピーリンクがクリップボードにコピーされました!
概要
これまでのバージョンの JBoss EAP では、EAP_HOME/server/SERVER_NAME/conf/ ディレクトリーがクラスパスにあり、アプリケーションで利用できていました。JBoss EAP 6 のアプリケーションのクラスパスでプロパティーを使用できるようにするには、アプリケーション内にプロパティーをパッケージ化する必要があります。
手順3.1 ResourceBundle プロパティーの場所の変更
- WAR アーカイブをデプロイする場合は、これらのプロパティーを WAR の
WEB-INF/classes/フォルダーにパッケージ化する必要があります。 - これらのプロパティーを EAR のすべてのコンポーネントで利用できるようにしたい場合は、JAR のルートにパッケージ化してから JAR を EAR の
lib/フォルダーに配置する必要があります。
3.1.3.5. カスタムモジュールの作成 リンクのコピーリンクがクリップボードにコピーされました!
手順3.2 カスタムモジュールの作成
module/ディレクトリー構造を作成し、反映させます。EAP_HOME/moduleディレクトリーにディレクトリー構造を作成し、ファイルと JAR が含まれるようにします。以下に例を示します。cd EAP_HOME/modules/ mkdir -p myorg-conf/main/properties
$ cd EAP_HOME/modules/ $ mkdir -p myorg-conf/main/propertiesCopy to Clipboard Copied! Toggle word wrap Toggle overflow - プロパティーファイルを、前のステップで作成した
EAP_HOME/modules/myorg-conf/main/properties/ディレクトリーに移動します。 EAP_HOME/modules/myorg-conf/main/ディレクトリーに、以下の XML が含まれるmodule.xmlファイルを作成します。<module xmlns="urn:jboss:module:1.1" name="myorg-conf"> <resources> <resource-root path="properties"/> </resources> </module><module xmlns="urn:jboss:module:1.1" name="myorg-conf"> <resources> <resource-root path="properties"/> </resources> </module>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- サーバー設定ファイルの
eeサブシステムを変更します。管理 CLI を使用するか、ファイルを手動で編集できます。- 管理 CLI を使用してサーバー設定ファイルを変更するには、以下の手順に従います。
- サーバーを起動し、管理 CLI へ接続します。
- Linux の場合は、コマンドラインで以下を入力します。
EAP_HOME/bin/jboss-cli.sh --connect
EAP_HOME/bin/jboss-cli.sh --connectCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Windows の場合は、コマンドラインで以下を入力します。
C:\>EAP_HOME\bin\jboss-cli.bat --connect
C:\>EAP_HOME\bin\jboss-cli.bat --connectCopy to Clipboard Copied! Toggle word wrap Toggle overflow
次の応答が表示されるはずです。Connected to standalone controller at localhost:9999
Connected to standalone controller at localhost:9999Copy 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サブシステム要素の例になります。例3.1
myorg-conf要素<subsystem xmlns="urn:jboss:domain:ee:1.0" > <global-modules> <module name="myorg-conf" slot="main" /> </global-modules> </subsystem><subsystem xmlns="urn:jboss:domain:ee:1.0" > <global-modules> <module name="myorg-conf" slot="main" /> </global-modules> </subsystem>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
my.propertiesという名前のファイルを正しいモジュールの場所にコピーした場合は、以下のようなコードを使用してプロパティーファイルをロードできるようになります。例3.2 プロパティーファイルの読み込み
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.3 アプリケーションのロギングコードの更新
3.1.4.2. サードパーティーロギングフレームワーク用のアプリケーションコードの更新 リンクのコピーリンクがクリップボードにコピーされました!
概要
JBoss EAP 6 では、Apache Commons Logging、Apache log4j、SLF4J、Java Logging などの一般的なサードパーティーフレームワークのロギング依存関係がデフォルトで追加されます。ほとんどの場合、JBoss EAP コンテナーによって提供されるロギングフレームワークを使用することが推奨されます。ただし、サードパーティーフレームワークが提供する特定の機能が必要な場合は、デプロイメントから対応する JBoss EAP モジュールを除外する必要があります。デプロイメントでサードパーティーのロギングフレームワークが使用されますが、サーバーログは JBoss EAP ロギングサブシステム設定を引き続き使用します。
org.apache.log4j モジュールを除外する方法を示しています。最初の手順は、JBoss EAP 6 の任意のリリースで機能します。2 つ目の手順は、JBoss EAP 6.3 以降にのみ適用されます。
手順3.4 log4j.properties または log4j.xml ファイルを使用する JBoss EAP 6 を設定
- 以下の内容で
jboss-deployment-structure.xmlを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - WAR をデプロイする場合は
META-INF/ディレクトリーまたはWEB-INF/ディレクトリーに、EAR をデプロイする場合はMETA-INF/ディレクトリーに、それぞれjboss-deployment-structure.xmlファイルを配置します。デプロイメントに依存する子デプロイメントが含まれる場合は、それぞれのサブデプロイメントについてもモジュールを除外する必要があります。 - EAR の
lib/ディレクトリーまたは WAR デプロイメントのWEB-INF/classes/ディレクトリーに、それぞれlog4j.propertiesまたはlog4j.xmlファイルを追加します。WAR のlib/ディレクトリーにファイルを配置する場合は、jboss-deployment-structure.xmlファイルに<resource-root>パスを指定する必要があります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 以下のランタイム引数を使用して JBoss EAP 6 サーバーを起動します。これにより、アプリケーションのデプロイメント時に
ClassCastExceptionがコンソールに表示されなくなります。-Dorg.jboss.as.logging.per-deployment=false
-Dorg.jboss.as.logging.per-deployment=falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow - アプリケーションをデプロイします。
手順3.5 JBoss EAP 6.3 以降のロギング依存関係の設定
add-logging-api-dependencies ロギングシステムプロパティーを使用して、サードパーティーのロギングフレームワークの依存関係を除外できます。以下の手順は、JBoss EAP スタンドアロンサーバーでこのロギング属性を変更する方法を示しています。
- 以下のランタイム引数を使用して JBoss EAP 6 サーバーを起動します。これにより、アプリケーションのデプロイメント時に
ClassCastExceptionがコンソールに表示されなくなります。-Dorg.jboss.as.logging.per-deployment=false
-Dorg.jboss.as.logging.per-deployment=falseCopy to Clipboard Copied! Toggle word wrap Toggle overflow - ターミナルを開き、管理 CLI に接続します。
- Linux の場合は、コマンドラインで以下を入力します。
EAP_HOME/bin/jboss-cli.sh --connect
$ EAP_HOME/bin/jboss-cli.sh --connectCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Windows の場合は、コマンドラインで以下を入力します。
C:\>EAP_HOME\bin\jboss-cli.bat --connect
C:\>EAP_HOME\bin\jboss-cli.bat --connectCopy to Clipboard Copied! Toggle word wrap Toggle overflow
- logging サブシステムの
add-logging-api-dependencies属性を変更します。この属性は、コンテナーが暗黙的なロギング API 依存関係をデプロイメントに追加するかどうかを制御します。- デフォルトの
trueに設定すると、暗黙的なロギング API 依存関係がすべて追加されます。 falseに設定すると、依存関係はデプロイメントに追加されません。
サードパーティーのロギングフレームワークの依存関係を除外するには、以下のコマンドを使用してこの属性をfalseに設定する必要があります。/subsystem=logging:write-attribute(name=add-logging-api-dependencies, value=false)
/subsystem=logging:write-attribute(name=add-logging-api-dependencies, value=false)Copy to Clipboard Copied! Toggle word wrap Toggle overflow このコマンドは、<add-logging-api-dependencies>要素をstandalone.xml設定ファイルのloggingサブシステムに追加します。<subsystem xmlns="urn:jboss:domain:logging:1.4"> <add-logging-api-dependencies value="false"/> .... </subsystem><subsystem xmlns="urn:jboss:domain:logging:1.4"> <add-logging-api-dependencies value="false"/> .... </subsystem>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - アプリケーションをデプロイします。
3.1.4.3. 新しい JBoss ロギングフレームワークを使用するためのコード変更 リンクのコピーリンクがクリップボードにコピーされました!
概要
新しいフレームワークを使用するには、以下の手順のようにインポートとコードを変更します。
手順3.6 JBoss ロギングフレームワークを使用するためのコードと依存関係の変更
- インポートとロギングコードを変更します。新しい JBoss ロギングフレームワークを使用するコードの例を以下に示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - ロギング依存関係を追加します。JBoss Logging クラスが含まれる JAR は、
org.jboss.loggingという名前のモジュールにあります。MANIFEST-MFファイルは以下のようになるはずです。Manifest-Version: 1.0 Dependencies: org.jboss.logging
Manifest-Version: 1.0 Dependencies: org.jboss.loggingCopy to Clipboard Copied! Toggle word wrap Toggle overflow モジュール依存関係を探す方法は、「クラスローディングの変更によるアプリケーション依存関係の更新」 および 「移行の問題のデバッグおよび解決」 を参照してください。
3.1.5. アプリケーションのパッケージ化の変更 リンクのコピーリンクがクリップボードにコピーされました!
3.1.5.1. EAR と WAR のパッケージ化の変更 リンクのコピーリンクがクリップボードにコピーされました!
概要
アプリケーションを移行する場合、モジュラークラスローディングへの変更が原因で EAR または WAR のパッケージ構造を変更しなければならない場合があります。モジュール依存関係は、以下の特定の順序で読み込まれます。
- システムの依存関係
- ユーザーの依存関係
- ローカルリソース
- デプロイメント間の依存関係
手順3.7 アーカイブパッケージの変更
- WAR をパッケージ化します。WAR は 1 つのモジュールで、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 内の他のサブデプロイメントに属するクラスを参照できます。クラスローディングに関する詳細は、JBoss EAP 6 の 『Development Guide』 の『Class Loading and Modules』の章を参照してください (https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/?version=6.4)。
3.1.5.2. ルートコンテキストの優先順位の変更 リンクのコピーリンクがクリップボードにコピーされました!
jboss-web.xml WAR ファイルで定義された <context-root> 要素が application.xml EAR ファイルで定義された <context-root> 要素よりも優先されます。
application.xml EAR ファイルで定義された <context-root> 要素は、jboss-web.xml WAR ファイルで定義された <context-root> 要素よりも優先されます。WAR ファイルが EAR アーカイブ内にデプロイされている場合、application.xml ファイルに <context-root> 要素を定義します。
3.1.6. データソースおよびリソースアダプター設定の変更 リンクのコピーリンクがクリップボードにコピーされました!
3.1.6.1. 設定変更によるアプリケーションの更新 リンクのコピーリンクがクリップボードにコピーされました!
- アプリケーションがデータソースを使用する場合は、 「DataSource設定の更新」 を参照してください。
- アプリケーションが JPA を使用し、現在 Hibernate JAR をバンドルしている場合は、移行オプションについて 「Hibernate または JPA のデータソースの設定」 を参照してください。
- アプリケーションがリソースアダプターを使用する場合は、 「リソースアダプター設定の更新」 を参照してください。
- 基本的なセキュリティーの変更の設定方法に関する情報は、 「アプリケーションセキュリティーの変更の設定」 を参照してください。
3.1.6.2. DataSource設定の更新 リンクのコピーリンクがクリップボードにコピーされました!
概要
これまでのバージョンの JBoss EAP では、JCA DataSource 設定は *-ds.xml のサフィックスのファイルで定義されていました。その後、このファイルはサーバーの deploy/ ディレクトリーにデプロイされるか、アプリケーションとともにパッケージ化されます。JDBC ドライバーは server/lib/ ディレクトリーにコピーされるか、アプリケーションの WEB-INF/lib/ ディレクトリーにパッケージ化されます。DataSource のこの設定方法は開発用に引き続きサポートされますが、JBoss の管理ツールではサポートされないため、本番環境では推奨されません。
domain/configuration/domain.xml ファイルで設定されます。JBoss EAP 6 インスタンスがスタンドアロンサーバーとして実行されている場合、DataSource は standalone/configuration/standalone.xml ファイルで設定されます。このように設定されたDataSourceは、Web 管理コンソールやコマンドラインインターフェース(CLI)などの JBoss 管理インターフェイスを使用して管理および制御できます。これらのツールにより、デプロイメントの管理や、管理対象ドメインで実行されている複数のサーバーの設定が容易になります。
JBoss EAP 6 の管理可能な DataSource 設定への移行
JDBC 4.0 準拠のドライバーは、デプロイメントまたはコアモジュールとしてインストールできます。JDBC 4.0 に準拠するドライバーには、ドライバークラス名を指定する META-INF/services/java.sql.Driver ファイルが含まれます。JDBC 4.0 に準拠していないドライバーには、追加の手順が必要です。ドライバーを JDBC 4.0 準拠にする方法や、現在の DataSource 設定を Web 管理コンソールおよび CLI で管理できる設定に更新する方法は、 「JDBC ドライバーのインストールおよび設定」 を参照してください。
IronJacamar 移行ツールを使用した設定データの変換
IronJacamar ツールを使用して DataSource および ResourceAdapter 設定を移行できます。このツールは、*-ds.xml スタイルの設定ファイルを JBoss EAP 6 で想定される形式に変換します。詳細は、 「IronJacamar Tool を使用したデータソースおよびリソースアダプター設定の移行」 を参照してください。
リモートDataSourceルックアップを実行するコードの移行
以前のバージョンの JBoss EAP では、DataSource オブジェクトの JNDI リモートルックアップを実行できますが、以下の理由により推奨されません。
- サーバーリソースのクライアント制御は信頼性がなく、クライアントがクラッシュしたり、サーバーへの接続を失うと接続が漏洩する可能性があります。
- すべてのデータベース操作が
MBeanを介してプロキシーされるため、パフォーマンスは非常に遅くなります。 - トランザクションの伝播はサポートされていません。
NotSerializableException が表示されることがあります。推奨される方法は、EJB を作成してDataSource にアクセスし、EJB をリモートで呼び出すことです。詳細は、本ガイドの「『リモート呼び出しの変更』」を参照してください。詳細は、JBoss EAP 6の 『Development Guide』 を参照してください (https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/?version=6.4)。
3.1.6.3. JDBC ドライバーのインストールおよび設定 リンクのコピーリンクがクリップボードにコピーされました!
概要
JDBC ドライバーは、以下の 2 つの方法のいずれかでコンテナーにインストールできます。
- デプロイメントとして
- コアモジュールとして
domain/configuration/domain.xml ファイルで設定されます。JBoss EAP 6 インスタンスがスタンドアロンサーバーとして実行されている場合、データソースは standalone/configuration/standalone.xml ファイルで設定されます。両方のモードで同じであるスキーマ参照情報は、JBoss EAP 6 のインストールの docs/schema/ ディレクトリーにあります。ここでは、サーバーがスタンドアロンサーバーとして実行され、データソースが standalone.xml ファイルで設定されることを前提とします。
手順3.8 JDBC ドライバーのインストールおよび設定
- JDBC ドライバーをインストールします。
- JDBC ドライバーをデプロイメントとしてインストールします。これが、ドライバーをインストールするのに推奨される方法です。JDBC ドライバーがデプロイメントとしてインストールされると、通常の JAR としてデプロイされます。JBoss EAP 6 インスタンスがスタンドアロンサーバーとして実行されている場合、JDBC 4.0 準拠の JAR を
EAP_HOME/standalone/deployments/ディレクトリーにコピーします。管理対象ドメインでは、管理コンソールまたは管理 CLI を使用して JAR をサーバーグループにデプロイする必要があります。以下は、デプロイメントとしてスタンドアロンサーバーにインストールされた 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/Copy to Clipboard Copied! Toggle word wrap Toggle overflow JDBC 4.0 準拠のドライバーは自動的に認識され、名前とバージョンでシステムにインストールされます。JDBC 4.0 準拠の JAR には、ドライバークラス名を指定するMETA-INF/services/java.sql.Driverという名前のテキストファイルが含まれます。ドライバーが JDBC 4.0 に準拠していない場合には、以下のいずれかの方法でデプロイ可能にすることができます。java.sql.Driverファイルを作成し、META-INF/services/パスの下にある JAR に追加します。このファイルにはドライバークラス名が含まれている必要があります。以下に例を示します。com.mysql.jdbc.Driver
com.mysql.jdbc.DriverCopy to Clipboard Copied! Toggle word wrap Toggle overflow - デプロイメントディレクトリーに
java.sql.Driverファイルを作成します。スタンドアロンサーバーとして実行されている JBoss EAP 6 インスタンスの場合は、ファイルをEAP_HOME/standalone/deployments/META-INF/services/java.sql.Driverに配置する必要があります。サーバーが管理対象ドメインにある場合は、管理コンソールまたは管理 CLI を使用してファイルをデプロイする必要があります。
このアプローチの利点は以下のとおりです。このアプローチの短所は以下のとおりです。- モジュールを定義する必要がないため、これが最も簡単な方法です。
- 管理対象ドメインでサーバーを実行している場合は、このアプローチを使用するデプロイメントは、ドメイン内のすべてのサーバーに自動的に伝播されます。これは、管理者がドライバー 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/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/ $ cp db2jcc_license_cisuz.jar EAP_HOME/modules/com/ibm/db2/main/Copy to Clipboard Copied! Toggle word wrap Toggle overflow
このアプローチの利点は以下のとおりです。このアプローチの短所は以下のとおりです。- これは、JDBC ドライバーが複数の JAR で構成される場合に機能する唯一の方法です。
- この方法では、JDBC 4.0 に準拠していないドライバーを、ドライバー JAR を変更したり、ファイルオーバーレイを作成したりせずにインストールできます。
- モジュールの設定がより困難です。
- モジュールは、管理対象ドメインで実行されているすべてのサーバーに手動でコピーする必要があります。
- データソースを設定します。
- データベースドライバーを追加します。同じファイルの
<drivers>要素に<driver>要素を追加します。ここでも、これには*-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 META-INF/services/java.sql.Driverファイルがないため、ドライバークラスを識別する<driver-class>属性が必要です。以下は、JDBC 4.0 に準拠していないドライバーのドライバー要素の例です。<driver name="mysql-connector-java-5.1.15.jar" module="com.mysql"> <driver-class>com.mysql.jdbc.Driver</driver-class></driver>
<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
- アプリケーションコードの JNDI 参照を更新します。定義した新しい JNDI 標準データソース名を使用するには、アプリケーションのソースコードの古い JNDI ルックアップ名を置き換える必要があります。詳細は、 「新しい JNDI 名前空間ルールに従うようにアプリケーションを変更」 を参照してください。新しい JNDI 名を使用するには、データソースにアクセスする既存の
@Resourceアノテーションも置き換える必要があります。以下に例を示します。@Resource(name = "java:/YourDatasourceName").
@Resource(name = "java:/YourDatasourceName").Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.1.6.4. Hibernate または JPA のデータソースの設定 リンクのコピーリンクがクリップボードにコピーされました!
手順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 ファイルでリソースアダプターを設定します。両方のモードで同じであるスキーマ参照情報は、IronJacamar Web サイト(http://www.ironjacamar.org/documentation.html)の 『Schemas』 セクションにあります。
リソースアダプターの定義
リソースアダプター記述子情報は、サーバー設定ファイルの以下のサブシステム要素で定義されます。
<subsystem xmlns="urn:jboss:domain:resource-adapters:1.1"/>
<subsystem xmlns="urn:jboss:domain:resource-adapters:1.1"/>
*-ds.xml ファイルで以前に定義された同じデータソース情報の一部を使用します。
3.1.6.6. リークしたデータソース接続の検出 リンクのコピーリンクがクリップボードにコピーされました!
概要
JBoss EAP 6 では、Cached Connection Manager (CCM)デバッグユーティリティーを使用して、リークされたデータソース接続を検出できます。このトピックでは、CCM ユーティリティーを有効にしてデバッグする方法を説明します。
手順3.10 Cached Connection Managerの有効化
<use-ccm="true"を設定して、サーバー設定ファイルのdatasourcesサブシステムで CCM を有効にします。これはデフォルト値であり、明示的に設定する必要はありません。Copy to Clipboard Copied! Toggle word wrap Toggle overflow <cached-connection-manager>がサーバー設定ファイルのjcaサブシステムに存在することを確認します。debug属性をtrueに設定します。<subsystem xmlns="urn:jboss:domain:jca:1.1"> ... <cached-connection-manager debug="true" error="true"/> ... </subsystem>
<subsystem xmlns="urn:jboss:domain:jca:1.1"> ... <cached-connection-manager debug="true" error="true"/> ... </subsystem>Copy to Clipboard Copied! Toggle word wrap Toggle overflow debug="true"を設定すると、以下が発生します。追加のプロパティー- "Closing a connection for you. Please close them yourself"というメッセージと共に、
INFOメッセージがログに記録されます。 - リークした接続を開いたコード用にスタックトレースが生成されます。
- リークした接続が閉じられます。
error="true"を使用すると、RuntimeExceptionを発生させ、ログにERRORメッセージを生成できます。- デバッグを有効にすることは、パフォーマンスおよびログファイルのサイズに影響を及ぼすため、テスト時のみを使用することが推奨されます。リークが残っていないことを確認してから、アプリケーションを実稼働環境にデプロイする前に、
debug="true"設定を削除するか、<cached-connection-manager debug="false"/>を使用して、設定を元に戻します。
手順3.11 Cached Connection Manager によって報告されないリークのデバッグ
- サーバー設定ファイルの
datasourceサブシステムにuse-ccm="false"が設定されていないことを確認します。 - サーバー設定ファイルの
datasourceサブシステムにjta="false"が設定されていないことを確認します。 org.jboss.jcaでは、最小ロギングレベルがINFOに設定されていることを確認します。
3.1.7. セキュリティーの変更 リンクのコピーリンクがクリップボードにコピーされました!
3.1.7.1. アプリケーションセキュリティーの変更の設定 リンクのコピーリンクがクリップボードにコピーされました!
Basic 認証のセキュリティー設定
これまでのバージョンの JBoss EAP では、EAP_HOME/server/SERVER_NAME/conf/ ディレクトリーに置かれたプロパティーファイルはクラスパス上にあり、UsersRolesLoginModule によって簡単に確認できました。JBoss EAP 6 では、ディレクトリー構造が変更になりました。プロパティーファイルは、クラスパスで利用できるようにするためにアプリケーション内にパッケージ化する必要があります。
standalone/configuration/standalone.xml または domain/configuration/domain.xml サーバー設定ファイルのsecurity-domains の下に、新しいセキュリティードメインを追加します。
${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.7.2. PicketLink STS および Web サービスを使用するアプリケーションの更新 リンクのコピーリンクがクリップボードにコピーされました!
概要
JBoss EAP 6.1 アプリケーションが PicketLink STS および Web サービスを使用する場合、JBoss EAP 6.2 以降に移行するときに変更が必要になる場合があります。CVE-2013-2133 に対応するために JBoss EAP に適用された修正により、EJB3 ベースの WS エンドポイントにアタッチされた JAXWS ハンドラーを実行する前に、コンテナーによる承認チェックが実施されます。したがって、PicketLink SAML2Handler は後でプロセスで使用されるセキュリティープリンシパルを確立するため、PicketLink STS 機能の一部が影響を受ける可能性があります。HandlerAuthInterceptor が SAML2Handler にアクセスする際にプリンシパルが NULL であるため、サーバーログに NullPointerException が記録されることがあります。この問題を修正するには、このセキュリティーチェックを無効にする必要があります。
手順3.12 追加の承認チェックの無効化
- 以下の方法のいずれかを使用して、追加の承認チェックを無効にし、既存の PicketLink デプロイメントを引き続き使用できます。
- システム全体のプロパティーを設定します。
org.jboss.ws.cxf.disableHandlerAuthChecksシステムプロパティーの値をtrueに設定すると、サーバーレベルで追加の承認チェックを無効にできます。この方法は、アプリケーションサーバーに加えられたすべてのデプロイメントに影響します。システムプロパティーの設定方法は、JBoss EAPの『Administration and Configuration Guide』の『Configure System Properties Using the Management CLI』というトピックを参照してください。 - デプロイメントの Web サービス記述子ファイルにプロパティーを作成します。
jboss-webservices.xmlファイルでorg.jboss.ws.cxf.disableHandlerAuthChecksプロパティーの値をtrueに設定すると、デプロイメントレベルで追加の承認チェックを無効にできます。この方法は、特定のデプロイメントにのみ影響します。- 追加の承認チェックを無効にするデプロイメントの
META-INF/ディレクトリーにjboss-webservices.xmlファイルを作成します。 - 以下の内容を追加します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
org.jboss.ws.cxf.disableHandlerAuthChecks プロパティーを有効にすると、CVE-2013-2133 に対してシステムが脆弱になります。アプリケーションが EJB メソッドで宣言されたセキュリティー制限が適用されることを期待しているにも関わらず、JAX-WS ハンドラーに依存しないセキュリティー制限を適用しない場合、プロパティーを有効化しないでください。このプロパティーは、アプリケーションの破損を回避するために必要な場合、後方互換性の目的でのみ使用してください。
3.1.8. JNDI の変更 リンクのコピーリンクがクリップボードにコピーされました!
3.1.8.1. アプリケーション JNDI 名前空間名の更新 リンクのコピーリンクがクリップボードにコピーされました!
概要
EJB 3.1 では、標準化されたグローバル JNDI 名前空間と、Java EE アプリケーションのさまざまなスコープにマッピングする関連する名前空間が導入されました。移植可能な EJB 名は java:global、java:module、および java:app の 3 つのみにバインドされます。JNDI を使用する EJB のアプリケーションは、新しい標準化された JNDI 名前空間規則に従うように変更する必要があります。
手順3.13 JNDI ルックアップの変更
- 以下について詳しく確認する 「移植可能な EJB JNDI 名」
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/jboss-seam-booking/jboss-seam-booking-jar/HotelBookingActionは、java:global 名前空間の例です。
|
| java:module |
この名前空間内の名前は、モジュールのすべてのコンポーネント(例:単一の EJB モジュールのすべてのエンタープライズBeanや Web モジュールのすべてのコンポーネント)によって共有されます。
java:module/HotelBookingAction!org.jboss.seam.example.booking.HotelBookingは、java:module 名前空間の例です。
|
| java:app |
この名前空間内の名前は、単一アプリケーションのすべてのモジュールのすべてのコンポーネントで共有されます。たとえば、同じ EAR ファイルの WAR と EJB jar ファイルは java:app 名前空間内のリソースにアクセスできます。
java:app/jboss-seam-booking-jar/HotelBookingActionは、java:app 名前空間の例です。
|
3.1.8.3. JNDI 名前空間ルールの確認 リンクのコピーリンクがクリップボードにコピーされました!
概要
JBoss EAP 6 で JNDI 名前空間名が改善され、アプリケーションサーバーにバインドされるすべての名前に対して予測可能かつ一貫性のあるルールを提供するだけでなく、今後の互換性の問題を回避します。したがって、アプリケーションの現在の名前空間が新しいルールに準拠しない場合に、問題が発生する可能性があります。
名前空間は以下のルールに従う必要があります。
DefaultDSやjdbc/DefaultDSなどの修飾されていない相対名は、コンテキストに応じてjava:comp/env、java:module/env、またはjava:jboss/envとの相対値として修飾する必要があります。/jdbc/DefaultDSなどの修飾されていない絶対名は、java:jboss/root名との相対値として修飾する必要があります。java:/jdbc/DefaultDSなどの修飾された絶対名は、上記の非修飾絶対名と同じ方法で修飾する必要があります。- 特別な
java:jboss名前空間は AS サーバーインスタンス全体で共有されます。 java:プレフィックスの相対名は、5つの名前空間comp、module、app、global、またはプロプライエタリーのjbossのいずれかになければなりません。java:xxx(ここで、xxx は上記の 5 つのいずれとも一致しない)で始まる名前の場合、無効な名前エラーが発生します。
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:appJNDI 名前空間名java:app/OrderManagerEJB/ProductManagerBean!services.ejb.ProductManagerを使用するようになりました。 - 依存性注入を使用しない場合は、上記のように新しい 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 セキュリティーレルムの変更の設定」 のトピックで詳細を参照してください。
- Messaging
- JBoss Messaging は JBoss EAP 6 に含まれなくなりました。アプリケーションが JBoss Messaging をメッセージングプロバイダーとして使用する場合は、JBoss Messaging コードを HornetQ に置き換える必要があります。 「HornetQ を JMS プロバイダーとして使用するためのアプリケーションの移行」 のトピックで、必要な操作について説明します。
- クラスタリング
- JBoss EAP 6 では、クラスタリングを有効にする方法が変更になりました。詳細は、 「クラスタリング向けにアプリケーションに変更を加える。」 を参照してください。
- サービススタイルのデプロイメント
- JBoss EAP 6 はサービススタイルの記述子を使用しなくなりましたが、コンテナーは可能な限り変更なしにサービススタイルのデプロイメントをサポートします。デプロイメントの情報は、 「サービススタイルのデプロイメントを使用するアプリケーションの更新」を参照してください。
- リモート呼び出し
- アプリケーションがリモート呼び出しを行う場合、JNDI を使用して Bean のプロキシーを検索し、返されたプロキシーで呼び出しを行うことができます。必要な構文および名前空間の変更に関する詳細は、 「リモート呼び出しを JBoss EAP 6 に作成する JBoss EAP 5 のデプロイされたアプリケーションの移行」 を参照してください。
- 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.2.2.2. Hibernate および JPA を使用するアプリケーションの変更の設定 リンクのコピーリンクがクリップボードにコピーされました!
概要
アプリケーションに persistence.xml ファイルが含まれる場合や、コードが @PersistenceContext または @PersistenceUnit アノテーションを使用する場合、JBoss EAP 6 はデプロイメント時にこれを検出し、アプリケーションが JPA を使用すると仮定します。暗黙的に Hibernate 4 と他の依存関係をアプリケーションクラスパスに追加します。
ClassNotFoundExceptions が表示される場合は、以下の方法の 1 つを使用して解決できます。
手順3.14 アプリケーションの設定
- 必要な Hibernate 3 JAR をアプリケーションライブラリーにコピーします。不足しているクラスが含まれる特定の Hibernate 3 JAR をアプリケーションの
lib/ディレクトリーにコピーするか、他の方法を使用してクラスパスに追加して、問題を解決できる場合があります。これにより、Hibernate バージョンの混合使用が原因でClassCastExceptionsやその他のクラスローディングの問題が発生することがあります。その場合には、次の方法を使用する必要があります。 - Hibernate 3 ライブラリーのみを使用するようにサーバーに指示します。JBoss EAP 6 では、アプリケーションで Hibernate 3.5(またはそれ以降)の永続プロバイダー jar をパッケージ化できます。Hibernate 3 ライブラリーのみを使用し、Hibernate 4 ライブラリーを除外するようにサーバーに指示するには、以下のように
persistence.xmlのjboss.as.jpa.providerModuleをhibernate3-bundledに設定する必要があります。Java Persistence API (JPA)デプロイヤーは、アプリケーション内に永続プロバイダーの存在を検出し、Hibernate 3 ライブラリーを使用します。JPA 永続プロパティーの詳細は、 「永続ユニットプロパティー」 を参照してください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Hibernate 二次キャッシュを無効にします。Hibernate 3 の 二次キャッシュは、JBoss EAP 6 では以前のリリースと同じようには動作しません。アプリケーションで Hibernate 二次キャッシュを使用している場合は、Hibernate 4 にアップグレードするまで無効にする必要があります。二次キャッシュを無効にするには、
persistence.xmlファイルで<hibernate.cache.use_second_level_cache>をfalseに設定します。 org.jboss.ejb3.entity.ExtendedEntityManagerへの参照を置き換えます。JBoss EAP 5 では、拡張永続コンテキスト管理のためにorg.jboss.ejb3.entity.ExtendedEntityManagerクラスがjavax.persistence.EntityManagerを拡張しました。JBoss EAP 6 では、このクラスはorg.jboss.as.jpa.container.ExtendedEntityManagerクラスに置き換えられました。ただし、プロプライエタリークラスの代わりに標準の Java EE 6 JPA APIjavax.persistence.EntityManagerクラスを使用するようコードを更新することが推奨されます。
3.2.2.3. 永続ユニットプロパティー リンクのコピーリンクがクリップボードにコピーされました!
Hibernate 4.x 設定プロパティー
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 永続プロパティー
以下の 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.15 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 5 アプリケーションのガイドライン
@GeneratedValue アノテーションを使用する既存のアプリケーションは、アプリケーションが JBoss EAP 6 に移行するときに、新しいエンティティーのプライマリーキー値を作成するために同じジェネレーターが使用されることを確認する必要があります。
- 既存の 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 への移行 リンクのコピーリンクがクリップボードにコピーされました!
- Hibernate
テキストタイプはJDBC LONGVARCHARにマッピングされるようになりました。3.5 よりも前のバージョンの Hibernate では、テキストタイプはJDBC CLOBにマッピングされました。新しい Hibernate タイプmaterialized_clobが Hibernate 4 に追加され、JavaStringプロパティーをJDBC CLOBにマッピングします。JDBC CLOBにマッピングすることが意図されたアプリケーションのプロパティーがtype="text"として設定されている場合、以下のいずれかを実行する必要があります。- アプリケーションが hbm マッピングファイルを使用する場合は、プロパティーを
type="materialized_clob"に変更します。 - アプリケーションがアノテーションを使用する場合は、
@Type(type = "text")を@Lobに置き換える必要があります。
- 戻り値タイプの変更を探すコードの確認数値集約基準のプロジェクションは、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 値が返されます。
nullSafeGet()およびnullSafeSet()メソッドのUserType署名を更新します。UserTypeクラスのnullSafeGet()およびnullSafeSet()メソッドの署名が Hibernate 4 で変更になりました。これらのメソッドを使用するアプリケーションコードは、新しい署名を使用するように更新する必要があります。以下は、Hibernate 3.x のメソッド署名の例です。以下は、Hibernate 4 の新しいメソッド署名の例です。public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException; public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException;public Object nullSafeGet(ResultSet rs, String[] names, Object owner) throws HibernateException, SQLException; public void nullSafeSet(PreparedStatement st, Object value, int index) throws HibernateException, SQLException;Copy to Clipboard Copied! Toggle word wrap Toggle overflow public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor session, Object owner) throws HibernateException, SQLException; public void nullSafeSet(PreparedStatement st, Object value, int index, SessionImplementor session) throws HibernateException, SQLException;public Object nullSafeGet(ResultSet rs, String[] names, SessionImplementor session, Object owner) throws HibernateException, SQLException; public void nullSafeSet(PreparedStatement st, Object value, int index, SessionImplementor session) throws HibernateException, SQLException;Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.2.7. Hibernate 3.5.x アプリケーションの Hibernate 4.x への移行 リンクのコピーリンクがクリップボードにコピーされました!
- AnnotationConfiguration が Configurationにマージされました。
AnnotationConfigurationは非推奨になりましたが、移行には影響しません。hbm.xmlファイルをまだ使用している場合は、JBoss EAP 6 では、以前のリリースで使用されていたorg.hibernate.cfg.DefaultNamingStrategyではなく、AnnotationConfigurationのorg.hibernate.cfg.EJB3NamingStrategyが使用されるようになったことに注意してください。これにより、命名が一致しなくなる可能性があります。- 関連付け(多対多および要素のコレクション)表の名前のデフォルト設定を命名ストラテジーに依存している場合、この問題が発生する可能性があります。この問題を解決するには、
Configuration#setNamingStrategyを呼び出してorg.hibernate.cfg.DefaultNamingStrategy#INSTANCEに渡すことで、レガシーorg.hibernate.cfg.DefaultNamingStrategyを使用するように Hibernate に指示できます。
- 以下の表にあるように、新しい Hibernate DTD ファイル名に準拠するように名前空間を変更します。
Expand 表3.5 DTD 名前空間マッピングテーブル 以前の 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 に設定する必要があります。
nullSafeGet()およびnullSafeSet()メソッドのUserType署名を更新します。UserTypeクラスのnullSafeGet()およびnullSafeSet()メソッドの署名が Hibernate 4 で変更になりました。これらのメソッドを使用するアプリケーションコードは、新しい署名を使用するように更新する必要があります。詳細は、 「Hibernate 3.3.x アプリケーションの Hibernate 4.x への移行」 を参照してください。
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. JPA/Hibernate 二次キャッシュの Infinispan への置き換え リンクのコピーリンクがクリップボードにコピーされました!
概要
二次キャッシュ(2LC)については、JBoss キャッシュが Infinispan に置き換えられました。これには、persistence.xml ファイルを変更する必要があります。JPA または Hibernate 二次キャッシュを使用しているかどうかによって、構文は若干異なります。これらの例では、Hibernate を使用していることを前提としています。
persistence.xml ファイルで二次キャッシュのプロパティーがどのように指定されるかの例になります。
手順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 ENABLE_SELECTIVEまたはALLの値でshared-cache-modeを指定する必要があります。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 Dependencies: org.infinispan, org.hibernate
Manifest-Version: 1.0 Dependencies: org.infinispan, org.hibernateCopy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.2.11. Hibernate キャッシュプロパティー リンクのコピーリンクがクリップボードにコピーされました!
| プロパティー名 | 説明 |
|---|---|
hibernate.cache.region.factory_class |
カスタム
CacheProvider のクラス名。
|
hibernate.cache.use_minimal_puts |
ブール値。書き込みを最小限に抑えるために 2 次レベルのキャッシュ操作を最適化し、読み取りの頻度を上げます。この設定はクラスター化されたキャッシュで最も便利なもので、Hibernate3 ではクラスター化されたキャッシュ実装に対してデフォルトで有効になっています。
|
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 |
ブール値。Hibernate が、よりヒューマンリーダブルな形式で、2 次レベルのキャッシュにデータを格納するように強制します。
|
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インスタンスを作成します。- EJB、CDI Bean、またはその他の Java EE の注入可能なリソースにValidatorインスタンスを注入します。
ValidatorFactory.usingContext()によって返されるValidatorContextを使用してValidatorインスタンスをカスタマイズできます。この API を使用すると、カスタムMessageInterpolator、TraverableResolver、およびConstraintValidatorFactoryを設定できます。これらのインターフェイスは Bean Validation 仕様で指定され、Hibernate Validator 4 の新機能です。
- 新しい Bean Validation 制約を使用するためのコードの変更Hibernate Validator 4 に移行する際、新しい Bean レベルの検証制約にはコードの変更が必要です。
- Hibernate Validator 4 にアップグレードするには、以下のパッケージの制約を使用する必要があります。
javax.validation.constraintsorg.hibernate.validator.constraints
- Hibernate Validator 3 に存在していた制約はすべて Hibernate Validator 4 で引き続き利用できます。これらを使用するには、指定のクラスをインポートする必要があり、場合によっては、制約パラメーターの名前またはタイプを変更します。
- カスタム制約の使用Hibernate Validator 3 では、
org.hibernate.validator.Validatorインターフェイスを実装するのにカスタム制約が必要でした。Hibernate Validator 4 では、javax.validation.ConstraintValidatorインターフェイスを実装する必要があります。このインターフェイスには、以前のインターフェイスと同じinitialize()メソッドおよびisValid()メソッドが含まれますが、メソッドの署名が変更されました。さらに、Hibernate Validator 4 ではDDLの変更に対応しなくなりました。 - 以下の Hibernate 3.x
Validatorクラスは廃止されました。org.hibernate.validator.NotNullをjavax.validation.constraints.NotNullに置き換えます。org.hibernate.validator.ClassValidatorをjavax.validation.Validator.に置き換えます。org.hibernate.validator.InvalidValueをjavax.validation.Validator.に置き換えます。
詳細は、『Hibernate Valitator Reference Guide』を参照してください。 jboss-ejb3-ext-api-VERSION.jarファイルでは、多くのアノテーションエクステンション API が削除されました。JBoss EAP 6 では必要なくなったためです。たとえば、JBoss EAP 6 は相互互換性を自動的に処理するため、org.jboss.ejb3.annotation.IgnoreDependencyクラスは利用できないか、または不要になりました。
3.2.3. JTS および JTA の変更 リンクのコピーリンクがクリップボードにコピーされました!
3.2.3.1. JBoss Transaction Service 設定の移行 リンクのコピーリンクがクリップボードにコピーされました!
概要
これまでのバージョンの JBoss EAP では、JBoss Transaction Service トランザクションマネージャーは以下の XML ファイルのいずれかで設定されていました。
| JBoss EAP バージョン | 設定ファイル名 |
|---|---|
|
4.2
|
jboss-eap-4.2.0/server/default/conf/jbossjta-properties.xml
|
|
4.3
|
jboss-eap-4.3.0/server/default/conf/jbossjta-properties.xml
|
|
5.2
|
jboss-eap-5.2.0/server/default/conf/jbossts-properties.xml
|
- JBoss EAP 6 には、ノード識別子のデフォルト値が含まれています。これは、単一のJBoss EAP サーバーインスタンスを実行する場合は問題ありませんが、複数のサーバーインスタンスを実行する場合は変更する必要があります。
- JBoss EAP 6 には、デフォルトで JTA トランザクションが有効になっています。JTS トランザクションを設定するには、追加の手順が必要です。
JTA トランザクションのノード識別子設定の移行
JBoss EAP 6 には、ノード識別子のデフォルト設定値が同梱されます。これは、単一のJBoss EAP サーバーインスタンスを実行する場合は問題ありませんが、ノード識別子はすべての JBoss EAP サーバーインスタンスについて一意でなければならないので、複数のサーバーインスタンスを実行する場合は値を変更する必要があります。
jbossts-properties.xml ファイルで設定されていました。
<property name="com.arjuna.ats.arjuna.xa.nodeIdentifier" value=UNIQUE_NODE_ID/>
<property name="com.arjuna.ats.arjuna.xa.nodeIdentifier" value=UNIQUE_NODE_ID/>
transaction サブシステムで設定されます。使用するコマンドは、管理対象ドメインとスタンドアロンサーバーのどちらを実行しているかによって異なります。
/system-property=jboss.tx.node.id:add(value=UNIQUE_NODE_ID)
/subsystem=transactions:write-attribute(name=node-identifier,value="${jboss.tx.node.id}")
reload
/system-property=jboss.tx.node.id:add(value=UNIQUE_NODE_ID)
/subsystem=transactions:write-attribute(name=node-identifier,value="${jboss.tx.node.id}")
reload
/host=master/server-config=server-one/system-property=jboss.tx.node.id:add(boot-time=true,value=UNIQUE_NODE_ID)
/profile=PROFILE_NAME/subsystem=transactions:write-attribute(name=node-identifier,value="${jboss.tx.node.id}")
reload
/host=master/server-config=server-one/system-property=jboss.tx.node.id:add(boot-time=true,value=UNIQUE_NODE_ID)
/profile=PROFILE_NAME/subsystem=transactions:write-attribute(name=node-identifier,value="${jboss.tx.node.id}")
reload
JBoss EAP 6 で JTS トランザクションを有効にするための変更
JBoss EAP 5 では、EAP5_HOME/docs/examples/transactions ディレクトリーにある Ant スクリプトを実行して JTS トランザクションを有効にし、いくつかの手動の手順を実行していました。このスクリプトは、すべての JBoss EAP サーバー設定の jbossts-properties.xml および jacorb.properties ファイルが更新されました。
3.2.4. JSF の変更 リンクのコピーリンクがクリップボードにコピーされました!
3.2.4.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.5. キャッシュの変更 リンクのコピーリンクがクリップボードにコピーされました!
3.2.5.1. JBoss キャッシュの置き換え リンクのコピーリンクがクリップボードにコピーされました!
infinispan サブシステムで設定されます。これらがアプリケーションによって直接使用されることはなく、この目的ではサポートされません。
- リモートクライアント/サーバー
- このモードは、管理、分散、およびクラスター化が可能なデータグリッドサーバーを提供します。アプリケーションは、Hot Rod、memcached または REST クライアント API を使用して、データグリッドサーバーにリモートでアクセスできます。
- ライブラリー
- このモードでは、ユーザーはカスタムランタイム環境をビルドおよびデプロイできます。ライブラリー使用モードは、アプリケーションプロセスの単一のデータグリッドノードをホストし、このノードは他の JVM でホストされるノードへのリモートアクセスが可能です。
3.2.6. Web サービスの変更 リンクのコピーリンクがクリップボードにコピーされました!
3.2.6.1. Web サービスの変更 リンクのコピーリンクがクリップボードにコピーされました!
- JBossWS API の変更
- SPI および Common コンポーネントが、JBossWS 4 でリファクタリングされました。以下の表は、アプリケーションの移行に影響を及ぼす可能性がある API およびパッケージングの変更の一覧です。
Expand 表3.8 JBossWS API の変更 従来の 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 JBossWS Framework org.jboss.wsf.framework.invocation.RecordingServerHandler JBossWS Common org.jboss.ws.common.invocation.RecordingServerHandler - @WebContext アノテーション
- JBossWS 3.4.x では、このアノテーションは JBossWS SPI JAR で
org.jboss.wsf.spi.annotation.WebContextとしてパッケージ化されました。JBossWS 4.0 では、このアノテーションは JBossWS API JAR のorg.jboss.ws.api.annotation.WebContextに移動しました。アプリケーションに廃止された依存関係が含まれる場合、アプリケーションのソースコードのインポートおよび依存関係を置き換え、新しい JBossWS API JAR に対してコンパイルする必要があります。また、後方互換性のない属性にも変更があります。String[] virtualHosts属性がString virtualHostに変更になりました。JBoss EAP 6 では、デプロイメントごとに 1 つの仮想ホストだけを指定できます。複数の Web サービスで@WebContextアノテーションが使用される場合、virtualHost の値はデプロイメントアーカイブで定義されるすべてのエンドポイントで同一である必要があります。 - エンドポイント設定
- JBossWS 4.0 は、ほとんどの Apache CXF モジュールで JBoss Web Services スタックを統合します。インテグレーションレイヤーにより、JAX-WS を含む標準の webservices API を使用できます。また、複雑な設定や構成を必要とせずに JBoss EAP 6 コンテナー上で Apache CFX の高度な機能を使用することもできます。JBoss EAP 6 のドメイン設定の
webserviceサブシステムには事前に定義されたエンドポイント設定が含まれます。また、独自の追加のエンドポイント設定を定義することもできます。@org.jboss.ws.api.annotation.EndpointConfigアノテーションは、指定のエンドポイント設定を参照するために使用されます。JBoss サーバーで web サービスエンドポイントを設定する方法は、JBoss EAP 6 の『開発ガイド』の「『JAX-WS Web Services』」というタイトルの章を参照してください。 - jboss-webservices.xml デプロイメント記述子
- JBossWS 4.0 では、Web サービスを設定するための新しいデプロイメント記述子が導入されました。
jboss-webservices.xmlファイルは指定のデプロイメントに関する追加情報を提供し、廃止されたjboss.xmlファイルを部分的に置き換えます。EJB webservice デプロイメントの場合は、jboss-webservices.xml記述子ファイルの場所としてMETA-INF/ディレクトリーに配置されることが想定されます。POJO および EJB webservice エンドポイントが WAR ファイルにバンドルされている場合には、jboss-webservices.xmlファイルの場所としてWEB-INF/ディレクトリーに配置されることが想定されます。以下は、jboss-webservices.xml記述子ファイルと要素を記述するテーブルの例になります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow Expand 表3.9 jboss-webservice.xml ファイル要素の説明 要素名 説明 context-rootwebservices デプロイメントのコンテキストルートをカスタマイズするために使用されます。config-nameconfig-fileエンドポイントデプロイメントと指定のエンドポイント設定の関連付けに使用されます。エンドポイント設定は、参照される設定ファイルまたはドメイン設定のwebservicesサブシステムに指定されます。プロパティー単純なプロパティー名の値ペアを設定するのに使用し、webservice スタックの動作を設定します。port-componentEJB エンドポイントのターゲット URI をカスタマイズしたり、セキュリティー関連のプロパティーを設定したりするために使用されます。webservice-descriptionwebservice WSDL で公開された場所をカスタマイズしたり上書きしたりするために使用されます。
3.2.6.2. JBoss EAP 6 での Apache Axis の使用 リンクのコピーリンクがクリップボードにコピーされました!
概要
Web サービスアプリケーションの開発およびデプロイには JBoss EAP 6 にバンドルされた JBossWS Apache CXF を使用することを推奨します。JBoss EAP 6 に同梱される JBossWS Apache CXF はサポート対象の設定です。Axis を使用する場合は、このトピックで JBoss EAP 6 での使用方法を説明します。この実装はアプリケーションの一部とみなされており、サポート対象の設定ではない点に注意してください。
手順3.19 Axis を使用するための JBoss EAP の設定
- 最初に、JBoss EAP 6 に同梱される web サービス実装を無効にする必要があります。詳細な手順は、 「JBoss EAP 6 での JBossWS の無効化」 を参照してください。
- アプリケーションを再ビルドし、デプロイします。Axis WS API 実装が Java EE 6 API クラスに正しくアクセスされるはずです。
3.2.6.3. JBoss EAP 6 での JBossWS の無効化 リンクのコピーリンクがクリップボードにコピーされました!
概要
Java Enterprise Edition Specification (Java EE) 6 では、Web サービスアプリケーションの開発およびデプロイに、アプリケーションサーバーが統合された JAX-WS 実装を提供する必要があります。JAX-WS のサポートを提供しないサーブレットコンテナーなど、他のコンテナーから移行するアプリケーションは、独自の JAX-WS 実装とともにパッケージ化される場合があります。JBossWS CXF を使用して独自の JAX-WS 実装をパッケージ化する予定がない場合は、JBoss EAP 6 で webservices サブシステムを無効にすることができます。JBoss EAP 6 に同梱される JBossWS Apache CXF はサポート対象の設定であることに注意してください。その他の実装はアプリケーションの一部とみなされ、サポート対象の設定ではありません。
手順3.20 単一デプロイメントでの JBossWS の無効化
- アプリケーション用の
jboss-deployment-structure.xmlファイルを作成します。- アプリケーションが WAR としてパッケージ化されてデプロイされている場合は、以下の内容で WAR の
META-INF/またはWEB-INF/ディレクトリーに、jboss-deployment-structure.xmlファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - アプリケーションが EAR でパッケージ化されてデプロイされている場合は、以下の例のような内容で EAR の
META-INF/ディレクトリーにjboss-deployment-structure.xmlファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- 通常の方法でアプリケーションをデプロイします。JBossWS がアプリケーションで無効になりました。
手順3.21 サーバーに対する全デプロイメントでの JBossWS の無効化
- JBoss EAP サーバーを停止します。
- 編集するため、サーバー設定ファイルを開きます。スタンドアロンサーバーの場合には、これは
EAP_HOME/standalone/configuration/standalone.xmlファイルです。管理対象ドメインの場合には、これはEAP_HOME/domain/configuration/domain.xmlファイルです。 org.jboss.as.webservices拡張を見つけ、コメントアウトまたは削除します。webservicesサブシステムプロファイルを見つけ、コメントアウトまたは削除します。- 以下は、
standalone.xmlファイルに加えられた変更の例になります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.7. JAX-RS および RESTEasy の変更 リンクのコピーリンクがクリップボードにコピーされました!
3.2.7.1. JAX-RS および RESTEasy の変更の設定 リンクのコピーリンクがクリップボードにコピーされました!
web.xml ファイルから既存の RESTEasy 設定をすべて削除し、これを以下の 3 つのオプションのいずれかに置き換える必要があります。
- サブクラス
javax.ws.rs.core.Applicationで、@ApplicationPathアノテーションを使用します。これは最も簡単なオプションで、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。web.xmlファイルを使用して JAX-RS マッピングを設定します。@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.8. LDAP セキュリティーレルムの変更 リンクのコピーリンクがクリップボードにコピーされました!
3.2.8.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.9. HornetQ の変更 リンクのコピーリンクがクリップボードにコピーされました!
3.2.9.1. HornetQ および NFS リンクのコピーリンクがクリップボードにコピーされました!
- Red Hat Enterprise Linux NFS クライアントのキャッシュは無効にする必要があります。
libaio がインストールされている必要があります。
3.2.9.2. 既存の JMS メッセージを JBoss EAP 6 に移行するような JMS ブリッジの設定 リンクのコピーリンクがクリップボードにコピーされました!
3.2.9.3. JMS ブリッジの作成 リンクのコピーリンクがクリップボードにコピーされました!
概要
JMS ブリッジはソースの JMS キューまたはトピックからメッセージを消費し、通常は異なるサーバーにあるターゲット JMS キューまたはトピックへ送信します。JMS 1.1 に準拠する JMS サーバーの間でメッセージをブリッジするために使用できます。送信元および宛先の JMS リソースは、JNDI を使用してルックアップされ、JNDI ルックアップのクライアントクラスはモジュールでバンドルされる必要があります。モジュール名は JMS ブリッジ設定で宣言されます。
手順3.22 JMS ブリッジの作成
- ソース JBoss EAP 5.x サーバーでのブリッジの設定リリース間のクラスで競合を回避するには、以下の手順にしたがって JBoss EAP 5.x で JMS ブリッジを設定する必要があります。SAR ディレクトリーおよびブリッジの名前は任意であり、必要に応じて変更できます。
- SAR を含む JBoss EAP 5 デプロイメントディレクトリーにサブディレクトリーを作成します(例:
EAP5_HOME/server/PROFILE_NAME/deploy/myBridge.sar/)。 EAP5_HOME/server/PROFILE_NAME/deploy/myBridge.sar/にMETA-INFという名前のサブディレクトリーを作成します。EAP5_HOME/server/PROFILE_NAME/deploy/myBridge.sar/META-INF/ディレクトリーにjboss-service.xmlファイルを作成します。以下の例のような情報が含まれるはずです。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記SAR に分離されたクラスローダーが含まれるように、load-repository要素が存在します。また、JNDI ルックアップとブリッジターゲットの両方に、パスワードが jbosspass のユーザー jbossuser のセキュリティークレデンシャルが含まれていることに注意してください。これは、JBoss EAP 6 はデフォルトでセキュアであるためです。パスワード「jbosspass」のユーザー「jbosspass」が、EAP_HOME/bin/add_user.shスクリプトを使用してguestロールで、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.jarorg/hornetq/main/hornetq-jms-VERSION_NUMBER.jarorg/jboss/ejb-client/main/jboss-ejb-client-VERSION_NUMBER.jarorg/jboss/logging/main/jboss-logging-VERSION_NUMBER.jarorg/jboss/logmanager/main/jboss-logmanager-VERSION_NUMBER.jarorg/jboss/marshalling/main/jboss-marshalling-VERSION_NUMBER.jarorg/jboss/marshalling/river/main/jboss-marshalling-river-VERSION_NUMBER.jarorg/jboss/remote-naming/main/jboss-remote-naming-VERSION_NUMBER.jarorg/jboss/remoting3/main/jboss-remoting-VERSION_NUMBER.jarorg/jboss/sasl/main/jboss-sasl-VERSION_NUMBER.jarorg/jboss/netty/main/netty-VERSION_NUMBER.jarorg/jboss/remoting3/remote-jmx/main/remoting-jmx-VERSION_NUMBER.jarorg/jboss/xnio/main/xnio-api-VERSION_NUMBER.jarorg/jboss/xnio/nio/main.xnio-nio-VERSION_NUMBER.jar
注記javax API クラスは JBossEAP 5.x のクラスと競合するため、EAP_HOME/bin/client/jboss-client.jarは単純にコピーしないでください。
- 宛先 JBoss EAP 6 サーバー上のブリッジの設定JBoss EAP 6.1 以降では、JMS ブリッジを使用して JMS 1.1 準拠のサーバーからメッセージをブリッジできます。ソースおよびターゲットの JMS リソースは JNDI を使用してルックアップされるため、ソースメッセージングプロバイダーまたはメッセージブローカーの JNDI ルックアップクラスを JBoss モジュールにバンドルする必要があります。次の手順では、架空の MyCustomMQ メッセージブローカーを例として使用します。
- メッセージプロバイダーの JBoss モジュールを作成します。
- 新しいモジュールの
EAP_HOME/modules/system/layers/base/の下にディレクトリー構造を作成します。main/サブディレクトリーには、クライアント JAR およびmodule.xmlファイルが含まれます。MyCustomMQ メッセージングプロバイダー用に作成されたディレクトリー構造の例:EAP_HOME/modules/system/layers/base/org/mycustommq/main/ 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 リソースの名前を提供します。ユーザーとパスワードの認証情報が指定されている場合は、JMS 接続の作成時に引数として渡されます。MyCustomMQ メッセージングプロバイダーに設定されたjms-bridge要素の例を以下に示します。上記の例では、JNDI プロパティーはCopy to Clipboard Copied! Toggle word wrap Toggle overflow ソースのコンテキスト要素で定義されています。上記のtargetの例のように、context要素を省略すると、JMS リソースはローカルインスタンスでルックアップされます。
3.2.9.4. HornetQ を JMS プロバイダーとして使用するためのアプリケーションの移行 リンクのコピーリンクがクリップボードにコピーされました!
前提条件
- クライアントとサーバーをシャットダウンしておく。
- JBoss Messaging データのバックアップコピーを作成しておく。メッセージデータは、
JBM_で始まるテーブルのデータベースに保存されます。
手順3.23 プロバイダーを HornetQ に変更します。
- 設定を転送します。既存の JBoss Messaging 設定を JBoss EAP 6 設定に転送します。以下の設定は、JBoss Messaging サーバー上のデプロイメント記述子にあります。
- 接続ファクトリーサービスの設定この設定では、JBoss Messaging サーバーでデプロイされた JMS 接続ファクトリーを記述します。JBoss Messaging は、アプリケーションサーバーのデプロイメントディレクトリーにある
connection-factories-service.xmlという名前のファイルに接続ファクトリーを設定します。 - 宛先設定この設定では、JBoss Messaging サーバーでデプロイされた JMS キューとトピックについて記述します。デフォルトでは、JBoss Messaging は、アプリケーションサーバーのデプロイメントディレクトリーにある
destinations-service.xmlという名前のファイルに宛先を設定します。 - メッセージブリッジサービスの設定この設定には、JBoss Messaging サーバーでデプロイされたブリッジサービスが含まれます。デフォルトではブリッジはデプロイされないため、デプロイメントファイルの名前は JBoss Messaging のインストールによって異なります。
- アプリケーションコードを変更します。アプリケーションコードで標準の JMS を使用する場合は、コードの変更は必要ありません。ただし、 「移植可能な EJB JNDI 名」 セクションで説明されているように、新しい標準化された JNDI 名前空間を使用するため、アプリケーションを変更する必要があります。アプリケーションが JBoss Messaging 固有の機能を使用する場合は、HornetQ で利用可能な同等の機能を使用するように、コードを変更する必要があります。以下は、
InitialContextを作成し、JBoss EAP 6 でキューを検索する JMS クライアントの例です。Copy to Clipboard Copied! Toggle word wrap Toggle overflow アプリケーションがクラスターに接続する場合は、クラスタリングセマンティクスで HornetQ のドキュメントを慎重に確認する必要があります。クラスタリングは JMS 仕様の範囲外で、HornetQ と JBoss Messaging はクラスタリング機能の実装ごとに大きく異なるアプローチをとっていました。HornetQ でメッセージングを設定する方法は、以下を参照してください。 「HornetQ でのメッセージングの設定」 - 既存のメッセージを移行します。JMS ブリッジを使用して、JBoss Messaging データベースのメッセージを HornetQ ジャーナルに移動します。JMS ブリッジの設定手順は、 「既存の JMS メッセージを JBoss EAP 6 に移行するような JMS ブリッジの設定」 を参照してください。
3.2.9.5. HornetQ でのメッセージングの設定 リンクのコピーリンクがクリップボードにコピーされました!
standalone.xml または domain.xml 設定ファイルを手動で編集しなくても、これらの管理ツールのいずれかで永続的な変更を行うことができます。ただし、デフォルトの設定ファイルのメッセージングコンポーネントを理解すると便利です。ここでは、管理ツールを使用したドキュメントの例では、参照用の設定ファイルスニペットが提供されます。
3.2.9.6. JMS 宛先の移行 リンクのコピーリンクがクリップボードにコピーされました!
jbossmq-destinations-service.xml または destination-service. xml ファイルの <mbeans> 要素に設定されていました。JBoss EAP 6 では JBoss Messaging が HornetQ に置き換えられたため、JMS 宛先はサーバー設定ファイルの messaging サブシステムに設定されるようになりました。
例3.3 JBoss EAP 4.2 宛先設定の例
jbossmq-destinations-service.xml ファイルに設定された JBoss MQ 宛先の例になります。JNDIName 属性が指定されていない場合、値はデフォルトで例に示されている名前に設定されます。
例3.4 JBoss EAP 5 宛先設定の例
-service.xml ファイルに設定された JBoss Messaging 宛先の例になります。JNDIName attribute が指定されていない場合、値はデフォルトで例に示されている名前に設定されます。
例3.5 JBoss EAP 6 宛先設定の例
messaging サブシステムで設定された JMS 宛先の例になります。JBoss EAP 6 では、entry 要素はキューを JNDI にバインドするために使用される名前を設定します。
3.2.10. クラスタリングの変更 リンクのコピーリンクがクリップボードにコピーされました!
3.2.10.1. クラスタリング向けにアプリケーションに変更を加える。 リンクのコピーリンクがクリップボードにコピーされました!
クラスタリングが有効な状態で JBoss EAP 6 を起動
JBoss EAP 5.x でクラスタリングを有効にするには、allプロファイルまたはその派生を使用してサーバーインスタンスを起動する必要があります。EAP5_HOME/bin/run.sh -c all
$ EAP5_HOME/bin/run.sh -c allCopy 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 スタンドアロンサーバーのクラスター化の有効化
スタンドアロンサーバーでクラスター化を有効にするには、以下のように適切な設定ファイルを使用してサーバーを起動します。EAP_HOME/bin/standalone.sh --server-config=standalone-ha.xml -Djboss.node.name=UNIQUE_NODE_NAME
$ EAP_HOME/bin/standalone.sh --server-config=standalone-ha.xml -Djboss.node.name=UNIQUE_NODE_NAMECopy to Clipboard Copied! Toggle word wrap Toggle overflow
バインドアドレスを指定します。
JBoss EAP 5.x では、通常、以下のように-bコマンドライン引数を使用してクラスタリングに使用されるバインドアドレスを指定します。EAP5_HOME/bin/run.sh -c all -b 192.168.0.2
$ EAP5_HOME/bin/run.sh -c all -b 192.168.0.2Copy to Clipboard Copied! Toggle word wrap Toggle overflow JBoss EAP 6 は、standalone.xmlファイル、domain.xmlファイル、およびhost.xmlファイルの<interfaces>要素に含まれる IP アドレスとインターフェースにソケットをバインドします。JBoss EAP に同梱される標準設定には、2 つのインターフェース設定が含まれています。これらのインターフェース設定では、システムプロパティーCopy to Clipboard Copied! Toggle word wrap Toggle overflow jboss.bind.address.managementおよびjboss.bind.addressの値を使用します。これらのシステムプロパティーが設定されていない場合は、デフォルトの127.0.0.1が各値に使用されます。また、サーバーの起動時にバインドアドレスをコマンドライン引数として指定したり、JBoss EAP 6 サーバー設定ファイル内で明示的に定義したりできます。- JBoss EAP スタンドアロンサーバーの起動時にコマンドラインで bind 引数を指定します。以下は、スタンドアロンサーバーのコマンドラインでバインドアドレスを指定する方法の例になります。
EAP_HOME/bin/standalone.sh -Djboss.bind.address=127.0.0.1
EAP_HOME/bin/standalone.sh -Djboss.bind.address=127.0.0.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記-bのショートカットである-Djboss.bind.address=127.0.0.1引数を使用することもできます。EAP_HOME/bin/standalone.sh -b=127.0.0.1
EAP_HOME/bin/standalone.sh -b=127.0.0.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow JBoss EAP 5 構文の形式は引き続きサポートされます。EAP_HOME/bin/standalone.sh -b 127.0.0.1
EAP_HOME/bin/standalone.sh -b 127.0.0.1Copy to Clipboard Copied! Toggle word wrap Toggle overflow -b引数は、パブリックインターフェースのみを変更することに注意してください。管理インターフェースには影響しません。 - サーバー設定ファイルにバインドアドレスを指定します。管理対象ドメインで実行されているサーバーの場合は、
domain/configuration/host.xmlファイルにバインドアドレスを指定します。スタンドアロンサーバーの場合は、standalone-ha.xmlファイルにバインドアドレスを指定します。以下の例では、publicインターフェースはha-socketsソケットバインディンググループ内のすべてのソケットのデフォルトインターフェースとして指定されます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow <socket-binding-groups> <socket-binding-group name="ha-sockets" default-interface="public"> <!-- ... --> </socket-binding-group> </socket-binding-groups><socket-binding-groups> <socket-binding-group name="ha-sockets" default-interface="public"> <!-- ... --> </socket-binding-group> </socket-binding-groups>Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記設定ファイルのシステムプロパティーではなく、ハードコーディングされた値としてバインドアドレスを指定した場合、コマンドラインの引数で上書きすることはできません。
mod_jk および mod_proxy をサポートする
jvmRouteの設定JBoss EAP 5 では、Web サーバーjvmRouteはserver.xmlファイルのプロパティーを使用して設定されます。JBoss EAP 6 では、以下のようにinstance-id属性を使用してサーバー設定ファイルの web サブシステムにjvmRoute属性が設定されます。上記の {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 では、以下のようにコマンドライン引数-uおよび-mを使用して、クラスター内通信に使用されるマルチキャストアドレスおよびポートを指定できます。EAP5_HOME/bin/run.sh -c all -u 228.11.11.11 -m 45688
$ EAP5_HOME/bin/run.sh -c all -u 228.11.11.11 -m 45688Copy to Clipboard Copied! Toggle word wrap Toggle overflow 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
$ EAP_HOME/bin/domain.sh -Djboss.mcast.addr=228.11.11.11 -Djboss.mcast.port=45688Copy to Clipboard Copied! Toggle word wrap Toggle overflow 別のプロトコルスタックを使用する
JBoss EAP 5.x では、jboss.default.jgroups.stackシステムプロパティーを使用して、すべてのクラスタリングサービスに使用されるデフォルトのプロトコルスタックを操作できます。EAP5_HOME/bin/run.sh -c all -Djboss.default.jgroups.stack=tcp
$ EAP5_HOME/bin/run.sh -c all -Djboss.default.jgroups.stack=tcpCopy to Clipboard Copied! Toggle word wrap Toggle overflow JBoss EAP 6 では、デフォルトのプロトコルスタックはdomain.xmlまたはstandalone-ha.xml内の JGroups サブシステムによって定義されます。<subsystem xmlns="urn:jboss:domain:jgroups:1.0" default-stack="udp"> <stack name="udp"> <!-- ... --> </stack> </subsystem><subsystem xmlns="urn:jboss:domain:jgroups:1.0" default-stack="udp"> <stack name="udp"> <!-- ... --> </stack> </subsystem>Copy to Clipboard Copied! Toggle word wrap Toggle overflow バウンドレプリケーションの置き換え
JBoss EAP 5.x では JBoss Cache Buddy Replication を使用して、クラスターのすべてのインスタンスへのデータのレプリケーションが抑制されました。JBoss EAP 6 では、Buddy Replication は Infinispan の分散キャッシュ(DISTモードとも呼ばれる)に置き換えられました。Distribution(分散)は強力なクラスタリングモードで、より多くのサーバーがクラスターに追加されるため、Infinispan は直線的にスケーリングできます。以下は、DIST キャッシュモードを使用するようにサーバーを設定する方法の例になります。- コマンドラインを開き、HA または Full Profile のいずれかでサーバーを起動します。以下に例を示します。
EAP_HOME/bin/standalone.sh -c standalone-ha.xml
EAP_HOME/bin/standalone.sh -c standalone-ha.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 別のコマンドラインを開き、管理 CLI に接続します。
- Linux の場合は、コマンドラインで以下を入力します。
EAP_HOME/bin/jboss-cli.sh --connect
$ EAP_HOME/bin/jboss-cli.sh --connectCopy to Clipboard Copied! Toggle word wrap Toggle overflow - Windows の場合は、コマンドラインで以下を入力します。
C:\>EAP_HOME\bin\jboss-cli.bat --connect
C:\>EAP_HOME\bin\jboss-cli.bat --connectCopy to Clipboard Copied! Toggle word wrap Toggle overflow
次の応答が表示されるはずです。Connected to standalone controller at localhost:9999
Connected to standalone controller at localhost:9999Copy 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) reloadCopy 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サブシステムのdist<distributed-cache>要素を変更します。<cache-container>詳細は、カスタマーポータル https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/?version=6.4 の JBoss EAP 6 の 『『開発ガイド』』 の「 『Web アプリケーションでのクラスタリング』 」の章を参照してください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.10.2. HA シングルトンの実装 リンクのコピーリンクがクリップボードにコピーされました!
概要
以下の手順は、SingletonService デコレーターでラップされ、クラスター全体のシングルトンサービスとして使用されるサービスをデプロイする方法を示しています。サービスはスケジュールされたタイマーを有効にします。これはクラスター内で 1 回のみ起動します。
手順3.24 HA シングルトンサービスの実装
- HA シングルトンサービスアプリケーションを記述します。以下は、シングルトンサービスとしてデプロイされる
SingletonServiceデコレーターでラップされるサービスの簡単な例です。完全な例は、Red Hat JBoss Enterprise Application Platform 6 に同梱されるcluster-ha-singletonクイックスタートにあります。このクイックスタートには、アプリケーションをビルドおよびデプロイするためのすべての手順が含まれます。- サービスを作成します。サービスの例を以下に示します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow サービスをクラスター化されたシングルトンとしてインストールする activator を作成します。以下のリストは、HATimerServiceをクラスター化されたシングルトンサービスとしてインストールする Service Activator の例です。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 注記上記の例は、JBoss EAP プライベート API の一部であるorg.jboss.as.clustering.singleton.SingletonServiceクラスを使用します。パブリック API は JBoss EAP 7 リリースで利用でき、プライベートクラスは非推奨になりましたが、これらのクラスは JBoss EAP 6.x リリースサイクルの間維持および利用可能になります。- ServiceActivator ファイルの作成アプリケーションの
resources/META-INF/services/ディレクトリーにorg.jboss.msc.service.ServiceActivatorという名前のファイルを作成します。直前の手順で作成した ServiceActivator クラスの完全修飾名が含まれる行を追加します。org.jboss.as.quickstarts.cluster.hasingleton.service.ejb.HATimerServiceActivator
org.jboss.as.quickstarts.cluster.hasingleton.service.ejb.HATimerServiceActivatorCopy to Clipboard Copied! Toggle word wrap Toggle overflow - クラスター全体のシングルトンタイマーとして使用するタイマーを実装するシングルトン Bean を作成します。このシングルトン Bean はリモートインターフェースを持たないため、アプリケーションの別の EJB からローカルインターフェースを参照しないでください。これにより、クライアントまたは他のコンポーネントによるルックアップが阻止され、SingletonService がシングルトンを完全に制御できるようになります。
- Scheduler インターフェースの作成
Copy to Clipboard Copied! Toggle word wrap Toggle overflow - クラスター全体のシングルトンタイマーを実装するシングルトン Bean を作成します。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- クラスタリングを有効にして各 JBoss EAP 6 インスタンスを起動します。スタンドアロンサーバーでクラスター化を有効にするには、各インスタンスの一意のノード名とポートオフセットを使用して、
HAプロファイルで各サーバーを起動する必要があります。- Linux の場合は、以下のコマンド構文を使用してサーバーを起動します。
EAP_HOME/bin/standalone.sh --server-config=standalone-ha.xml -Djboss.node.name=UNIQUE_NODE_NAME -Djboss.socket.binding.port-offset=PORT_OFFSET
EAP_HOME/bin/standalone.sh --server-config=standalone-ha.xml -Djboss.node.name=UNIQUE_NODE_NAME -Djboss.socket.binding.port-offset=PORT_OFFSETCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例3.6 Linux で複数のスタンドアロンサーバーを起動する
EAP_HOME/bin/standalone.sh --server-config=standalone-ha.xml -Djboss.node.name=node1 EAP_HOME/bin/standalone.sh --server-config=standalone-ha.xml -Djboss.node.name=node2 -Djboss.socket.binding.port-offset=100
$ EAP_HOME/bin/standalone.sh --server-config=standalone-ha.xml -Djboss.node.name=node1 $ EAP_HOME/bin/standalone.sh --server-config=standalone-ha.xml -Djboss.node.name=node2 -Djboss.socket.binding.port-offset=100Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Microsoft Windows の場合は、以下のコマンド構文を使用してサーバーを起動します。
EAP_HOME\bin\standalone.bat --server-config=standalone-ha.xml -Djboss.node.name=UNIQUE_NODE_NAME -Djboss.socket.binding.port-offset=PORT_OFFSET
EAP_HOME\bin\standalone.bat --server-config=standalone-ha.xml -Djboss.node.name=UNIQUE_NODE_NAME -Djboss.socket.binding.port-offset=PORT_OFFSETCopy to Clipboard Copied! Toggle word wrap Toggle overflow 例3.7 Microsoft Windows で複数のスタンドアロンサーバーを起動する
C:> EAP_HOME\bin\standalone.bat --server-config=standalone-ha.xml -Djboss.node.name=node1 C:> EAP_HOME\bin\standalone.bat --server-config=standalone-ha.xml -Djboss.node.name=node2 -Djboss.socket.binding.port-offset=100
C:> EAP_HOME\bin\standalone.bat --server-config=standalone-ha.xml -Djboss.node.name=node1 C:> EAP_HOME\bin\standalone.bat --server-config=standalone-ha.xml -Djboss.node.name=node2 -Djboss.socket.binding.port-offset=100Copy to Clipboard Copied! Toggle word wrap Toggle overflow
注記コマンドライン引数を使用しない場合は、各サーバーインスタンスのstandalone-ha.xmlファイルを設定して、別のインターフェースにバインドすることができます。 - サーバーのアプリケーションのデプロイ以下の Maven コマンドは、デフォルトポートで実行しているスタンドアロンサーバーにアプリケーションをデプロイします。
mvn clean install jboss-as:deploy
mvn clean install jboss-as:deployCopy to Clipboard Copied! Toggle word wrap Toggle overflow 追加のサーバーにデプロイするには、サーバー名を渡します。別のホストにある場合は、ホスト名とポート番号をコマンドラインに渡します。mvn clean package jboss-as:deploy -Djboss-as.hostname=localhost -Djboss-as.port=10099
mvn clean package jboss-as:deploy -Djboss-as.hostname=localhost -Djboss-as.port=10099Copy to Clipboard Copied! Toggle word wrap Toggle overflow Maven の設定やデプロイメントの詳細については、JBoss EAP 6 に同梱されるcluster-ha-singletonクイックスタートを参照してください。
3.2.11. サービススタイルのデプロイメントの変更 リンクのコピーリンクがクリップボードにコピーされました!
3.2.11.1. サービススタイルのデプロイメントを使用するアプリケーションの更新 リンクのコピーリンクがクリップボードにコピーされました!
概要
MBean は、以前のバージョンの Red Hat JBoss Enterprise Application Platform のコアアーキテクチャーの一部でした。JBoss 固有の jboss-service.xml および jboss-beans.xml サービススタイル記述子を使用する JBoss Service Archive(SAR)デプロイメントは、JBoss Beans に基づいて MBean を作成するためにアプリケーションサーバーによって使用されるものです。内部アーキテクチャーは JBoss EAP 6 で変更になり、MBean JMX アーキテクチャーを基にしなくなります。MBean はコアアーキテクチャーの一部ではなくなりました。管理 API のラッパーになりました。
jboss-service.xml ファイルで定義された他の MBean のみです。
サービススタイルのデプロイメントを @Singleton に置き換えます。
以前のバージョンの JBoss EAP で使用されていた JBoss Service Archive(SAR)およびサービススタイル記述子は Java EE 6 仕様の一部ではないため、JBoss EAP 6 で使用することは推奨されません。アプリケーションを Java EE 6 仕様に変更することが推奨されます。MBean シングルトンの場合は、JBoss EAP プロプライエタリーの *-beans.xml ファイルおよび *-service.xml ファイルの代わりに移植可能な Java EE 6 @Singleton を使用するようにコードを変更する必要があります。MBean サービスの作成およびデプロイに関する詳細は、カスタマーポータル https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/?version=6.4 の 『JBoss EAP 6 の 『『開発ガイド』』 の「JBoss MBean』 サービス」の章を参照してください。
サービススタイルの記述子の変更
標準の Java EE 6 EJB @Singleton を使用するためにコードを変更しない場合、JBoss EAP 5 と JBoss EAP 6 の間で jboss-beans.xml ファイルおよび jboss-service.xml ファイルが変更されたことに注意してください。
-
jboss-beans.xmlファイルの XML 宣言は JBoss EAP 5 と JBoss EAP 6 との間で変更になりました。 - 以下は、JBoss EAP 5 の
jboss-beans.xmlファイルの例になります。以下は、JBoss EAP 6 のCopy to Clipboard Copied! Toggle word wrap Toggle overflow jboss-beans.xmlファイルの例になります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - JBoss EAP 5 と JBoss EAP 6 の間で
jboss-service.xmlファイルの DTD が変更になりました。 - 以下は、JBoss EAP 5 の
jboss-service.xmlファイルの例になります。以下は、JBoss EAP 6 のCopy to Clipboard Copied! Toggle word wrap Toggle overflow jboss-service.xmlファイルの例になります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.12. リモート呼び出しの変更 リンクのコピーリンクがクリップボードにコピーされました!
3.2.12.1. リモート呼び出しを JBoss EAP 6 に作成する JBoss EAP 5 のデプロイされたアプリケーションの移行 リンクのコピーリンクがクリップボードにコピーされました!
概要
JBoss EAP 5 では、EJB リモートインターフェースは JNDI でバインドされ、デフォルトではローカルインターフェースの EJB_NAME/local でバインドされ、リモートインターフェースの EJB_NAME/remote がバインドされました。その後、クライアントアプリケーションは、EJB_NAME/remote を使用して Bean を検索しました。
ejb:BEAN_REFERENCE を使用するよう既存のコードを変更できます。
ejb:BEAN_REFERENCE 構文は以下のようになります。
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:BEAN_REFERENCE 構文は以下のようになります。
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-ejb-remote-app.jar にデプロイされたことを仮定するため、モジュール名は jboss-ejb-remote-app になります。<distinct-name>- EJB の任意の一意の名前。この例では、別の名前を使用しないため、空の文字列を使用します。<bean-name>- デフォルトでは、Bean 実装クラスのシンプルなクラス名です。<fully-qualified-classname-of-the-remote-interface>- リモートビューの完全修飾クラス名。
クライアントコードの更新
以下のクライアントコードの例では、以下のステートレス EJB を JBoss EAP 6 サーバーにデプロイしていることを前提としています。@Remote アノテーションを使用して Bean のリモートビューを公開することに注意してください。
例3.8 ステートレスセッション Bean コードの例
InitialContext を作成し、EJB を検索しました。
例3.9 JBoss EAP 5 クライアントの例
Hashtable を作成し、Bean 参照のプロパティーを設定します。以下は、クライアントルックアップおよび呼び出しの例です。
例3.10 JBoss EAP 6 のステートレスクライアントの例
例3.11 JBoss EAP 6 のステートフルクライアントの例
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.12.2. JNDI を使用したリモートによるセッション Bean の呼び出し リンクのコピーリンクがクリップボードにコピーされました!
ejb-remote クイックスタートには、この機能を実証する作業用の Maven プロジェクトが含まれています。クイックスタートには、デプロイするセッション Bean とリモートクライアントの両方用のプロジェクトが含まれます。以下のコードサンプルは、リモートクライアントプロジェクトから取得されます。
前提条件
- 使用できる Maven プロジェクトがすでに作成されている必要があります。
- JBoss EAP 6 Maven リポジトリーの設定はすでに追加されています。
- 呼び出すセッション Bean はすでにデプロイされています。
- デプロイされたセッション Bean はリモートビジネスインターフェースを実装します。
- セッション Bean のリモートビジネスインターフェースは、Maven 依存関係として利用できます。リモートビジネスインターフェースが JAR ファイルとしてのみ利用できる場合は、JAR を Maven リポジトリーにアーティファクトとして追加することが推奨されます。方向については、install:install-file ゴールの Maven ドキュメントを参照してください。 http://maven.apache.org/plugins/maven-install-plugin/usage.html
- セッション 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行のコメントを解除します。コンテナーの Remoting インターフェースは、同じポートを使用したセキュアな接続およびセキュアでない接続をサポートします。- リモートビジネスインターフェースの依存関係の追加セッション Bean のリモートビジネスインターフェースの
pom.xmlに Maven 依存関係を追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
手順3.26 JNDI と Bean の Invoke メソッドを使用した Bean プロキシーの取得
- チェックされた例外の処理以下のコード(
InitialContext()およびlookup())で使用される 2 つのメソッドには、javax.naming.NamingException型のチェック済み例外があります。これらのメソッド呼び出しは、NamingExceptionをキャッチする try/catch ブロック、またはNamingExceptionのスローに宣言されているメソッドに囲む必要があります。ejb-remoteクイックスタートは 2 番目の手法を使用します。 - JNDI コンテキストの作成JNDI Context オブジェクトは、サーバーからリソースを要求するメカニズムを提供します。以下のコードを使用して 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-ejb-remote-server-side//CalculatorBean!" + RemoteCalculator.class.getName());final RemoteCalculator statelessRemoteCalculator = (RemoteCalculator) context.lookup( "ejb:/jboss-ejb-remote-server-side//CalculatorBean!" + RemoteCalculator.class.getName());Copy to Clipboard Copied! Toggle word wrap Toggle overflow セッション Bean の JNDI 名は、特別な構文を使用して定義されます。詳細は、「EJB JNDI 命名リファレンス」 を参照してください。 - メソッドを呼び出すプロキシー Bean オブジェクトがあると、リモートビジネスインターフェースに含まれるメソッドを呼び出すことができます。
int a = 204; int b = 340; System.out.println("Adding " + a + " and " + b + " via the remote stateless calculator deployed on the server"); int sum = statelessRemoteCalculator.add(a, b); System.out.println("Remote calculator returned sum = " + sum);int a = 204; int b = 340; System.out.println("Adding " + a + " and " + b + " via the remote stateless calculator deployed on the server"); int sum = statelessRemoteCalculator.add(a, b); System.out.println("Remote calculator returned sum = " + sum);Copy to Clipboard Copied! Toggle word wrap Toggle overflow プロキシー Bean はメソッド呼び出しリクエストをサーバーのセッション Bean に渡します。結果はプロキシー Bean に返され、呼び出し元に返されます。プロキシー Bean とリモートセッション Bean 間の通信は、呼び出し元に対して透過的です。
3.2.12.3. EJB JNDI 命名リファレンス リンクのコピーリンクがクリップボードにコピーされました!
ejb:<appName>/<moduleName>/<distinctName>/<beanName>!<viewClassName>?stateful
ejb:<appName>/<moduleName>/<distinctName>/<beanName>!<viewClassName>?stateful
<appName>- セッション Bean の JAR ファイルがエンタープライズアーカイブ(EAR)内にデプロイされた場合、これはその EAR の名前になります。デフォルトでは、EAR の名前は
.ear接尾辞を含まないファイル名です。アプリケーション名はapplication.xmlファイルで上書きすることもできます。セッション Bean が EAR にデプロイされていない場合は、これを空白のままにしておきます。 <moduleName>- モジュール名は、セッション Bean がデプロイされる JAR ファイルの名前です。デフォルトでは、JAR ファイルの名前は、
.jar接尾辞を含まないファイル名です。モジュール名は JAR のejb-jar.xmlファイルで上書きすることもできます。 <distinctName>- JBoss EAP 6 では、各デプロイメントで任意の一意の名前を指定できます。デプロイメントに一意の名前がない場合は、これを空白のままにします。
<beanName>- Bean 名は、呼び出されるセッション Bean のクラス名です。
<viewClassName>- view クラス名は、リモートインターフェースの完全修飾クラス名です。これには、インターフェースのパッケージ名が含まれます。
?stateful- JNDI 名がステートフルセッション Bean を参照する場合は、
?statefulサフィックスが必要です。他の Bean タイプには含まれません。
3.2.12.4. EJB 非同期メソッド呼び出しの移行 リンクのコピーリンクがクリップボードにコピーされました!
概要
EJB 3.1 仕様では、非同期メソッド呼び出しを行う機能が導入されました。この機能の導入前に、一部のアプリケーションサーバーはプロプライエタリーの非同期機能を提供していました。JBoss EAP 4.x は org.jboss.ejb3.asynchronous パッケージでクラスを提供し、JBoss EAP 5.x はこの目的のために org.jboss.ejb3.common.proxy.plugins.async.AsyncUtils クラスを提供していました。これらのクラスは JBoss EAP 6 ではサポートされず、置き換える必要があります。以下の例は、JBoss EAP 6 で非同期メソッド呼び出しを行う方法を示しています。
手順3.27 非同期セッション Bean とクライアントの作成
- 非同期セッション Bean メソッドを作成します。以下の例では、
sayHelloAsync()メソッドは@Asynchronousアノテーションを使用して非同期としてマークされます。型Stringで、必要なFutureクラス実装を返します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - クライアントコードを作成します。利用可能な
Future.get()メソッドの 1 つを使用して EJB を検索し、非同期メソッドを呼び出します。以下の例では、待機時間を timeout 引数および unit 引数で指定された値に制限します。Future<String> future = ejbObject.sayHelloAsync(); String response = future.get(timeout, unit);
Future<String> future = ejbObject.sayHelloAsync(); String response = future.get(timeout, unit);Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.13. 「EJB Changes」 リンクのコピーリンクがクリップボードにコピーされました!
3.2.13.1. ステートフル EJB キャッシュ設定の移行 リンクのコピーリンクがクリップボードにコピーされました!
jboss.xml ファイルの container-cache-conf 要素を使用して設定されます。以下の例は、JBoss EAP 5 におけるステートフルキャッシュ設定を示しています。
ejb3 サブシステムに設定されます。詳細な手順は、「ステートフルセッション Bean キャッシュの設定」 を参照してください。この手順では、JBoss EAP 5 で指定された stateful-timeout に置き換わる <max-bean-age> の設定方法も説明します。
3.2.13.2. ステートフルセッション Bean キャッシュの設定 リンクのコピーリンクがクリップボードにコピーされました!
ejb3 サブシステムに設定されます。以下の手順では、ステートフル EJB キャッシュおよびステートフルタイムアウトを設定する方法を説明します。
手順3.28 ステートフル EJB キャッシュの設定
- サーバー設定ファイルの
ejb3サブシステムで<caches>要素を見つけます。<cache>要素を追加します。以下の例では、「my=cache」という名前のキャッシュを作成します。<cache name="my-cache" passivation-store-ref="my-cache-file" aliases="my-custom-cache"/>
<cache name="my-cache" passivation-store-ref="my-cache-file" aliases="my-custom-cache"/>Copy to Clipboard Copied! Toggle word wrap Toggle overflow - サーバー設定ファイルの
ejb3サブシステムで<passivation-stores>要素を見つけます。前のステップで定義したキャッシュ用に<file-passivation-store>を作成します。<file-passivation-store name="my-cache-file" idle-timeout="1260" idle-timeout-unit="SECONDS" max-size="200"/>
<file-passivation-store name="my-cache-file" idle-timeout="1260" idle-timeout-unit="SECONDS" max-size="200"/>Copy to Clipboard Copied! Toggle word wrap Toggle overflow ejb3サブシステムの設定が以下の例のようになるはずです。パッシベーションキャッシュ "my-cache" は「my-cache-file」パッシベーションストアに設定されたようにステートフルセッション Bean をファイルシステムに渡します。これには、Copy to Clipboard Copied! Toggle word wrap Toggle overflow idle-timeout、idle-timeout-unit、およびmax-sizeオプションが含まれます。- EJB JAR の
METAファイルを作成します。以下の例は、前のステップで定義されたキャッシュを使用するように EJB を設定します。-INF/ディレクトリーに jboss-ejb3.xmlCopy to Clipboard Copied! Toggle word wrap Toggle overflow - タイムアウト値を設定する方法は、EJB 2 または EJB 3 を実装するかどうかによって異なります。
- EJB 3 ではアノテーションが導入されるため、以下のように EJB コードで
javax.ejb.StatefulTimeoutアノテーションを指定できます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow @StatefulTimeoutの値は以下のいずれかに設定できます。- 値が
0の場合は、Bean がすぐに削除できます。 0より大きい値は、unitパラメーターで指定された単位のタイムアウト値を示します。デフォルトのタイムアウト単位はMINUTESです。パッシベーションキャッシュ設定を使用し、idle-timeoutの値がStatefulTimeout値よりも小さい場合、指定されたidle-timeout期間に対してアイドル状態になると、JBoss EAP は Bean をパッシベートします。その後、Bean はStatefulTimeoutの期間後に削除することができます。- -1 を値と
して指定すると、タイムアウトにより bean が削除されません。パッシベーションキャッシュ設定を使用し、Bean がidle-timeoutでアイドル状態である場合、JBoss EAP は Bean インスタンスをpassivation-storeに渡します。 -1未満の値は有効ではありません。
- EJB 2 と EJB 3 の両方に対して、
ejb-jar.xmlファイルでステートフルタイムアウトを設定できます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - EJB 2 と EJB 3 の両方に対して、
jboss-ejb3.xml ファイルでステートフルタイムアウトを設定できます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
追加情報
- ステートフルセッション Bean のパッシベーションを無効にするには、以下のいずれかを行います。
- EJB 3 アノテーションを使用してステートフルセッション Bean を実装した場合、アノテーションのステートフルセッション Bean のパッシベーションを無効にできます。
@org.jboss.ejb3.annotation.Cache("NoPassivationCache") - ステートフルセッション Bean が
jboss-ejb3.xmlファイルで設定されている場合、<c:cache-ref>要素の値をNoPassivationCacheと同等である「simple」に設定します。<c:cache-ref>simple</c:cache-ref>
<c:cache-ref>simple</c:cache-ref>Copy to Clipboard Copied! Toggle word wrap Toggle overflow
- JBoss EAP 6 では EJB キャッシュポリシー「LRUStatefulContextCachePolicy」が変更になったため、JBoss EAP 6 では 1 対 1 の設定マッピングを行うことができません。
- JBoss EAP 6 では、以下のキャッシュプロパティーを設定できます。
- Bean のライフサイクル時間は、EJB 3.1 の @StatefulTimeout を使用して設定されます。
<file-passivation-store>要素のidle-timeout属性を使用して、サーバー設定ファイルのejb3サブシステムのディスクに Bean のパッシベーションを設定します。<file-passivation-store>要素のmax-size属性を使用して、サーバー設定ファイルのejb3サブシステムでパッシベーションストアの最大サイズを設定します。
- JBoss EAP 6 では、以下のキャッシュプロパティーを設定することはできません。
- メモリーキャッシュの最小および最大数。
- パッシベーションストアの最小番号。
- キャッシュ操作の頻度を制御する
*-period設定。
3.2.13.3. ステートレスセッション Bean プールサイズの設定 リンクのコピーリンクがクリップボードにコピーされました!
概要
JBoss EAP 5 では、ステートレス EJB プールのデフォルトは EAP_HOME/server/PROFILE/deploy/ejb3-interceptors-aop.xml ファイルで設定されていました。以下の例は、JBoss EAP 5 のプール設定を示しています。
JBoss EAP 6 でのデフォルトのステートレスセッション Bean プールサイズの設定
JBoss EAP 6 では、ステートレスセッション Bean プールはサーバー設定ファイルの ejb3 サブ要素の <bean-instance-pools> セクションで設定されます。ステートレスセッション Bean のデフォルトプールは "slsb-strict-max-pool" です。<bean-instance-pools> で追加の設定を定義できます。以下の例は、JBoss EAP 6 で「my-stateless-bean-pool」という名前の新しい設定を定義します。
JBoss EAP 6 で Bean プールを使用するよう EJB を設定
以下の方法の 1 つを使用して、EJB をプールと関連付けることができます。
- アノテーションを使って EJB をプールに関連付けます。ここで、値はサーバー設定ファイルで定義されたプールの名前です。以下の例は、EJB を JBoss EAP 6 の「my-stateless-bean-pool」に関連付けます。
@Stateless @org.jboss.ejb3.annotation.Pool(value="my-stateless-bean-pool") public class MyBean....
@Stateless @org.jboss.ejb3.annotation.Pool(value="my-stateless-bean-pool") public class MyBean....Copy to Clipboard Copied! Toggle word wrap Toggle overflow - EJB JAR の
META-INF/ディレクトリーにjboss-ejb3.xmlファイルを設定して、EJB をプールに関連付けます。以下の例は、JBoss EAP 6 の jboss-ejb3.xml ファイルを使用して EJB をプールに関連付けます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
JBoss EAP 6 でのステートレスセッション Bean プールの無効化
EJB インスタンスのメモリーが問題ではなく、EJB インスタンスが PostConstruct メソッドでコストのかかる初期化が行われていない場合は、デフォルトでプールを無効にすると便利です。プールが使用されていない場合、EJB でメソッドを呼び出すスレッドは単に EJB のインスタンスを作成し、その中にメソッドを呼び出し、EJB インスタンスを破棄します。
ejb3 サブシステムのステートレス EJB <bean-instance-pool-ref> 要素を削除します。
3.2.13.4. jboss.xml ファイルの置き換え リンクのコピーリンクがクリップボードにコピーされました!
概要
.xml デプロイメント記述子ファイルに置き換えられます。このファイルは、jboss.xml デプロイメント記述子ファイルは jboss-ejb3ejb-jar.xml デプロイメント記述子で定義された Java Enterprise Edition(EE)が提供する機能を上書きし、追加するために使用されます。新しいファイルは jboss.xml と互換性がなく、デプロイメントで jboss.xml は無視されるようになりました。
jboss.xml ファイルを jboss-ejb3.xml デプロイメント記述子ファイルに置き換える必要があります。アプリケーションが EJB 3.x を使用する場合は、jboss-ejb3.xml ファイルを使用するか、EJB3 アノテーションを使用して完全に削除することもできます。
jboss.xml ファイルを jboss-ejb3.xml ファイルに置き換えます。
以前のリリースの JBoss EAP では、ejb > を定義した場合、-jar.xml ファイルで <resource-refjboss.xml ファイルに JNDI 名に対応するリソース定義が必要でした。XDoclet は、これらのデプロイメント記述子ファイルの両方を自動的に生成します。JBoss EAP 6 では、JNDI マッピング情報が jboss-ejb3.xml ファイルに定義されるようになりました。データソースが Java ソースコードに定義されていることを以下のように仮定します。
DataSource ds1 = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/Resource1");
DataSource ds2 = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/Resource2");
DataSource ds1 = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/Resource1");
DataSource ds2 = (DataSource) new InitialContext().lookup("java:comp/env/jdbc/Resource2");
ejb-jar.xml は以下のリソース参照を定義します。
jboss-ejb3.jxml ファイルは、以下の XML 構文を使用して JNDI 名を参照にマップします。
不足している jboss.xml 設定属性の処理
JBoss EAP 5.x の jboss.xml ファイルで使用できた一部の設定オプションは JBoss EAP 6 に実装されませんでした。以下のリストは、jboss.xml ファイルで一般的に使用される属性の一部と、JBoss EAP 6 でそれらを実行する代替方法があるかどうかを示します。
method-attribute要素は、個別のエンティティーおよびセッション Bean メソッドを設定するために使用されます。read-onlyおよびidempotent設定オプションは JBoss EAP 6 に移植されませんでした。transaction-timeoutオプションがjboss-ejb3.xmlファイルに設定されるようになりました。
missing-method-permission-exclude-mode属性は、セキュアな Bean に明示的なセキュリティーメタデータを実装しなくてもメソッドの動作を変更しました。JBoss EAP 6 では、@RolesAllowedアノテーションがないことは現在、以下と同様の方法で処理されます。@PermitAll
jboss-ejb3.xml ファイル設定のその他の例は、『MDB の jboss-ejb3.xml のリソースアダプターの指定』、コンテナー『インターセプターの設定』、および JBoss EAP 『開発ガイド』 の「 『jboss-ejb3.xml デプロイメント記述子参照』 」のトピックを参照してください。『』
3.2.14. 「EJB 2.x and Earlier Changes」 リンクのコピーリンクがクリップボードにコピーされました!
3.2.14.1. EJB 1.x および EJB 2.x の非推奨の機能 リンクのコピーリンクがクリップボードにコピーされました!
- EJB 2.1 以前の CMP エンティティー Bean
- EJB 2.1 エンティティー Bean のクライアントビュー
- CMP エンティティー Bean クエリー用の EJB QL
- JAX-RPC ベースの Web サービスエンドポイントとクライアントビュー
3.2.14.2. EJB 1.x および EJB 2.x を使用するアプリケーションに必要な変更 リンクのコピーリンクがクリップボードにコピーされました!
3.2.14.2.1. EJB 2.x の実行に必要な設定変更 リンクのコピーリンクがクリップボードにコピーされました!
完全プロファイルでのサーバーの起動
EJB 2.x Container Managed Persistence(CMP)Bean には Java Enterprise Edition 6 Full Profile が必要です。このプロファイルには、CMP EJB の実行に必要な設定要素が含まれます。
org.jboss.as.cmp 拡張モジュールが含まれます。
<extensions>
...
<extension module="org.jboss.as.cmp"/>
...
</extensions>
<extensions>
...
<extension module="org.jboss.as.cmp"/>
...
</extensions>
cmp サブシステムも含まれています。
<profiles>
...
<subsystem xmlns="urn:jboss:domain:cmp:1.1"/>
...
</profiles>
<profiles>
...
<subsystem xmlns="urn:jboss:domain:cmp:1.1"/>
...
</profiles>
-c standalone-full.xml 引数または -c standalone-full-ha.xml 引数を渡します。
コンテナー設定の長期サポートなし
これまでのバージョンの JBoss EAP では、CMP エンティティーおよびその他の Bean に異なるコンテナーを設定し、jboss.xml アプリケーションデプロイメント記述子ファイル内に参照を設定して使用することができました。たとえば、SLSB からセッション Bean への一般的な設定は異なります。
- デフォルトでは、pessimistic ロックがアクティブになっています。これにより、デッドロックが生じる可能性があります。
- JBoss EAP 5.x の CMP レイヤーに含まれていたデッドロック検出コードは JBoss EAP 6 ではなくなりました。
commit-options、インターセプタースタックをカスタマイズすることもできます。JBoss EAP 6 では、これはできなくなりました。commit-option C の Instance Per Transaction ポリシーと類似する実装は 1 つだけです。CMP2.x と互換性のある JDBC ベースの永続マネージャーを使用する cmp2.x jdbc2 pm エンティティー bean コンテナー設定を使用するアプリケーションを移行する場合、パフォーマンスに影響します。このコンテナーは、パフォーマンスに対して最適化されています。アプリケーションを移行する前に、これらのエンティティーを EJB 3 に移行することが推奨されます。
サーバー側のインターセプターの設定
JBoss EAP 6 は、@Interceptors および @AroundInvoke アノテーションを使用して標準の Java EE インターセプター をサポートします。ただし、セキュリティーやトランザクション以外の操作は許可されません。
InitialContextの使用TransactionSynchronizationRegistry tsr = (TransactionSynchronizationRegistry) new InitialContext().lookup("java:jboss/TransactionSynchronizationRegistry"); tsr.registerInterposedSynchronization(new MyTxCallback());TransactionSynchronizationRegistry tsr = (TransactionSynchronizationRegistry) new InitialContext().lookup("java:jboss/TransactionSynchronizationRegistry"); tsr.registerInterposedSynchronization(new MyTxCallback());Copy to Clipboard Copied! Toggle word wrap Toggle overflow - インジェクションの使用
@Resource(mappedName = "java:comp/TransactionSynchronizationRegistry") TransactionSynchronizationRegistry tsr; ... tsr.registerInterposedSynchronization(new MyTxCallback());
@Resource(mappedName = "java:comp/TransactionSynchronizationRegistry") TransactionSynchronizationRegistry tsr; ... tsr.registerInterposedSynchronization(new MyTxCallback());Copy to Clipboard Copied! Toggle word wrap Toggle overflow
javax.transaction.Synchronization インターフェースを実装する必要があります。beforeCompletion{} メソッドを使用して、トランザクションがコミットまたはロールバックされる前にチェックを実行します。このメソッドから RuntimeException が発生すると、トランザクションはロールバックされ、クライアントには gitops olledbackException が通知さ れます。XA-Transaction の場合、すべてのリソースは XA 契約に従ってロールバックされます。また、afterCompletion(int txStatus) メソッドを使用してトランザクションの状態に依存するようにビジネスロジックを有効にすることもできます。このメソッドから RuntimeException が発生すると、トランザクションは、コミットまたはロールバックのいずれかの以前の状態のままになり、クライアントには通知されません。サーバーログファイル内では、トランザクションマネージャーのみが警告を表示します。
クライアント側インターセプターのサーバー側設定
これまでのバージョンの JBoss EAP では、サーバー設定にクライアントインターセプターを設定し、クライアント API のクラスだけを提供できました。
エンティティー Bean プール設定
JBoss EAP 6 では、エンティティー bean プール設定は推奨されません。これは < strict-max-pool> 要素の設定に限定されるため、プール が小さすぎて結果セットのすべてのエンティティーを読み込む場合に、デッドロックやその他の問題が発生する可能性があります。エンティティー bean には初期化中に大きなライフサイクルメソッドがないため、インスタンスの作成と周りのコンテナーの周りはプールされたエンティティー Bean インスタンスを使用する場合よりも遅くなります。
jboss.xml デプロイメント記述子ファイルの置き換え
.xml デプロイメント記述子ファイルに置き換えられます。このファイルは、jboss.xml デプロイメント記述子ファイルは jboss-ejb3ejb-jar.xml デプロイメント記述子で定義された Java Enterprise Edition(EE)が提供する機能を上書きし、追加するために使用されます。新しい jboss-ejb3.xml ファイルは ファイルと互換性がありません。このファイルは、デプロイメントで無視されるようになりました。詳細は、 「jboss.xml ファイルの置き換え」 を参照してください。
jboss.xml
データソースタイプマッピングの設定
これまでのバージョンの JBoss EAP では、データソースの type-mapping を *-ds.xml データソースデプロイメント設定ファイル内に設定できました。
jbosscmp-jdbc.xml デプロイメント記述子ファイルで行う必要があります。
<defaults>
<datasource-mapping>mySQL</datasource-mapping>
<create-table>true</create-table>
....
</defaults>
<defaults>
<datasource-mapping>mySQL</datasource-mapping>
<create-table>true</create-table>
....
</defaults>
standardjbosscmp-jdbc.xml ファイルで行われていました。このファイルは利用できなくなり、jbosscmp-jdbc.xml デプロイメント記述子ファイルでマッピングを実行できるようになりました。
3.2.14.2.2. EJB 2.x に必要なコンテナー管理による永続性およびコンテナー管理の変更 リンクのコピーリンクがクリップボードにコピーされました!
コンテナー管理(CMR)イテレーターおよびコレクションの変更
以前のリリースの JBoss EAP では、CMR コレクションを繰り返し処理し、関係を削除または追加するために、一部のコンテナー( cmp2.x jdbc2 pm コンテナーなど)が発生しました。コンテナー設定はサポート対象外であるため、JBoss EAP 6 ではこれをできなくなりました。アプリケーションコードで同じ機能を実現する方法は、カスタマーポータルの「Support Knowledgebase Solutions」セクションの「 EJB2.1 Finder for CMP entities for CMP entity with CMP entities with relations(CMR)returns duplicates in EAP6 」を参照してください。
コンテナー管理(CMR)ファクサーの重複エントリー
これまでのバージョンの JBoss EAP では、異なる永続ストラテジーを使用する異なる CMP コンテナーを選択できました。JBoss EAP 5 .x の cmp2.x jdbc2 pm コンテナーは、最適化された SQL-92 を使用してファクサーに最適化された LEFT OUTER JOIN 構文を生成しました。JBoss EAP 6.x は CMP および CMR の標準コンテナーのみをサポートするため、実装にはこれらの最適化は含まれません。リファインダーには、結果セットにカテテス語の製品を回避するために、SELECT ステートメントにキーワード DISTINCT を含める必要があります。詳細は、カスタマーポータルの「Support Knowledgebase Solutions」セクションの「 EJB2.1 Finder for CMP entities with CMP entities with relations(CMR)returns duplicates in EAP6 」を参照してください。
CMP エンティティー Bean のデフォルト変更の削除
カスケード削除のデフォルト値が false に変更になりました。これにより、JBoss EAP 6 で削除される可能性があります。エンティティー関係が cascade-delete とマークされている場合は、jbosscmp-jdbc.xml ファイルで batch-cascade-delete を true に明示的に設定する必要があります。詳細は、カスタマーポータルの「Support Knowledgebase Solutions」の「 cascade delete fail for EJB2 CMP entity after migration to EAP6 」を参照してください。
カスタムフィールドの CMP カスタムマッパー
JBoss EAP 5.x アプリケーションで JDBCParameterSetter、JDBCResultSetReader、および Mapper などのカスタマーマッパークラスを使用している場合は、アプリケーションを JBoss EAP 6 にデプロイすると java.lang.ClassNotFoundException が表示されることがあります。これは、インターフェースのパッケージ名が org.jboss.ejb.plugins.cmp.jdbc.Mapper から org.jboss.as.cmp.jdbc.Mapper に変更されているためです。詳細は、カスタマーポータルの「サポートナレッジベースソリューション」の「 How to use Field mapping for an EJB2 CMP application in an EJB2 CMP application in an EJB2 CMP application」を参照してください。
entity-commands を使用したプライマリーキーの生成
JBoss EAP 5 アプリケーションで entity-commands を使用してプライマリーキー( Sequence や Auto-increment など)を生成すると、アプリケーションを JBoss EAP 6 に移行すると、JDBCOracleSequenceCreateCommand クラスの ClassNotFoundException が表示されることがあります。これは、クラスパッケージが org.jboss.ejb.plugins.cmp.jdbc から org.jboss.as.cmp.jdbc.keygen に変更されているためです。JBoss EAP 6 アプリケーションでこのクラスを使用する場合は、EAP_HOME/modules/system/layers/base/org/jboss/as/cmp モジュールに依存関係も追加する必要があります。
3.2.14.2.3. EJB 2.x の実行に必要なアプリケーションの変更 リンクのコピーリンクがクリップボードにコピーされました!
新しい JNDI ネームスペースルールを使用するようコードを変更します。
EJB 3.0 と同様に、EJB 2.x と完全な JNDI プレフィックスを使用する必要があります。新しい JNDI ネームスペースルールおよびコード例の詳細は、 「アプリケーション JNDI 名前空間名の更新」 を参照してください。
jboss-web.xml ファイル記述子の変更
新しい JNDI 完全修飾ルックアップ形式を使用するように、各 <jndi-name> の <ejb-ref> を変更します。
XDoclet を使用して内部ローカルインターフェースの JNDI 名をマッピングする
EJB 2 では、Locator パターンを使用して Bean を検索することは非常に一般的でした。アプリケーションコードを変更するのではなく、アプリケーションでこのパターンを使用した場合は、XDoclet を使用して新しい JNDI 名のマップを生成できます。
@ejb.bean name="UserAttribute" display-name="UserAttribute" local-jndi-name="ejb21/UserAttributeEntity" view-type="local" type="CMP" cmp-version="2.x" primkey-field="id"
@ejb.bean name="UserAttribute" display-name="UserAttribute" local-jndi-name="ejb21/UserAttributeEntity" view-type="local" type="CMP" cmp-version="2.x" primkey-field="id"
ejb21/UserAttributeEntity は JBoss EAP 6 では有効ではなくなりました。サーバー設定の naming サブシステムと XDoclet のパッチを使用して、この名前を有効な JNDI 名にマップできます。
手順3.29 XDoclet 生成コードの変更および Naming サブシステムの使用
ejb-module.jarにある XDocletlookup.xdtテンプレートを展開し、lookup()のlookupHomeを以下のように変更します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - Ant を実行し、
ejbdocletタスクに変更したlookup.xdtを使用するようにテンプレート属性を設定します。 - サーバー設定ファイルの
namingサブシステムを変更し、古い JNDI 名を新しい有効な JNDI 名にマッピングします。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
3.2.14.2.4. EJB 2.x に関する既知の問題 リンクのコピーリンクがクリップボードにコピーされました!
ejb-jar.xml 記述子ファイルのデプロイメントには既知の問題があります。サーバーはデプロイメント時に解析エラーをスローし、サーバーログに以下の出力が表示されます。
ERROR [org.jboss.msc.service.fail] (MSC service thread 1-7) MSC000001: Failed to start service jboss.deployment.unit."EJB_JAR_NAME.jar".PARSE: org.jboss.msc.service.StartException in service jboss.deployment.unit."EJB_JAR_NAMEjar".PARSE: JBAS018733: Failed to process phase PARSE of deployment "EJB_JAR_NAME.jar"
ERROR [org.jboss.msc.service.fail] (MSC service thread 1-7) MSC000001: Failed to start service jboss.deployment.unit."EJB_JAR_NAME.jar".PARSE: org.jboss.msc.service.StartException in service jboss.deployment.unit."EJB_JAR_NAMEjar".PARSE: JBAS018733: Failed to process phase PARSE of deployment "EJB_JAR_NAME.jar"
3.2.14.2.5. EJB 2.x ファイルの廃止 リンクのコピーリンクがクリップボードにコピーされました!
- jboss.xml
jboss.xmlアプリケーションデプロイメント記述子ファイルはサポートされず、デプロイされたアーカイブに含まれる場合は無視されます。このファイルは、jboss-ejb3.xmlデプロイメント記述子ファイルに置き換えられました。- standardjbosscmp-jdbc.xml
standardjbosscmp-jdbc.xmlサーバー設定ファイルに対応しなくなりました。この設定情報はorg.jboss.as.cmpモジュールに含まれ、カスタマイズできなくなりました。- standardjboss.xml
standardjboss.xmlサーバー設定ファイルはサポートされなくなりました。この設定情報は、管理対象ドメインで実行している場合、スタンドアロンサーバーまたはdomain.xmlファイルを実行する際にstandalone.xmlファイルに含まれるようになりました。
3.2.15. JBoss AOP の変更 リンクのコピーリンクがクリップボードにコピーされました!
3.2.15.1. JBoss AOP を使用するアプリケーションの更新 リンクのコピーリンクがクリップボードにコピーされました!
アプリケーションのリファクタリング
ejb3-interceptors-aop.xml ファイルに以前に作成された標準の EJB3 設定がサーバー設定ファイルに設定されるようになりました。スタンドアロンサーバーの場合、これはstandalone/configuration/standalone-full.xmlファイルになります。管理対象ドメインでサーバーを実行している場合は、domain/configuration/domain.xmlファイルになります。- 標準の Java EE
Interceptorを使用するように、サーバー側 AOP インターセプターを変更する必要があります。コンテナーインターセプターと、アプリケーションでクライアント側のインターセプターを使用する方法は、カスタマーポータル https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/?version=6.4 の JBoss EAP 6 の 『『開発ガイド』』 の「コンテナー 『インターセプター』 」の章を参照してください。
JBoss AOP ライブラリーの使用
- コードをリファクタリングできない場合は、JBoss AOP ライブラリーのコピーを取得して、アプリケーションでバンドルできます。AOP ライブラリーは JBoss EAP 6 で動作しますが、デプロイされていません。サーバーの起動時に以下のコマンドライン引数を使用して手動でデプロイできます。-Djboss.aop.path=PATH_TO_AOP_CONFIG注記JBoss AOP ライブラリーは JBoss EAP 6 で動作しますが、この設定はサポートされていません。
3.2.16. jacorb の変更 リンクのコピーリンクがクリップボードにコピーされました!
3.2.16.1. jacorb 設定の変更 リンクのコピーリンクがクリップボードにコピーされました!
EAP_HOME/server/production/conf/jacorb.properties ファイルに指定されたプロパティーを使用して JacORB 設定が実行されました。以下は、そのファイルに設定された JacORB プロパティーの例になります。
3.2.17. JBoss Web コンポーネントの変更 リンクのコピーリンクがクリップボードにコピーされました!
3.2.17.1. HTTP/HTTPS/AJP コネクター属性のマップ リンクのコピーリンクがクリップボードにコピーされました!
| 以前のリリースの属性名 | JBoss EAP 6 で同等のもの | Details |
|---|---|---|
| maxThreads | max-connections | この属性は、JBossWeb レベルのスレッドプールのサイズになります。これは Web サブシステムのコネクターに設定されます。デフォルトは CPU コアごとに 512 です。
<connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http" enabled="true" max-connections="200" />
|
|
minSpareThreads
maxSpareThreads
| 該当なし | スレッドの回収にはほとんどないため、minSpareThreads または maxSpareThreads と同等のものはありません。デフォルトのワーカースレッドプールの代わりにコネクターにエクゼキューターを使用する場合、最も近いものは core-threads サイズおよび keepalive-time 属性になります。 |
|
proxyName
proxyPort
|
proxy-name
proxy-port
| この属性は Web サブシステムの コネクター に設定されます。
<connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http" enabled="true" proxy-name="proxy.com" proxy-port="80"/>
|
|
redirectPort
|
redirect-port
|
この属性は
Web サブシステムの コネクター に設定されます。
connector name="http" protocol="HTTP/1.1" scheme="https" secure="true" socket-binding="http"
redirect-port="8443" proxy-name="loadbalancer.hostname.com" proxy-port="443"
|
|
enableLookups
|
enable-lookups
|
この属性は
Web サブシステムの コネクター に設定されます。
<connector name="http" protocol="HTTP/1.1" scheme="http" socket-binding="http" enable-lookups="true"/>"
|
|
MaxHttpHeaderSize
| システムプロパティー | この属性はシステムプロパティーを使用して設定されます。デフォルト値は 8 KB です。
<system-properties>
<property name="org.apache.coyote.http11.Http11Protocol.MAX_HEADER_SIZE" value="8192"/>
</system-properties>
|
|
maxKeepAliveRequests
| システムプロパティー | この属性はシステムプロパティーを使用して設定されます。
<system-properties>
<property name="org.apache.coyote.http11.Http11Protocol.MAX_KEEP_ALIVE_REQUESTS" value="1"/>
</system-properties>
|
|
connectionTimeout
| システムプロパティー | この属性はシステムプロパティーを使用して設定されます。以下の設定では、AJP connectionTimeout を 600000 ミリ秒(10 分)に設定し、HTTP connectionTimeout を 120000 ミリ秒(2 分)に設定します。
|
|
圧縮
| システムプロパティー | この属性は圧縮を有効にします。コンテンツタイプを指定できます。デフォルトは text/html,text/xml,text/plain です。圧縮されるコンテンツの最小サイズを指定することもできます。デフォルトは 2048 バイトです。圧縮はシステムプロパティーを使用して設定されます。
<system-properties>
<property name="org.apache.coyote.http11.Http11Protocol.COMPRESSION" value="on"/>
<property name="org.apache.coyote.http11.Http11Protocol.COMPRESSION_MIN_SIZE" value="4096"/>
<property name="org.apache.coyote.http11.Http11Protocol.COMPRESSION_MIME_TYPES" value="text/javascript,text/css,text/html"/>
</system-properties>
|
|
URIencoding
| システムプロパティー | この属性はシステムプロパティーを使用して設定されます。
<system-properties>
<property name="org.apache.catalina.connector.URI_ENCODING" value="UTF-8"/>
</system-properties>
|
|
useBodyEncodingForURI
| システムプロパティー | この属性はシステムプロパティーを使用して設定されます。
<system-properties>
<property name="org.apache.catalina.connector.USE_BODY_ENCODING_FOR_QUERY_STRING" value="true"/>
</system-properties>
|
|
server
| システムプロパティー | この属性はシステムプロパティーを使用して設定されます。
<system-properties>
<property name="org.apache.coyote.http11.Http11Protocol.SERVER" value="NewServerHeader"/>
</system-properties>
|
|
allowTrace
| システムプロパティー | この属性はシステムプロパティーを使用して設定されます。
<system-properties>
<property name="org.apache.catalina.connector.ALLOW_TRACE " value="true"/>
</system-properties>
|
|
xpoweredby
| システムプロパティー | この属性はシステムプロパティーを使用して設定されます。
<system-properties>
<property name="org.apache.catalina.connector.X_POWERED_BY " value="true"/>
</system-properties>
|
|
keepAliveTimeout
| 該当なし |
JBoss EAP 6.4 以前では、JBoss EAP 6 には同等のパラメーターがありませんでした。内部的には、これはデフォルトで
connectionTimeout の値に設定されます。
JBoss EAP 6.4 では、新しいシステムプロパティー
org.apache.coyote.http11.DEFAULT_KEEP_ALIVE_TIMEOUT が導入され、keepAliveTimeout を制御します。-Dorg.apache.coyote.http11.DEFAULT_KEEP_ALIVE_TIMEOUT 引数は、-Dorg.apache.coyote.http11.DEFAULT_DISABLE_UPLOAD_TIMEOUT=true 引数と共に使用する場合に影響を与えます。
|
|
disableUploadTimeout
connectionUploadTimeout
| 該当なし |
現在 JBoss EAP 6 には同等のパラメーターはありません。
disableUploadTimeout はデフォルトで true で、connectionUploadTimeout は内部的に connectionTimeout の値を使用します。
|
|
packetSize
| システムプロパティー | この属性はシステムプロパティーを使用して設定されます。以下の設定では、AJP packetSize を 20000に設定します。
<system-properties>
<property name="org.apache.coyote.ajp.MAX_PACKET_SIZE" value="20000"/>
</system-properties>
|
|
maxPostSize
maxSavePostSize
|
max-post-size
max-save-post-size
| 値が 0 の場合は無制限を意味します。このパラメーターは、Content-Type が application/x-www-form-urlencoded の場合にのみデータサイズを制限することができることに注意してください。詳細は、カスタマーポータルの「 How to limit data size of HTTP POST method from a client to JBoss」を参照してください。 |
|
tomcatAuthentication
| システムプロパティー |
JBoss EAP 6 のバージョンに応じて、この属性はシステムプロパティー
org.apache.coyote.ajp.AprProcessor.TOMCATAUTHENTICATION または org.apache.coyote.ajp.DEFAULT_TOMCAT_AUTHENTICATION を使用して設定されます。すべてのバージョンのサーバーにパッチまたはアップグレードが必要になります。
JBoss EAP 6.0.1 では、tomcatAuthentication は以下のプロパティーを使用して設定されます。
<system-properties>
<property name="org.apache.coyote.ajp.AprProcessor.TOMCATAUTHENTICATION" value="false"/>
</system-properties>
JBoss EAP 6.1 以降では、tomcatAuthentication は以下のように設定されます。
<system-properties>
<property name="org.apache.coyote.ajp.DEFAULT_TOMCAT_AUTHENTICATION" value="false"/>
</system-properties>
詳細は、カスタマーポータルの「 How to configure tomcatAuthentication in JBoss EAP 6」を参照してください。
|
3.2.17.2. 1-Way SSL の設定 リンクのコピーリンクがクリップボードにコピーされました!
keystore.jks ファイルは EAP_HOME/server/PROFILE/conf/ ディレクトリーに置かれました。その後、以下のように EAP_HOME/server/PROFILE/deploy/jbossweb.sar/server.xml ファイルで HTTP コネクターを設定します。
<Connector protocol="HTTP/1.1" SSLEnabled="true"
port="8443" address="${jboss.bind.address}"
scheme="https" secure="true" clientAuth="false"
keystoreFile="${jboss.server.home.dir}/conf/keystore.jks"
keystorePass="password" SSLProtocol = "TLS" />
<Connector protocol="HTTP/1.1" SSLEnabled="true"
port="8443" address="${jboss.bind.address}"
scheme="https" secure="true" clientAuth="false"
keystoreFile="${jboss.server.home.dir}/conf/keystore.jks"
keystorePass="password" SSLProtocol = "TLS" />
keystore.jks ファイルは EAP_HOME/standalone/configuration/ または EAP_HOME/domain/configuration/ ディレクトリーに配置されます。その後、以下のように HTTP コネクターはサーバー設定ファイルの web サブシステムで設定されます。
<connector name="https" protocol="HTTP/1.1" scheme="https" socket-binding="https">
<ssl name="ssl" key-alias="jboss" password="password"
certificate-key-file="${jboss.server.config.dir}/keystore.jks"
protocol="TLSv1" verify-client="false"/>
</connector>
<connector name="https" protocol="HTTP/1.1" scheme="https" socket-binding="https">
<ssl name="ssl" key-alias="jboss" password="password"
certificate-key-file="${jboss.server.config.dir}/keystore.jks"
protocol="TLSv1" verify-client="false"/>
</connector>
Web サブシステムで設定されますが、コネクタープロトコルは "org.apache.coyote.http11.Http11AprProtocol" に設定されます。
3.2.17.3. バルブ設定の移行 リンクのコピーリンクがクリップボードにコピーされました!
EAP_HOME/server/PROFILE/lib ディレクトリーに追加し、以下のファイルのいずれかを設定して Tomcat バルブを設定できます。
- JBoss EAP 4.x では、バルブは
EAP_HOME/server/PROFILEdeploy/jboss-web.deployer/server.xmlまたはEAP_HOME/server/PROFILEdeploy/jboss-web.deployer/context.xmlファイルのいずれかで設定されました。 - JBoss EAP 5.x では、バルブは
EAP_HOME/server/PROFILEdeploy/jbossweb.sar/server.xmlファイルに設定されました。
web サブシステムでモジュールを設定します。バルブの設定方法に関する詳細は、カスタマーポータルの JBoss EAP『 『Administration and Configuration Guide』 』の「titled 『Global Valves』 」の章を参照してください。 https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/?version=6.4
3.2.17.4. CertificatePrincipal クラスの設定 リンクのコピーリンクがクリップボードにコピーされました!
jbossweb-tomcat.sar/server.xml ファイルの certificatePrincipal の Realm 属性を設定して CertificatePrincipal クラスが JBossWeb コンテナーで設定されている。
<Realm className="org.jboss.web.tomcat.security.JBossWebRealm" certificatePrincipal="org.jboss.security.auth.certs.SubjectDNMapping" allRolesMode="authOnly"/>
<Realm className="org.jboss.web.tomcat.security.JBossWebRealm"
certificatePrincipal="org.jboss.security.auth.certs.SubjectDNMapping"
allRolesMode="authOnly"/>
3.2.18. Seam 2.2 アプリケーションの移行 リンクのコピーリンクがクリップボードにコピーされました!
3.2.18.1. Seam 2.2 アーカイブの JBoss EAP 6 への移行 リンクのコピーリンクがクリップボードにコピーされました!
概要
Seam 2.2 アプリケーションを移行する場合は、データソースを設定し、モジュール依存関係を指定する必要があります。また、アプリケーションに JBoss EAP 6 には同梱されないアーカイブの依存関係があるかどうかを確認し、依存する JAR をアプリケーションの lib/ ディレクトリーにコピーします。
手順3.30 Seam 2.2 アーカイブの移行
- データソース設定を更新します。Seam 2.2 の例では、
java:/ExampleDSという名前のデフォルトの JDBC データソースを使用します。このデフォルトのデータソースは JBoss EAP 6 でjava:jboss/datasources/ExampleDSに変更されています。アプリケーションがサンプルデータベースを使用する場合は、以下のいずれかを実行できます。データソースの設定方法は 「DataSource設定の更新」 を参照してください。- JBoss EAP 6 に同梱されるサンプルデータベースを使用する場合は、
META-INF/persistence.xmlファイルを変更して、既存のjta-data-source要素をデータベースのデータソースの JNDI 名に置き換えます。<!-- <jta-data-source>java:/ExampleDS</jta-data-source> --> <jta-data-source>java:jboss/datasources/ExampleDS</jta-data-source>
<!-- <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.12 データソース定義を追加する構文の例
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$ 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=saCopy 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 クラスを参照する
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 signatureCopy to Clipboard Copied! Toggle word wrap Toggle overflow - 外部フレームワークまたは他の場所から依存アーカイブをコピーします。アプリケーションが Hibernate 3.x を使用し、アプリケーションで Hibernate 4 が正常に使用できない場合は、Hibernate 3.x JAR を
/libディレクトリーにコピーし、以下のようにMETA-INF/jboss-deployment-structure.xmlの deployments セクションの 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.18.2. Seam 2.2 アーカイブの移行の問題 リンクのコピーリンクがクリップボードにコピーされました!
- Seam 2.2 Drools と Java 7 は互換性がない
- Seam 2.2 Drools と Java 7 は互換性がなく、org.drools.RuntimeDroolsException: 値 '1.7' は有効な言語レベルのエラーで失敗します。
- 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 packageCopy 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 であるため、会話 ID は設定されていません。この問題を回避するには、で説明されているように
org.jboss.seam.webservice.SOAPRequestHandler.handleOutboundを上書きし https://issues.jboss.org/browse/JBPAPP-8376 ます。 - Seambay の例が
UnsupportedOperationException: no transaction で失敗する - このバグは、JBoss EAP 6 の UserTransaction の JNDI 名の変更によって生じます。この問題を回避するには、の説明どおりに
org.jboss.seam.transaction.Transaction.getUserTransactionを上書きし https://issues.jboss.org/browse/JBPAPP-8322 ます。 - タスクの例は、
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、resteasy-jaxrs、resteasy-jettison-provider、resteasy-jaxb-provider、resteasy-jaxb-provider、resteasy-yaml-provider をjboss-seam-tasks.warから除外することです。次に、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" or similar error message is could not acquire lock on @Synchronized component: hotelSearch" or similar error メッセージが表示されます。この問題は、Seam 2 がステートフルセッション Bean(SFSB)ロック外の独自のロックと、異なるスコープである点です。つまり、スレッドが同じトランザクションで EJB に 2 回アクセスされた場合、最初の呼び出しの後に SFSB ロックがありますが、seam ロックは存在することを意味します。2 つ目のスレッドは、seam ロックの取得が可能です。次に、EJB ロックに到達して待機することができます。最初のスレッドが 2 つ目の呼び出しを試みると、seam 2 インターセプターとデッドロックでブロックされます。Java EE 5 では、EJB は同時アクセスで即座に例外を発生させました。この動作は Java EE 6 で変更になりました。この問題を回避するには、@AccessTimeout(0)を EJB に追加します。これにより、このような状況が発生すると
、すぐに ConcurrentWarehouse をスローします。 - dvdstore の例 create order が
javax.ejb.gitopsolledbackExceptionで失敗する - 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クラスでトランザクションに変更し、cancelOrderメソッドおよびdetailOrderメソッドでエンティティーマネージャーのマージ操作を使用することです。 - JBoss EAP 6 では JBoss Cache Seam キャッシュプロバイダーを使用できない
- JBoss EAP 6 では JBoss キャッシュはサポートされません。これにより、JBoss Cache Seam Cache プロバイダーは、アプリケーションサーバーの Seam アプリケーションで失敗します。.
java.lang.NoClassDefFoundError: org/jboss/util/xml/JBossEntityResolver
java.lang.NoClassDefFoundError: org/jboss/util/xml/JBossEntityResolverCopy 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:appnamespace は、1 つのアプリケーションのすべてのコンポーネントによって共有される名前について指定されます。Quartz 非同期スレッドなどのEE 以外のスレッドは、アプリケーションサーバーインスタンスにデプロイされたアプリケーションによって共有されるjava:global名前空間を使用する必要があります。Quartz 非同期メソッドから EJB Seam コンポーネントを呼び出しようとするとjavax.naming.NameNotFoundExceptionを受信した場合、以下のようにcomponents.xmlファイルを変更してグローバル JNDI 名を使用する必要があります。<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 名前空間名の更新」 のトピックを参照してください。この特定の問題に関する詳細は、Red Hat カスタマーポータルの 『Red Hat JBoss Web Framework Kit』 の 2.2 『. 『0 リリースノート』 の quartz 非同期メソッドから EJB Seam コンポーネントを呼び出しようとすると、BZ#948215 - Seam2.3 javax.naming.NameNotFoundException trying』 を参照してください。
3.2.19. Spring アプリケーションの移行 リンクのコピーリンクがクリップボードにコピーされました!
3.2.19.1. Spring アプリケーションの移行 リンクのコピーリンクがクリップボードにコピーされました!
3.2.20. 影響を受ける移行のその他の変更 リンクのコピーリンクがクリップボードにコピーされました!
3.2.20.1. 移行の影響を受ける可能性がある他の変更点についてよく知る リンクのコピーリンクがクリップボードにコピーされました!
3.2.20.2. Maven プラグイン名の変更 リンクのコピーリンクがクリップボードにコピーされました!
jboss-maven-plugin が更新されず、JBoss EAP 6 では機能しません。これで、org.jboss.as.plugins:jboss-as-maven-plugin を使用して正しいディレクトリーにデプロイする必要があります。
3.2.20.3. クライアントアプリケーションの変更 リンクのコピーリンクがクリップボードにコピーされました!
jboss-client.jar で、EAP_HOME/bin/client/ ディレクトリーにあります。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 Migration Tool
- JBoss EAP 6 では、データソースとリソースアダプターは個別のファイルで設定されなくなりました。サーバー設定ファイルで定義され、新しいスキーマを使用するようになりました。IronJacamar Migration Tool は、以前の設定を 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 Tattletale のダウンロードおよびインストール
- Tattletale バージョン 1.2.0.Beta2 以降を から http://sourceforge.net/projects/jboss/files/JBoss%20Tattletale ダウンロードします。
- 任意のディレクトリーに展開します。
- 以下を実行して
TATTLETALE_HOME/jboss-tattletale.propertiesファイルを変更します。ee6およびas7をprofilesプロパティーに追加します。profiles=java5, java6, ee6, as7
profiles=java5, java6, ee6, as7Copy to Clipboard Copied! Toggle word wrap Toggle overflow scanおよびreportsプロパティーのコメントを解除します。
4.1.5. Tattletale レポートの作成およびレビュー リンクのコピーリンクがクリップボードにコピーされました!
- 以下のコマンドを実行して Tattletale レポートを作成します。 java -jar
TATTLETALE_HOME/tattletale.jarAPPLICATION_ARCHIVEOUTPUT_DIRECTORY例: java -jar tattletale-1.2.0.Beta2/tattletale.jar ~/applications/jboss-seam-booking.ear ~/output-results/ - ブラウザーで
OUTPUT_DIRECTORY/index.htmlファイルを開き、「Reports」セクションの「JBoss AS 7」をクリックします。- 左側の列には、アプリケーションが使用するアーカイブが一覧表示されます。ARCHIVE_NAME リンクをクリックして、その場所、マニフェスト情報、含まれるクラスなどのアーカイブの詳細を表示します。
- 右側の列の
jboss-deployment-structure.xmlリンクは、左側の列で名前が付けられたアーカイブのモジュール依存関係を指定する方法を示しています。このリンクをクリックして、このアーカイブのデプロイメント依存関係モジュール情報を定義する方法を確認します。
4.1.6. IronJacamar Tool を使用したデータソースおよびリソースアダプター設定の移行 リンクのコピーリンクがクリップボードにコピーされました!
概要
以前のバージョンのアプリケーションサーバーでは、*-ds.xml の接尾辞が付いたファイルを使用してデータソースとリソースアダプターが設定され、デプロイされていました。IronJacamar 1.1 ディストリビューションには、これらの設定ファイルを JBoss EAP 6 が期待する形式に変換するために使用できる移行ツールが含まれています。ツールは以前のリリースのソース設定ファイルを解析し、XML 設定を作成し、新しい形式で出力ファイルに書き込みます。この XML は、JBoss EAP 6 サーバー設定ファイルの正しいサブシステムの下にコピーおよび貼り付けることができます。このツールは、古い属性と要素を新しい形式に変換するベスト作業を行いますが、生成されたファイルに追加の変更が必要になる場合があります。
手順4.3 IronJacamar Migration ツールのインストールおよび実行
4.1.7. IronJacamar Migration Tool のダウンロードおよびインストール リンクのコピーリンクがクリップボードにコピーされました!
- IronJacamar の最新のディストリビューションを からダウンロードします。 http://www.ironjacamar.org/download.html
- ダウンロードしたファイルを任意のディレクトリーに展開します。
- IronJacamar ディストリビューションでコンバータースクリプトを見つけます。
- Linux スクリプトは、
IRONJACAMAR_HOME/doc/as/converter.shにあります。 - Windows バッチファイルは
IRONJACAMAR_HOME/doc/as/converter.batにあります。
4.1.8. IronJacamar Migration Tool を使用したデータソース設定ファイルへの変換 リンクのコピーリンクがクリップボードにコピーされました!
手順4.4 データソース設定ファイルの変換
- コマンドラインを開き、
IRONJACAMAR_HOME/doc/as/ディレクトリーに移動します。 - 以下のコマンドを入力してコンバータースクリプトを実行します。
- For Linux: ./converter.sh -ds
SOURCE_FILETARGET_FILE - Microsoft Windows の場合: ./converter.bat -ds
SOURCE_FILETARGET_FILE
SOURCE_FILEは以前のリリースのデータソース -ds.xml ファイルです。TARGET_FILEには新しい設定が含まれます。たとえば、現在のディレクトリーにあるjboss-seam-booking-ds.xmlデータソース設定ファイルを変換するには、以下を入力します。- For Linux: ./converter.sh -ds
jboss-seam-booking-ds.xmlnew-datasource-config.xml - Microsoft Windows の場合: ./converter.bat -ds
jboss-seam-booking-ds.xmlnew-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データソース設定ファイルの例です。以下は、Converter スクリプトを実行して生成された設定ファイルです。生成されたファイルにはCopy to Clipboard Copied! Toggle word wrap Toggle overflow <driver-class>要素が含まれます。JBoss EAP 6 でドライバークラスを定義するのに推奨される方法は、<driver>要素を使用することです。以下は、JBoss EAP 6 設定ファイルの結果として生成される XML で、<driver-class>要素をコメントアウトし、対応する<driver>要素を追加します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.1.9. IronJacamar Migration Tool を使用したリソースアダプター設定ファイルへの変換 リンクのコピーリンクがクリップボードにコピーされました!
- コマンドラインを開き、
IRONJACAMAR_HOME/docs/as/ディレクトリーに移動します。 - 以下のコマンドを入力してコンバータースクリプトを実行します。
- For Linux: ./converter.sh -ra
SOURCE_FILETARGET_FILE - Microsoft Windows の場合: ./converter.bat -ra
SOURCE_FILETARGET_FILE
SOURCE_FILEは以前のリリースのリソースアダプター -ds.xml ファイルです。TARGET_FILEには新しい設定が含まれます。たとえば、現在のディレクトリーにあるmttestadapter-ds.xmlリソースアダプター設定ファイルを変換するには、以下を入力します。- For Linux: ./converter.sh -ra
mttestadapter-ds.xmlnew-adapter-config.xml - Microsoft Windows の場合: ./converter.bat -ra
mttestadapter-ds.xmlnew-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リソースアダプター設定ファイルの例です。以下は、Converter スクリプトを実行して生成された設定ファイルです。生成された XML の class-name 属性値 "FIXME_MCF_CLASS_NAME" を、管理接続ファクトリーの正しいクラス名に置き換えます(この場合は "org.jboss.test.jca.adapter.TestManagedConnectionFactory")。以下は、JBoss EAP 6 設定ファイルの生成される XML でCopy to Clipboard Copied! Toggle word wrap Toggle overflow <class-name>要素の値を変更します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
4.2. デバッグ移行の問題 リンクのコピーリンクがクリップボードにコピーされました!
4.2.1. 移行の問題のデバッグおよび解決 リンクのコピーリンクがクリップボードにコピーされました!
4.2.2. debug および Resolve ClassNotFoundExceptions および NoClassDefFoundErrors リンクのコピーリンクがクリップボードにコピーされました!
概要
ClassNotFoundExceptions は通常、解決できない依存関係が原因で発生します。つまり、他のモジュールの依存関係を明示的に定義するか、外部ソースから JAR をコピーする必要があります。
- まず、不足している依存関係を確認してください。詳細は、以下を参照してください。 「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.5 依存関係の検索
- まず、クラスに明らかなモジュールが存在するかどうかを判断します。
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.loggingCopy 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'`
- 複数の結果が表示される場合があります。この場合、以下の結果が必要です。
Binary file ./jboss-eap-5.1/seam/lib/hibernate-validator.jar matches
Binary file ./jboss-eap-5.1/seam/lib/hibernate-validator.jar matchesCopy to Clipboard Copied! Toggle word wrap Toggle overflow - この JAR をアプリケーションの
lib/ディレクトリーにコピーします。多数の JAR が必要な場合は、クラスのモジュールの定義が簡単になります。詳細は、JBoss EAP 6『 『開発ガイド』の「 『スタートガイド』 」の』 章の「 『モジュール』 」を参照して https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/?version=6.4 ください。 - アプリケーションを再ビルドし、再デプロイします。
4.2.5. Debug and Resolve ClassCastExceptions リンクのコピーリンクがクリップボードにコピーされました!
- アプリケーションを検索し、
ClassCastExceptionによって名前が付けられたクラスが含まれるすべての JAR を検索します。クラスにモジュールが定義されている場合は、重複した JAR を見つけ、アプリケーションの WAR または EAR から削除します。 - クラスが含まれる JBoss モジュールを見つけ、
MANIFEST.MFファイルまたはjboss-deployment-structure.xmlファイルで依存関係を明示的に定義します。詳細は、JBoss EAP 6 『の 『『開発ガイド』』 の「 『クラスローディングと』 サブデプロイメント』 」を参照して https://access.redhat.com/documentation/ja-jp/red_hat_jboss_enterprise_application_platform/?version=6.4 ください。 - 上記の手順を使用して解決できない場合は、クラスローダー情報をログに出力して問題の原因を判断できます。たとえば、以下の
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.CustomClass2Copy 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 リンクのコピーリンクがクリップボードにコピーされました!
- JAR ファイルの名前を WAR 以外の名前に変更すると、生成された Web コンテキストと WAR コンテキストが一意となります。
jboss-web.xmlファイルに<context-root>要素を提供します。jboss-webservices.xmlファイルに<context-root>要素を提供します。application.xmlファイルで WAR の<context-root>要素をカスタマイズします。
4.2.7. JBoss Seam Debug Page エラーのデバッグと解決 リンクのコピーリンクがクリップボードにコピーされました!
図4.1 JBoss Seam Debug ページ
- ページの
Componentセクションを展開し、org.jboss.seam.caughtExceptionコンポーネントを見つけます。 - 原因およびスタックトレースは、不足している依存関係を参照するはずです。
図4.2 コンポーネントの
org.jboss.seam.caughtException情報 - 「debug および Resolve ClassNotFoundExceptions および NoClassDefFoundErrors」 で説明されている技術を使用して、モジュール依存関係を解決します。上記の例では、最もシンプルなソリューションは
org.slf4jをMANIFEST.MFに追加することです。Manifest-Version: 1.0 Dependencies: org.slf4j
Manifest-Version: 1.0 Dependencies: org.slf4jCopy 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 に移行する リンクのコピーリンクがクリップボードにコピーされました!
概要
以下のタスク一覧は、jb 2.2 JPA サンプルアプリケーションを JBoss EAP 6 に正常に移行するために必要な変更を要約しています。このサンプルアプリケーションは、EAP5. x_HOME /jboss-eap-5.x/seam/examples/jpa/ の下にある最新の JBoss EAP5 ディストリビューションにあります。
手順4.6 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 - provider モジュールプロパティーを
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-seam-jpa.war/WEB-INF/フォルダーに以下のデータが含まれるjboss-deployment-structure.xmlファイルを作成します。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
結果
Seam 2.2 JPA サンプルアプリケーションは JBoss EAP 6 で正常にデプロイされ、実行されます。
4.3.3. Seam 2.2 書籍の JBoss EAP 6 への移行 リンクのコピーリンクがクリップボードにコピーされました!
概要
Seam 2.2 Book、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 をバンドルします。
- JNDI バインディングを変更して、新しい Java EE 6 の JNDI ポータブル構文を使用するようにします。
手順4.7 Seam 2.2 Booking の例の移行
jboss-deployment-structure.xmlファイルを作成します。jboss-seam-booking.ear/META-INF/にjboss-deployment-structure.xmlという名前の新規ファイルを作成し、以下の内容を追加します。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 - provider モジュールプロパティーを
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 ディストリビューション
EAP5.x_HOME /jboss-eap5.x/seam/lib/ からディレクトリーに以下の JAR をコピーします。jboss-seam-booking.ear/libCopy 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 を使用できないようになりました。これは、アプリケーション EJB JNDI ルックアップ文字列を JBoss EAP 6 に変更する必要があるものです。Seam 2.2 フレームワークの JNDI ルックアップ文字列は、以下のように EJB を変更する必要があります。Copy to Clipboard Copied! Toggle word wrap Toggle overflow 以下の方法の 1 つを使用できます。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 コードの例を以下に示します。このプロセスの詳細な説明は、jb 2.2 リファレンスドキュメント を参照してください。Copy to Clipboard Copied! Toggle word wrap Toggle overflow
結果
Seam 2.2 Booking アプリケーションは JBoss EAP 6 で正常にデプロイされ、実行されます。
4.3.4. Seam 2.2 Booking アーカイブを JBoss EAP 6 に移行します: Step-By-Step Instructions リンクのコピーリンクがクリップボードにコピーされました!
EAP6_HOME/standalone/deployments ディレクトリーにデプロイされます。これにより、問題が発生した場合にアーカイブに含まれる XML ファイルを簡単に変更し、解決することができます。
手順4.8 アプリケーションの移行
4.3.5. JBoss EAP 5.X バージョンの Seam 2.2 Booking アプリケーションのビルドとデプロイ リンクのコピーリンクがクリップボードにコピーされました!
手順4.9 EAR のビルドおよびデプロイ
- EAR をビルドします。
cd /EAP5_HOME/jboss-eap5.x/seam/examples/booking ANT_HOME/ant explode
$ cd /EAP5_HOME/jboss-eap5.x/seam/examples/booking $ ANT_HOME/ant explodeCopy to Clipboard Copied! Toggle word wrap Toggle overflow jboss-eap5.x を、移行する JBoss EAP のバージョンに置き換えます。 - EAR を EAP6_HOME deployments ディレクトリーにコピーします。
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.earCopy 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.dodeployINFO [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.dodeployCopy to Clipboard Copied! Toggle word wrap Toggle overflow jboss-seam-booking.ear.dodeployという名前で空のファイルを作成し、EAP6_HOME/standalone/deploymentsディレクトリーにコピーします。このアプリケーションの移行中にこのファイルを 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 アーカイブを JBoss EAP 6 に移行します: Step-By-Step Instructions」
4.3.6. アーカイブデプロイメントエラーと例外のデバッグおよび解決 リンクのコピーリンクがクリップボードにコピーされました!
手順4.10 デプロイメントエラーと例外のデバッグおよび解決
- Issue - 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.2Copy to Clipboard Copied! Toggle word wrap Toggle overflow javax.faces.apiを持ちますが、メインディレクトリーの 1 つが JSF 2.0 用で、1.2 ディレクトリーにあるものは JSF 1.2 用です。利用可能なモジュールが 1 つしかない場合は、MANIFEST.MFファイルを作成し、モジュール依存関係を追加するだけです。ただし、この場合は、main で 2.0 バージョンではなく JSF 1.2 バージョンを使用したい場合は、1 つを指定してもう 1 つのバージョンを除外する必要があります。これには、以下のデータが含まれる 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 - Issue - 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ファイルを変更して、モジュール依存関係をファイルの deployment セクションに追加します。<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 - issue - 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ファイルを変更して、モジュール依存関係をファイルの deployment セクションに追加します。<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 - Issue - 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.X デプロイメントの一部でした。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 matchesCopy 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/libCopy 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.でApplicationFactoryアプリケーションをデプロイする場合、ログには以下のエラーが含まれます。
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.FacesExceptionClassNotFoundExceptionでは、メインの JSF 2.0 バージョンではなく JSF 1.2 バージョンを使用する必要があるため、1 つを指定して別のバージョンを除外する必要があります。jboss-deployment-structure.xmlを変更して、モジュールの依存関係をファイルの deployment セクションに追加します。また、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 - Issue - 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/ ディレクトリーでモジュール名を見つけます。モジュール名は "org.apache.commons.collections" です。/collectionsパスを確認して、EAP6_HOME/modules/system/layers/basejboss-deployment-structure.xmlを変更し、モジュール依存関係をファイルの deployment セクションに追加します。<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 - 問題: 利用できない依存関係/利用できない依存関係のあるサービスアプリケーションをデプロイする場合、ログには以下のエラーが含まれます。
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" はエンティティーマネージャーおよびデータソースの問題を示します。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/ にアクセスし、「Account Login」を試みると、「The page doesn't redirecting properly」というランタイムエラーが表示されます。次の手順では、ランタイムエラーをデバッグし、解決する方法を説明します。ランタイムの問題をデバッグおよび解決する方法については、こちらをクリックします。 「アーカイブランタイムエラーと例外をデバッグおよび解決」前のトピックに戻るには、ここをクリックしてください。 「Seam 2.2 Booking アーカイブを JBoss EAP 6 に移行します: Step-By-Step Instructions」
4.3.7. アーカイブランタイムエラーと例外をデバッグおよび解決 リンクのコピーリンクがクリップボードにコピーされました!
手順4.11 ランタイムエラーと例外のデバッグおよび解決
- Issue - javax.naming.NameNotFoundException: Name 'jboss-seam-booking' not found in context ''ブラウザーで URL http://localhost:8080/seam-booking/ にアクセスすると、「The page doesn't redirecting correctly」が表示され、ログに以下のエラーが表示されます。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 意味:
NameNotFoundExceptionは JNDI 命名の問題を示します。JBoss EAP 6 では JNDI の命名規則が変更されたため、ルックアップ名を変更して新しいルールに従う必要があります。解決方法:
これをデバッグするには、サーバーログトレースで以前使用された JNDI バインディングを確認します。以下のサーバーログを確認してください。
ログには合計 8 INFO の JNDI バインディングがリストされています。各セッション Bean には、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」というメッセージが表示されて失敗します。トランザクションに失敗しました。" サーバーログに例外トレースが表示されるはずです。
Copy to Clipboard Copied! Toggle word wrap Toggle overflow 意味:
ClassNotFoundException は Hibernate ライブラリーがないことを示します。この場合、
hibernate-core.jarになります。解決方法:
hibernate-core.jarJAR を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/ にアクセスすると、正常にログインできます。ただし、ホテルを予約しようとすると、例外トレースが表示されます。これをデバッグするには、まず true エラーをマスクするために
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/ReflectionManagerCopy to Clipboard Copied! Toggle word wrap Toggle overflow 意味:
NoClassDefFoundError は Hibernate ライブラリーがないことを示します。
解決方法:
hibernate-annotations.jarおよびhibernate-commons-annotations.jarJAR を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 に移行します: Step-By-Step Instructions」
4.3.8. Seam 2.2 Booking アプリケーションの移行時の変更の概要の確認 リンクのコピーリンクがクリップボードにコピーされました!
- EAR の
META-INF/ディレクトリーにjboss-deployment-structure.xmlファイルが作成されている。<dependencies>を解決するために、<exclusions>およびClassNotFoundExceptionsを追加している。このファイルには、以下のデータが含まれます。Copy to Clipboard Copied! Toggle word wrap Toggle overflow - 以下の JAR を
EAP5_HOME/jboss-eap-5.X/seam/lib/ディレクトリー(移行元の EAP 5 のバージョンに置き換えます)からjboss-seam-booking.ear/lib/ディレクトリーにコピーされ、ClassNotFoundExceptionsを解決します。- hibernate-core.jar
- hibernate-validator.jar
jboss-seam-booking.jar/META-INF/persistence.xmlファイルを以下のように変更している。- JBoss EAP 6 に同梱される Example データベースを使用するよう
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 改訂履歴 リンクのコピーリンクがクリップボードにコピーされました!
| 改訂履歴 | |||
|---|---|---|---|
| 改訂 6.4.0-42 | Thursday November 16 2017 | ||
| |||