Tsutomu Yano
benbr****@mac*****
2008年 6月 24日 (火) 05:04:50 JST
矢野です。 自分のポストの訂正です。といっても結論が変わるわけではありませんが。 > それぞれの<filter>タグに別のWebApplicationクラスが指定されていたとしても、WicketFilterは一つのクラス > だけでそれらを切り替えて処理できなければいけません。リクエストごとにどっちの<filter>タグで処理される > のかは不明ですから、リクエストが来るたびにWicketFilterはWebApplicationを切り替えてやらないといけない > ことになります。WebApplicationをstatic変数に保存することはできません。 この部分ですが、よく考えると、サーブレットの場合は<servlet>タグの数分だけインスタンスが生成 されるので、フィルタの場合も<filter>の数だけインスタンスが生成されるのでしょう。だから各インスタンス が個別のアプリケーションクラスをロードできることになります。 ただ結局 Application.get() というstaticメソッドの形でWebApplicationインスタンスを取り出すには、static変数に格納するなど staticコンテキストからアクセスできる場所にインスタンスを格納しなければなりません。 インスタンスが複数起動してもクラスが一つしかロードされないのは変わりませんから、static変数は 保管場所として適当ではありません。 それで結局ThreadLocalという同じ結論になるかと思います。 ちなみにリクエスト・レスポンスの間だけ使えるオブジェクトをThreadLocalに保存する手法は 割と良く使われるのでイディオムみたいなものだと思います。コネクションを持ち回ったりする場合な んかも使うように思います。 --------------------------------------------------- 矢野 勉(やの つとむ) 電子メール:benbrand_at_mac.com ---------------------------------------------------