Hitachi

Cosminexus V11 アプリケーションサーバ 機能解説 基本・開発編(コンテナ共通機能)


付録B.4 ライブラリ競合回避機能

ここでは,ライブラリ競合回避機能について説明します。

〈この項の構成〉

(1) ライブラリ競合回避機能の概要

ライブラリ競合回避機能は,クラス・リソースをロードするときの検索順序を変更し,ユーザアプリケーションに含まれるライブラリを優先して参照できるようにする機能です。この機能を使用すると,ユーザアプリケーションに含めることができないライブラリを,ユーザアプリケーションに含めることができます。ユーザアプリケーションに含めることができないライブラリについては,「20.4 ユーザアプリケーションに含めるライブラリの注意事項」を参照してください。

注意事項

この機能を使用するときの注意事項を次に示します。

  • V9互換モードではこの機能は使用できません。

  • この機能は,デフォルトのクラスローダ構成の場合にだけ有効になります。デフォルトのクラスローダ構成については「付録B.1 デフォルトのクラスローダ構成」を参照してください。

  • ローカル呼び出し最適化時のクラスローダ構成の場合,この機能は無効になります。ローカル呼び出し最適化時のクラスローダ構成については「付録B.2 ローカル呼び出し最適化時のクラスローダ構成」を参照してください。

  • 「java.」から始まるパッケージのクラスは,この機能では検索できません。

(2) クラス・リソースの検索順序

ライブラリ競合回避機能のクラス・リソースの検索順序を次の図に示します。

図B‒3 クラス・リソースの検索順序

[図データ]

この図では,JSP以外のクラスを検索する場合の検索順序を示しています。JSP以外のクラスを検索する場合,親クラスローダに委譲します。親クラスローダでクラスが見つからなかったときも,JSPクラスローダでは検索しません。JSPのクラスを検索する場合,JSPクラスローダは,親クラスローダに委譲せずJSPクラスローダだけを検索します。

(3) クラス・リソースの検索処理

ライブラリ競合回避機能の有効・無効の設定および検索対象によって,クラス・リソースの検索処理が変わります。詳細を次の表に示します。

表B‒1 クラス・リソースの検索処理

有効・無効の設定

検索対象

検索処理

無効

クラス

  • アプリケーションクラスローダの場合

  1. 親クラスローダに,検索を委譲します。

    検索に成功した場合,クラスを返し処理を終了します。

    検索に失敗した場合,次の処理を実施します。

  2. 自身のクラスローダでクラスを検索します。

    検索に成功した場合,クラスを返し処理を終了します。

    検索に失敗した場合,ClassNotFoundExceptionをスローします。

  • Webアプリケーションクラスローダの場合

  1. 検索対象が「java.」から始まる場合,システムクラスローダに,検索を委譲します。

    検索に成功した場合,クラスを返し処理を終了します。

    検索に失敗した場合,ClassNotFoundExceptionをスローします。

  2. 親クラスローダに,検索を委譲します。

    検索に成功した場合,クラスを返し処理を終了します。

    検索に失敗した場合,次の処理を実施します。

  3. 自身のクラスローダでクラスを検索します。

    検索に成功した場合,クラスを返し処理を終了します。

    検索に失敗した場合,ClassNotFoundExceptionをスローします。

リソース

  1. 親クラスローダに,検索を委譲します。

    検索に成功した場合,リソースを返し処理を終了します。

    検索に失敗した場合,次の処理を実施します。

  2. 自身のクラスローダでリソースを検索します。

    検索に成功した場合,リソースを返し処理を終了します。

    検索に失敗した場合,nullを返します。

有効

対象パッケージから始まるクラス

  1. 自身のクラスローダでクラスをロードします。

    検索に成功した場合,クラスを返し処理を終了します。

    検索に失敗した場合,次の処理を実施します。

  2. 親クラスローダに,検索を委譲します。

    検索に成功した場合,クラスを返し処理を終了します。

    検索に失敗した場合,ClassNotFoundExceptionをスローします。

対象パッケージ以外から始まるクラス

  • アプリケーションクラスローダの場合

  1. 親クラスローダに,検索を委譲します。

    検索に成功した場合,クラスを返し処理を終了します。

    検索に失敗した場合,次の処理を実施します。

  2. 自身のクラスローダでクラスを検索します。

    検索に成功した場合,クラスを返し処理を終了します。

    検索に失敗した場合,ClassNotFoundExceptionをスローします。

  • Webアプリケーションクラスローダの場合

  1. 検索対象が「java.」から始まる場合,システムクラスローダに,検索を委譲します。

    検索に成功した場合,クラスを返し処理を終了します。

    検索に失敗した場合,ClassNotFoundExceptionをスローします。

  2. 親クラスローダに,検索を委譲します。

    検索に成功した場合,クラスを返し処理を終了します。

    検索に失敗した場合,次の処理を実施します。

  3. 自身のクラスローダでクラスを検索します。

    検索に成功した場合,クラスを返し処理を終了します。

    検索に失敗した場合,ClassNotFoundExceptionをスローします。

対象パッケージのファイル(リソースとして取得する場合),または対象リソース

  1. 自身のクラスローダでリソースを検索します。

    検索に成功した場合,リソースを返し処理を終了します。

    検索に失敗した場合,次の処理を実施します。

  2. 親クラスローダに,検索を委譲します。

    検索に成功した場合,リソースを返し処理を終了します。

    検索に失敗した場合,nullを返します。

対象パッケージのファイル(リソースとして取得する場合)と対象リソース以外

  1. 親クラスローダに,検索を委譲します。

    検索に成功した場合,リソースを返し処理を終了します。

    検索に失敗した場合,次の処理を実施します。

  2. 自身のクラスローダでリソースを検索します。

    検索に成功した場合,リソースを返し処理を終了します。

    検索に失敗した場合,nullを返します。

(4) 設定方法

ライブラリ競合回避機能の有効・無効の設定,対象パッケージおよび対象リソースは,J2EEサーバのusrconf.propertiesのシステムプロパティで設定します。各設定項目のシステムプロパティを次の表に示します。

表B‒2 ライブラリ競合回避機能のシステムプロパティ

設定項目

システムプロパティ

有効・無効

ejbserver.deploy.LibraryConflictAvoid.<J2EEアプリケーション名>.enabled

対象パッケージ

ejbserver.deploy.LibraryConflictAvoid.<J2EEアプリケーション名>.package

対象リソース

ejbserver.deploy.LibraryConflictAvoid.<J2EEアプリケーション名>.resource

システムプロパティの詳細は,「アプリケーションサーバ リファレンス 定義編(サーバ定義)」の「2.2.3(5)(j) ejbserver.deployから始まるキー」を参照してください。

(5) 設定が有効になった場合の通知

アプリケーションクラスローダ生成時にライブラリ競合回避機能が有効な場合,ライブラリ競合回避機能が有効であることを示すメッセージ「KDJE42411-I」をアプリケーションごとにメッセージログに出力します。