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

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

このタスクについて

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

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

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

  • クラスがアプリケーション内にパッケージ化されている場合は、 server.xml 構成ファイル内の classloader エレメントまたはそれに含まれるファイルを使用して、デフォルトの parentFirst 委任動作をオーバーライドします。
    <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 アプリケーションでのライブラリーの共有を参照してください。