JSF 1 から移行された Glassfish 3.1.1 で実行されている JSF 2.0 アプリケーションがあります。
<managed-bean>
<managed-bean-name>OnlineBeanHandler</managed-bean-name>
<managed-bean-class>X.jsf.OnlineBeanHandler</managed-bean-class>
<managed-bean-scope>session</managed-bean-scope>
...
</managed-bean>
これは#{OnlineBeanHandler}
、facelet ページで使用できるようにするために行われました。うまくいきます。また、OnlineBeanHandler内で@ javax.inject.Inject を使用して CDI マネージド Bean を取得することもできます。これを @javax.enterprise.inject.Alternative としてマークし、beans.xml で有効にすることで代替手段を提供できます。うまくいきます。
ここで、OnlineBeanHandler 自体に対して同じメカニズムを機能させる必要があります。つまり、<managed-bean>
-handling コードで、明示的に指定されたクラスではなく代替クラスを呼び出しますが、同じ手順を実行すると、代替クラスの代わりに基本クラスが取得されます。
これを直接行うことはできますか?
どうやら、このメカニズムはそこでは機能しません。現在の状況では、さらに別のfaces-config.xmlファイルを作成して、そこにあるプロジェクトによってそれらをオーバーライドするだけで済みます。その後、代替の faces-config.xml が各プロジェクトによって提供されます。