JavaTM 2 Platform
Std. Ed. v1.3

パッケージ 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.3

バグや機能要求の報告
さらに詳しい API リファレンスおよび開発者ドキュメントについては、 Java 2 SDK SE Developer Documentation を参照してください。このドキュメントには、概念、用語の定義、回避策、 実用的なコード例など、開発者を対象にした詳細な解説が掲載されています。

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