[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 メーリングリストの案内