サーブレット 8章 リスナー2
8.3. HttpSessionActivationListener
「javax.servlet.http.HttpSessionActivationListener」は、J2EEコンテナによってセッションが退避して保存される時、または退避していたセッションを回復させるときに呼ばれるリスナーです。J2EEコンテナはサーバを停止/起動させるときに、セッションの退避/回復を行います。(J2EEコンテナに依りますが、Tomcat4.1はこの機能を有しています)
J2EEコンテナはこれらの時に、セッションに登録されているオブジェクトで、HttpSessionActivationListenerを実装しているもののメソッドを呼び出します。定義されているメソッドは以下の2つです。
// 退避していたセッションが回復したときに呼ばれるメソッド void sessionDidActivate(HttpSessionEvent event) // セッションを退避させて保存するときに呼ばれるメソッド void sessionWillPassivate(HttpSessionEvent event)
以下はHttpSessionActivationListenerを実装しているオブジェクトの例です。
import javax.servlet.http.HttpSessionActivationListener; import javax.servlet.http.HttpSessionEvent; import java.io.Serializable; public class ActivationObject implements HttpSessionActivationListener,Serializable{ int count=0; public void sessionDidActivate(HttpSessionEvent event){ storeCount(); //現状のcountの値をDBから読み込む処理。DBから値は削除される。 } public void sessionWillPassivate(HttpSessionEvent event){ count=loadCount(); //現状のcountの値をDBに保存する処理 } }
HttpSessionActivationListenerはHttpSessionBindingListenerと同じく設定は必要ありません。実装するだけでリスナーのメソッドは呼び出されるようになります。またセッションの退避/回復に応じて、同じようにオブジェクトを退避/回復させるためには、そのオブジェクトにjava.io.Serializableインタフェースを実装する必要があります。Serializableインタフェースを実装していないオブジェクトは、退避/回復が正しく実行できない場合があります。
(実習課題3)
任意のWebアプリケーションにHttpSessionActivationListenerを実装したオブジェクトを追加し、HttpSessionActivationListenerが動作するタイミングを確認すること。