BLOGTIMES
2004/09/08

Seasar2でHttpSessionにアクセス

 
このエントリーをはてなブックマークに追加

Seasar2を使ってWebアプリケーションを作っていると、コンポーネントからHttpSessionにアクセスしたいという場合が出てきます。

問題はコンポーネントにどうやってHttpSessionを渡せばよいかというこなんですが、単純にコンポーネントの引数から渡すことで最低限の目標は達成できるというのはわかっています。ただ、これはちょっとダサい(というか問題がある)ソリューションです。なぜならば、コンポーネントがHttpSessionに依存してしまうため、JUnitなどのツールによる単体テストが大変になってしまうからです。

何かSeasarらしいいいアイディアがないかなぁとあれこれ考えてはみたものの、なかなかスマートな解決方法が見つからずに困っていました。

Contextを保持するコンポーネントを作ればいいのか

これを見事に解決できるアイディアが、Seasar2の作者であるひがさんのダイアリーに載っていました。

はてなダイアリー - ひがやすをのここだけの話

HttpServletRequestにアクセスしたいコンポーネントは、RequestContextをDIしてもらえばいいのです。テストのときには、ThreadLocalを使わないRequestContextの実装を使い、ThreadLocalの副作用を避けます。

ステートレスなビジネスロジックということにばかり頭が行っていて、Contextを保持するコンポーネントを作るという発想がぜんぜんありませんでした。これはいいですね。

さらにスマートに

いちいちRequestとResponseをコンポーネントにセットするのが面倒くさかったので、それを自動的にやってくれるServletFilterもついでに書いてしまいました。

我ながらこれはいい感じに出来たと思います


    トラックバックについて
    Trackback URL:
    お気軽にどうぞ。トラックバック前にポリシーをお読みください。[policy]
    このエントリへのTrackbackにはこのURLが必要です→https://blog.cles.jp/item/355
    Trackbacks
    このエントリにトラックバックはありません
    Comments
    愛のあるツッコミをお気軽にどうぞ。[policy]
    古いエントリについてはコメント制御しているため、即時に反映されないことがあります。
    コメントはありません
    Comments Form

    コメントは承認後の表示となります。
    OpenIDでログインすると、即時に公開されます。

    OpenID を使ってログインすることができます。

    Identity URL: Yahoo! JAPAN IDでログイン