ログアウト||セッションタイムアウト時に処理したい


どっかにオーバーライドする場所あるかねえとかWebSessionとかのソースたどり始めて、ふと思う。
これで動くんじゃね?

public class TestSession extends WebSession implements HttpSessionBindingListener {

    private static final long serialVersionUID = 1L;

    protected TestSession(Request request){
        super(request);
    }

    @Override
    public void valueBound(HttpSessionBindingEvent event) {
        System.out.println("**** セッション生成 ****");
    }

    @Override
    public void valueUnbound(HttpSessionBindingEvent event) {
        System.out.println("**** セッション破棄 ****");
    }
}

HttpSessionBindingListenerていうのは、あれです。セッションが生成/破棄されたとき通知してくれるやつ。
動きました。そりゃそうだセッションオブジェクトだもの。

追記:
これ注意が必要。具体的に言うと、セッションタイムアウトのタイミングだと、Session.getApplication()がExceptionを返します。
getApplication()はThreadLocalに格納されたアプリケーションオブジェクトを取得する仕組みだから、バックグラウンドプロセスからは自アプリケーションを取得できないんですね。どうしたものか。