ブログトップ 記事一覧 ログイン 無料ブログ開設

水まんじゅう

 | 

2011-07-19

HttpSession IllegalStateException:セッションは既に無効化されています

昔の本を読むとHttpSessionにアクセスする場合には必ず同期化するようにと書いてあった気がしたけれども、
最近の書籍を読むとそれが書いていないことが多い。
どうして書かれなくなったのだろうか?

Sessionにアクセスする場合には同期化をする必要がある。
なぜならば、クライアントからのアクセスがSerializeされてくるとは限らないから。
複数のRequestが同時にひとつのHttpSessionにアクセスしてしまうことがある。
特に気を付けないといけないのはセッションを切るとき。
セッションを切るときにはHttpSession#invalidate()を呼び出すけれども、
JavaEE仕様だとHttpSessionが無効化されているかを呼び出す前に検知ができない。
また、無効化されていたときにHttpSession#invalidate()を改めて呼び出すとエラーとなってしまう。
そのため、IllegalStateExceptionを必ずキャッチしてあげなければいけない。
Exceptionをキャッチするのが変に感じる人が板としてもJ2EEJavaDocにもSessionがすでに無効化されている場合にはIllegalStateExceptionが投げられると書かれているのだからしょうがない。

TomcatのHttpSession実装を見てみるとisValidというSessionが有効かどうかを判定するメソッドがあるのだけれども、HttpSessionにも公開してくれないのだろうかねぇ。

※JavaEE5ぐらいの話。

スパム対策のためのダミーです。もし見えても何も入力しないでください
ゲスト


画像認証

トラックバック - http://d.hatena.ne.jp/megascus/20110719/1311085054
 |