パッケージ jakarta.faces

クラス FactoryFinder


  • public final class FactoryFinder
    extends ObjectSE

    FactoryFinder は、Jakarta Faces API で指定されたすべてのファクトリオブジェクトの標準検出アルゴリズムを実装します。指定されたファクトリクラス名について、対応する実装クラスが次のアルゴリズムに基づいて検索されます。アイテムは、検索の優先順位の高い順にリストされています。

    • webapp の WEB-INF ディレクトリにバンドルされている Jakarta Faces 構成ファイルに、指定されたファクトリクラス名の factory エントリが含まれている場合、そのファクトリが使用されます。

    • jakarta.faces.CONFIG_FILES ServletContext 初期化パラメーターで指定された Jakarta Faces 構成ファイルに、指定されたファクトリクラス名の factory エントリが含まれている場合、それらの injectionProvider が使用され、最後のエントリが優先されます。

    • ServletContext のリソースパス上の jar の META-INF ディレクトリにバンドルされている Jakarta Faces 構成ファイルがある場合、それらのファイル内の指定されたファクトリクラス名の factory エントリが使用され、最後のエントリが優先されます。

    • META-INF/services/{factory-class-name} リソースが呼び出し元アプリケーションの Web アプリケーションクラスローダーに表示されている場合 (通常は、JAR ファイルのマニフェストに存在する injectionProvider として)、その最初の行が読み取られ、使用するファクトリ実装クラスの名前であると見なされます。

    • 上記の手順のいずれも一致しない場合、Jakarta Faces 実装固有のクラスが使用されます。

    上記のいずれかの手順で見つかった injectionProvider のいずれかに、引数の型が抽象ファクトリクラスである 1 つの引数コンストラクターがある場合、そのコンストラクターが呼び出され、前の一致がコンストラクターに渡されます。例: コンテナーベンダーが FacesContextFactory の実装を提供し、Web アプリケーション ClassLoader の jar の META-INF/services/jakarta.faces.context.FacesContextFactory でそれを識別したとします。また、コンテナーベンダーによって提供されたこの実装には、FacesContextFactory インスタンスを受け取る 1 つの引数コンストラクターがあったとします。FactoryFinder システムは、その 1 つの引数コンストラクターを呼び出し、Jakarta Faces 実装によって提供された FacesContextFactory の実装を渡します。

    Factory 実装が適切な 1 つの引数のコンストラクターを提供しない場合、正常にインスタンス化するには、引数のないコンストラクターを提供する必要があります。

    ファクトリ実装クラスの名前が見つかると、呼び出し元アプリケーションの Web アプリケーションクラスローダーがこのクラスをロードするようにリクエストされ、クラスの対応するインスタンスが作成されます。このルールの副作用は、Jakarta Server Faces 実装が Web アプリケーションに含まれているか、共有ライブラリのコンテナーの機能を通じて表示されるかに関係なく、各 Web アプリケーションが各ファクトリクラスの独自のインスタンスを受け取ることです。

    • メソッドの詳細

      • getFactory

        public static ObjectSE getFactory​(StringSE factoryName)
                                 throws FacesException

        クラスの説明で説明されている検出アルゴリズムに基づいて、指定された Jakarta Faces ファクトリクラスの適切な実装クラスの Web アプリケーションごとのインスタンスを(必要に応じて)作成して返します。

        標準の injectionProvider と Jakarta Faces のラッパーはすべて、インターフェース FacesWrapper を実装しています。返された Object が標準の injectionProvider の 1 つの実装である場合、それを FacesWrapper のインスタンスにキャストし、そのインスタンスで FacesWrapper.getWrapped() を呼び出すことは有効である必要があります。

        パラメーター:
        factoryName - 実装インスタンスがリクエストされる Jakarta Faces ファクトリの完全修飾名
        戻り値:
        見つかったファクトリインスタンス
        例外:
        FacesException - Web アプリケーションクラスローダーを識別できない場合
        FacesException - 構成されたファクトリ実装クラスのインスタンスをロードできない場合
        FacesException - 構成されたファクトリ実装クラスのインスタンスをインスタンス化できない場合
        IllegalArgumentExceptionSE - factoryName が標準の Jakarta Faces ファクトリ名を識別しない場合
        IllegalStateExceptionSE - 指定されたファクトリ名に設定されたファクトリ実装クラスがない場合
        NullPointerExceptionSE - factoryname が null の場合
      • setFactory

        public static void setFactory​(StringSE factoryName,
                                      StringSE implName)

        このメソッドは、一致を検索するときに getFactory(java.lang.String) がこのマッピングを見つけるように、引数 factoryName/implName マッピングを格納します。

        この factoryName のファクトリを探して getFactory() がすでに呼び出されている場合、この方法は効果がありません。

        このメソッドは、Faces 構成ファイルの解析中にファクトリマッピングを保存するために実装で使用できます。

        パラメーター:
        factoryName - 後続の getFactory(java.lang.String) の呼び出しで使用される名前。
        implName - factoryName に対応するファクトリの完全修飾クラス名。
        例外:
        IllegalArgumentExceptionSE - factoryName が標準の Jakarta Faces ファクトリ名を識別しない場合
        NullPointerExceptionSE - factoryname が null の場合
      • releaseFactories

        public static void releaseFactories()
                                     throws FacesException

        呼び出し元の Web アプリケーションのクラスローダーに関連付けられているファクトリインスタンスへの参照をすべて解放します。このメソッドは、Web アプリケーションのシャットダウン中に呼び出す必要があります

        例外:
        FacesException - Web アプリケーションクラスローダーを識別できない場合