S_a_k_Uの日記みたいなDB

~サクゥーと呼ばないで~

WebApplicationContext

@IT > テクノロジー > Java Solution >
Spring 2.0で自分なりの開発スタイルを確立しよう
この「request」「session」とかってスコープのBeanで取り回すのが無難か?
やりたいのは「バウンダリ(Servlet)からコントローラ(POJO)へ値を渡すメカニズムの実装」な訳で。
値は引数ではなく、開発基盤としての情報で、リクエストしたアクタを含むバウンダリのプロファイル的な感じのセッション情報。もちろんバウンダリの中では、HTTPSessionのセッション情報を参照することでOKな訳ですが。
AOPでスレッドIDが異なる(場合がある)時点で、ThreadLocalでの値の参照はできないってことだけど、MyFacesのFacesContextは、ThreadLocalで保持されてて、コントローラの入り口(AOPのBeforeAdvice)で参照できない(場合がある)ってのが現状の問題。
調べてみると、セッション情報取得のタイミングと、参照先に問題があった。
JSFの世界では、HTTPSessionに持たせて、そこから参照。
POJOの世界では、開発基盤の専用エリアに持たせて、そこから参照。
んなのに、JSFの世界で開発基盤の専用エリアに参照しに行ってたらしい。
とりあえずfilterで、HTTPSessionから取得したセッション情報を、開発基盤の専用エリアにも持たせることで解決。
アーキテクチャとして、セッション情報を参照する場合は、全てのクラスが開発基盤の専用エリアを参照する、ということにして、抽象クラスを改造してみる。
結局、問題の発生状況をちゃんと確認してなかったのが問題でしたorz