PagePhaseListener のメモ

ADFには、JSFのPhaseEventとは別に、ページライフサイクルの各フェーズの開始・終了で発火するPagePhaseEventというのがあります。

こいつのリスナ、PagePhaseListener は、呼ばれるフェーズを選択できず、毎フェーズの開始/終了で必ず呼ばれます(JSFでいうところの「ANY_PHASE」)。ページ生成時に一回だけ呼ばれる前提でリソースを確保すると、えらいことになるので注意。

フェーズの順序は、開発者ガイドの以下のページで説明されています。

http://otndnld.oracle.co.jp/document/products/jdev/11/doc_cd/web.1111/B52028-01/adf_lifecycle.htm

…とまあここまで書いておいてなんですが、大抵の用途ではJSFのPhaseListenerだけで事足りると思います(というか、PagePhaseListenerのアドバンテージが今ひとつ思い浮かばない)。

それから、JSFでも同様ですが、複数コンポーネントの書き換えが同時に発生する場合は、ひとつのスレッドで上記のライフサイクルが複数回回ったりするのでこれも注意。

DB接続のようなリソースを、1リクエストの中で確保して解放、というような時は、ここではなく、素直にServletFilterとして組み込んだほうが安全ですね。

PhaseEvent, PagePhaseEvent をそれぞれ拾って、フェーズ名をログに出力するコードを置いときます。両方組み込んで実行すると、JSF,ADFの各フェーズがどういう絡みになっているか、なんとなく読み解けるかも。

https://github.com/shout-poor/Smallcodes/tree/master/study_adf