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が呼ばれます。