(注:このブログはもう更新していません)この日記は私的なものであり所属会社の見解とは無関係です。 GitHub: takahashikzn

[クラウド帳票エンジンDocurain]

HttpSessionActivationListenerの使い方

HttpSessionが永続化ならびに活性化されるイベントを拾いたくなりました。
具体的には、HttpSessionに入れた値の幾つかを、永続化時に削除したいという要求です。


で、HttpSessionActivationListenerというのを使えばいいということが判明したのですが、
ググってみても、イマイチ使い方がはっきりしない。
web.xmlに設定する必要はない、という記述を見かけたのですが、じゃあどこで指定するんだ?という疑問が。

結論から言うと

セッションに関連付けられた属性値にHttpSessionActivationListenerを実装させれば良いようです。
で、セッションを永続化するならば、値はSerializableでなければならない。だから、

public class MySessionListener implements HttpSessionActivationListener, Serializable {

    public void sessionWillPassivate(HttpSessionEvent se) {
        // セッションの特定の値を消すコード
    }

    ...
}

というクラスを作って、このインスタンスを適当なキーでセッションに入れておけばOKです。


Tomcatの場合、org.apache.catalina.session.StandardSession#passivateでsessionWillPassivateが呼ばれます。