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

suga [E-MAIL ADDRESS DELETED]
2016年 2月 28日 (日) 13:09:44 JST


suga です。

ありがとうございます。

isNew()を呼んで IllegalStateException をcatchするのが良さそうですね。
そのように修正します。


--
suga ( ko.suga @ gmail.com )


2016-02-25 15:45 GMT+09:00 gmail <adgjmgtwyama @ gmail.com>:
> いつもお世話になっております。
> 山﨑と申します。
>
> 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>
>
> _______________________________________________
> mayaa-user mailing list
> mayaa-user @ ml.seasar.org
> https://ml.seasar.org/mailman/listinfo/mayaa-user


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