JSF 2 のスキャンパッケージのルート指定

JSF 2.0ではアノテーションによって環境設定ファイルを書かなくてよくなった。

ただ、そのアノテーションがついたファイルはどこから探し出すのだろうか。

全部検索していたら当たり前だが、遅い。

また、知らないうちに勝手に管理対象Beanとして登録されるのも避けたい。バックドアが出来てしまうかもしれないためだ。

SpringやT2のコンポーネントスキャンのルートパッケージ指定はJSF2にもあった。ただし、ここは実装依存のようだ。


RIのMojarraでは「com.sun.faces.annotationScanPackages」をコンテキストパラメータに書くことによって制御可能だ。ホワイトスペース区切りで複数個所も指定可能。また、特定のjarの中の特定のパッケージとか細かい設定が出来る。


jarファイル指定の場合以下のようにコロンで区切る。

jar:「jarファイル名」:「パッケージ名」

jarファイル名を指定した場合のパッケージ名はカンマ区切りで複数指定可能だ。


WEB-INF/classesのなか全てを検索したい場合は

*

とするとよい。アスタリスクワイルドカードでこれはjarファイル名やjarファイルの中のパッケージ名でも使える。


デフォルトではWEB-INF/classesの中のみならずすべてのjarファイルの中を全部探しに行くようだ。スタートアップの時間が問題になるGoogle App Engineでは積極的に使用していきたい。というか、普段でも設定したほうがいいかも。

JavaEE標準APIだけならばlibファイルはほとんどないため、問題になることは少ないと思うがTomcatのようなサーブレットエンジンしか持たないようなやつとかだとブート時間は増えていくだろうし。

というわけでGAEのサンプルもパッケージ指定しておいた。これで3つのファイルしかスキャンしない。負荷が少しでも減ってくれれば。