―Servlet/JSPリファレンス―
2003/11/13
セッションに関連するオブジェクトへの通知 |
ワンポイントQuestion |
あるオブジェクトが、それ自身がセッションオブジェクトに追加されたり、また、削除されたりしたときに通知を受けるようにしたいと考えています。
その場合、どのインターフェイスをそのオブジェクトに実装すればよいか、選択肢より選んでください。(単一選択)
|
解説 |
セッションオブジェクトに追加させるオブジェクトには、セッションオブジェクトとの関係に関連する次のような特定のイベントを通知することができます。
オブジェクトがセッションオブジェクトへ追加される、もしくはセッションオブジェクトから削除されるときは、この通知を受け取る際に、オブジェクトにjavax.http.HttpSessionBindingListenerインターフェイスを実装する必要があります。
JVM間での移動が発生したときや、外部記憶領域へのデータ保存や復元を行うときに、セッションオブジェクトは活性化(アクティブ)、または非活性化(パッシブ)します。この通知を受け取るには、オブジェクトにjavax.http.HttpSessionActivationListenerインターフェイスを実装する必要があります。
■HttpSessionBindingListenerインターフェイス
public interface HttpSessionBindingListener extends java.util.EventListener このインターフェイスを実装したオブジェクトは、セッションオブジェクトにバインド(追加)されるとき、またはセッションオブジェクトからアンバインド(削除)されるときに、HttpSessionBindingEventオブジェクトによって通知を受けることができるようになります。 |
通知は、サーブレットでセッションオブジェクトから属性を明示してバインドしたり、アンバインドしたりすることばかりではなく、セッションオブジェクトが無効化されたり、セッションオブジェクトがタイムアウトになったりしたときにも行われます。
■メソッド
public void valueBound(HttpSessionBindingEvent event) オブジェクトがセッションオブジェクトにバインドされるときに発生するイベントに対する処理を行います。 public void valueUnbound(HttpSessionBindingEvent event) オブジェクトがセッションオブジェクトからアンバインドされるときに発生するイベントに対する処理を行います。 |
セッションにバインドされるオブジェクトがHttpSessionBindingListenerを実装している場合は、セッションオブジェクトのsetAttribute()メソッドを実行すると、コンテナがHttpSessionBindingListener.valueBoundを呼び出します。次にコンテナは、Webアプリケーション内のすべての
HttpSessionAttributeListener に通知します。
また、セッションオブジェクトのremoveAttribute()メソッドを実行すると、コンテナがHttpSessionBindingListener.valueUnboundを呼び出します。次にコンテナは、Webアプリケーション内のHttpSessionAttributeListenerに通知します。
次のサンプルプログラムは、HttpSessionBindingListenerとHttpSessionListener,HttpSessionAttributeListenerを利用したものです。
SampleAccessCounter.java -- サーブレット |
package module2; |
InfoBean.java -- HttpSessionBindingListenerを実装したJavaBeanクラス |
package module2; |
SampleSessionListener.java -- リスナ |
package listeners; |
web.xml |
<?xml version="1.0" encoding="ISO-8859-1"?> |
stdout.log -- 実行結果 |
-- SampleAccessCounter -- |
■HttpSessionActivationListenerインターフェイス
public interface HttpSessionActivationListener extends java.util.EventListener セッションオブジェクトにバインドされたオブジェクトは、セッションオブジェクトが非活性化されたり、活性化されたりすることを通知するコンテナのイベントを受けることができます。 |
■メソッド
public void sessionWillPassivate(HttpSessionEvent se) セッションオブジェクトが間もなく非活性化(パッシブ)されるときに発生するイベントに対する処理を行います。 public void sessionDidActivate(HttpSessionEvent se) セッションオブジェクトがちょうど活性化(アクティブ)されるときに発生するイベントに対する処理を行います。 |
分散コンテナ環境で、セッションが JVM 間を移動すると、HttpSessionActivation Listenerインターフェイスを実装しているすべてのセッション属性に対して通知が行われます。
POINT |
setAttribute()メソッドによって、HttpSessionBindingListenerを実装したオブジェクトがセッションオブジェクトに設定されると、valueBound()メソッドが呼び出されます。removeAttribute()メソッドによって、HttpSessionBindingListenerを実装したオブジェクトがセッションオブジェクトに削除されると、valueUnbound()メソッドが呼び出されます。 |
KEYWORD |
■活性化(アクティブ) サーブレットコンテナにセッションオブジェクトが存在し、利用可能な状態のことをいいます。 ■非活性化(パッシブ) サーブレットコンテナにあるセッションオブジェクトが外部記憶装置などに退避され、保持された状態のことをいいます。 |
ワンポイントQuestionの解答 |
正解 A
Java2ラーニングブック
−Web Component Developer編−
|
- 実運用の障害対応時間比較に見る、ログ管理基盤の効果 (2017/5/9)
ログ基盤の構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。今回は、実案件を事例とし、ログ管理基盤の有用性を、障害対応時間比較も交えて紹介 - Chatwork、LINE、Netflixが進めるリアクティブシステムとは何か (2017/4/27)
「リアクティブ」に関連する幾つかの用語について解説し、リアクティブシステムを実現するためのライブラリを紹介します - Fluentd+Elasticsearch+Kibanaで作るログ基盤の概要と構築方法 (2017/4/6)
ログ基盤を実現するFluentd+Elasticsearch+Kibanaについて、構築方法や利用方法、実際の案件で使ったときの事例などを紹介する連載。初回は、ログ基盤の構築、利用方法について - プログラミングとビルド、Androidアプリ開発、Javaの基礎知識 (2017/4/3)
初心者が、Java言語を使ったAndroidのスマホアプリ開発を通じてプログラミングとは何かを学ぶ連載。初回は、プログラミングとビルド、Androidアプリ開発、Javaに関する基礎知識を解説する。
|
|