JavaTM 2
Platform
Std. Ed. v1.4.0

パッケージ javax.naming.event

ネーミングおよびディレクトリサービスにアクセスする場合、イベント通知をサポートしています。

参照:
          説明

インタフェースの概要
EventContext コンテキストに指定されたオブジェクトが変更されたときにトリガされるイベントの通知を受け取る、リスナーの登録/登録解除に関するメソッドを含みます。
EventDirContext ディレクトリコンテキストに指定されたオブジェクトが変更されたときにトリガされたイベントの通知を受け取る、リスナーの登録に関するメソッドを含みます。
NamespaceChangeListener 名前空間の変更を対象とするリスナーが、実装に必要なメソッドを指定します。
NamingListener このインタフェースは、NamingEvent を処理するリスナー側インタフェースのルートです。
ObjectChangeListener OBJECT_CHANGED のイベント型を持つ NamingEvent のリスナーが実装しなければならないメソッドを指定します。
 

クラスの概要
NamingEvent このクラスは、ネームサービス/ディレクトリサービスでトリガされたイベントを表します。
NamingExceptionEvent このクラスは、NamingEvent を通知するリスナーの情報を収集する手順/プロセスが NamingException をスローしたときに、トリガされるイベントを表します。
 

パッケージ javax.naming.event の説明

ネーミングおよびディレクトリサービスにアクセスする場合、イベント通知をサポートしています。

このパッケージは、Java Naming and Directory InterfaceTM (JNDI) のイベント通知操作を定義します。JNDI は Java プログラミング言語で作成されたアプリケーションにネーミング機能およびディレクトリ機能を提供します。JNDI は、特定のネーミングまたはディレクトリサービス実装とは独立して設計されています。このため、新しいサービスおよびすでに展開されている様々なサービスに、共通の方法でアクセスできます。

ネーミングイベント

このパッケージで、ネーミングおよびディレクトリサービスで生成されるイベントを表示するには、NamingEvent クラスを定義します。EventContextEventDirContext という、ContextDirContext のサブインタフェースも定義します。このサブインタフェースを使って、アプリケーションはコンテキストでトリガされたイベントにその対象を登録します。

NamingEvent とは、ネーミングおよびディレクトリサービスで発生するイベントのことです。ネーミングイベントには次の 2 種類のカテゴリがあります。

イベントの各カテゴリは、NamespaceChangeListenerObjectChangeListener などの対応するリスナーによって処理されます。

たとえば、アプリケーションの場合、変更する対象を次のようにオブジェクトに登録できます。

EventContext src = 
    (EventContext)(new InitialContext()).lookup("o=wiz,c=us");
src.addNamingListener("ou=users", EventContext.ONELEVEL_SCOPE,
    new ChangeHandler());
...
class ChangeHandler implements ObjectChangeListener {
    public void objectChanged(NamingEvent evt) {
        System.out.println(evt.getNewBinding());
    }
    public void namingExceptionThrown(NamingExceptionEvent evt) {
        System.out.println(evt.getException());
    }
}

スレッド問題

イベントがリスナーにディスパッチされる場合、リスナーメソッド (objectChanged() など) は、addNamingListener() への呼び出しが実行されたスレッド以外で実行可能です。使用するスレッドは、サービスプロバイダによって選択されます。イベントが複数のリスナーにディスパッチされる場合、別個のスレッドで同時にリスナーメソッドを実行するには、サービスプロバイダが選択 (および一般的に奨励される) することがあります。

リスナーインスタンスが NamingEvent.getEventContext() を呼び出した場合、他のスレッドで同時に同一のコンテキストを処理している可能性を考慮する必要があります。同じように、リスナーが addNamingListener() を介して登録されるときのスレッドは、サービスプロバイダが新規に作成したスレッドでリスナーをあとで呼び出す可能性があることを考慮する必要があります。コンテキストインスタンスは、一般にスレッドに対して安全であることを保証されていないので、すべてのコンテキスト操作は必要に応じて同期化してください。

例外処理

リスナーがイベントにコンテキストを登録する場合、イベント生成に必要な情報を収集するため、コンテキストに内部処理が必要なことがあります。たとえば、最終的にはイベントへ変換されるような変更の対象登録をサーバに要求する必要がある場合などです。イベント情報を収集できなくする例外が発生した場合、リスナーはイベントの情報を受け取ることができません。このような例外が発生すると、NamingExceptionEvent がトリガされ、リスナーに通知します。上記のサンプルコードで表示されたようにリスナーの namingExceptionThrown() メソッドが呼び出され、リスナーは自動的に登録解除となります。

パッケージの仕様

「Java technology web site」では次のドキュメントを参照できます。

導入されたバージョン:
1.3

JavaTM 2
Platform
Std. Ed. v1.4.0

バグの報告と機能のリクエスト
これ以外の API リファレンスおよび開発者用ドキュメントについては、 Java 2 SDK SE 開発者用ドキュメントを参照してください。 開発者向けの詳細な解説、概念の概要、用語の定義、バグの回避策、 およびコード実例が含まれています。

Java、Java 2D、および JDBC は米国ならびにその他の国における米国 Sun Microsystems, Inc. の商標もしくは登録商標です。
Copyright 1993-2002 Sun Microsystems, Inc. 901 San Antonio Road
Palo Alto, California, 94303, U.S.A. All Rights Reserved.