代替バージョンでの提供 API のオーバーライド

アプリケーションが Liberty でも使用可能なクラスを提供 (またはそのようなクラスを提供するライブラリーを使用) している場合は、デフォルトでは、Liberty のクラスが使用されます。これを変更してそれらのクラスの代替バージョンをアプリケーションが使用するようにするには、server.xml ファイルまたは組み込まれたファイルでアプリケーションを構成する必要があります。

このタスクについて

Web アプリケーションに、サーバー・ランタイム環境内にも存在するクラスが含まれている場合、それらのクラスのどちらのコピーをアプリケーションが使用するかを制御したいことがあります。例えば、アプリケーションとサーバー・ランタイム環境の両方にそのクラスがあり、クラスのバージョンが異なっている場合、アプリケーションにパッケージされているバージョンが確実に使用されるようにする必要があります。

デフォルトでは、Liberty のランタイム環境にあるクラスが、すべての Java™ EE アプリケーションによって使用されます。クラス・ローダー構成の delegation 属性を使用して、この動作をオーバーライドすることができます。 この構成は、特定のアプリケーションに固有であるか、またはアプリケーションによって使用されるように選択可能な共有ライブラリーに固有です。

以下の例では、Scholar というアプリケーションは、Liberty で使用可能なクラスのコピーを使用するのではなく、自身が提供する (または自身が使用するライブラリーで提供される) クラスを使用する必要があります。

  • クラスがアプリケーション内にパッケージされている場合は、デフォルトの parentFirst 委任動作を、server.xml 構成ファイルまたはそのファイルがインクルードするファイル内にある classloader エレメントによってオーバーライドします。
    <application id="" name="Scholar" type="ear" location="scholar.ear">
      <classloader delegation="parentLast" />
    </application>
    これは、アプリケーションおよびその関連ライブラリーでクラスを検索した後にはじめて Liberty クラスを検索するようにアプリケーション・クラス・ローダーに指示します。
  • クラスが共有ライブラリー内にパッケージされている場合は、以下のように、共有ライブラリーを使用するかどうかを構成する classloader エレメントに delegation 属性を追加します。
    <application id="" name="Scholar" type="ear" location="scholar.ear">
      <classloader delegation="parentLast" commonLibraryRef="mySharedLib"/>
    </application>
    
    <library id="mySharedLib">
      <fileset dir="${server.config.dir}/myLib" includes="*.jar" />
    </library>

また、アプリケーション内の専用ライブラリーとして privateLibraryRef 属性を使用できます。『複数の Java EE アプリケーションでのライブラリーの共有』を参照してください。


トピックのタイプを示すアイコン タスク・トピック



タイム・スタンプ・アイコン 最終更新: Monday, 5 December 2016
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-libcore-mp&topic=twlp_classloader_alt_api
ファイル名: twlp_classloader_alt_api.html