第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 |