[mayaa-user:1057] HttpSessionがinvalidatedのときIllegalStateExceptionが発生する

gmail [E-MAIL ADDRESS DELETED]
2016年 2月 25日 (木) 15:45:34 JST


いつもお世話になっております。
山?と申します。

2点ご報告させていただきたくご連絡いたしました。

HttpSessionがinvalidatedの状態で、MayaaSerlvletにフォワードすると
サーブレット内でIllegalStateExceptionが発生しました。

スタックトレースを確認したところ、
SessionScopeImpl#hasAttributeの_httpSession.getAttributeNamesの先で発生しておりました。

SessionScopeImplのソースを確認したところ、Session already invalidatedの場合の対応として、
SessionScopeImpl#checkで_httpSession.getId()を呼び出し、
IllegalArgumentExceptionをキャッチして_httpSessionをnullにする処理が入っているかと思いますが、
そこで2点確認させてください。

1.
キャッチする例外はIllegalArgumentExceptionではなく、IllegalStateExceptionが正しい?

2.
_httpSession.getId()ではなく、isNew()やgetLastAccessedTime()のほうが良い?
→
現在、実行環境としてJboss EAP 6.4を使っているのですが、
invalidatedのときでもgetId()では、IllegalStateExceptionが発生いたしません。
(getAttributeNamesでは発生します。)

OracleのjavaEEのJavadocを確認したところ、HttpSession#getIdでは、
HttpSessionがinvalidatedの状態でIllegalStateExceptionが発生するという規定はなく
isNewやgetAttributeNamesではIllegalStateExceptionが発生するという規定がありました。
ただ、Tomcatのservletapiの仕様ではHttpSession#getIdでIllegalStateExceptionが発生するという規定がありました。

私のほうでは、本件を回避する対策として、
SessionScopeImplを継承するクラスを作成して、isNew()を呼ぶようにしております。

利用バージョンはmayaaのgithubのmasterブランチの最新(Commits on Apr 13, 2014)をクローンしたものを使っています。

参考URL
<http://docs.oracle.com/javaee/6/api/javax/servlet/http/HttpSession.html>
<https://tomcat.apache.org/tomcat-5.5-doc/servletapi/javax/servlet/http/HttpSession.html>
-------------- next part --------------
HTMLの添付ファイルを保管しました...
URL: <http://ml.seasar.org/archives/mayaa-user/attachments/20160225/651d4695/attachment.html>


mayaa-user メーリングリストの案内