パッケージ javax.naming.event
このパッケージは、Java Naming and Directory Interface™ (JNDI)のイベント通知操作を定義します。 JNDIは、Javaプログラミング言語で記述されたアプリケーションにネーミングおよびディレクトリ機能を提供します。 ほかのネームおよびディレクトリ・サービスの実装と独立して動作するように設計されています。 新しいサービス、展開されつつあるサービス、すでに展開されているサービスなど、さまざまなサービスに対して共通の方法でアクセスすることができます。
ネーミング・イベント
このパッケージは、ネーミングおよびディレクトリ・サービスで生成されるイベントを表すNamingEventクラスを定義します。 EventContextとEventDirContextという、ContextとDirContextのサブインタフェースも定義します。このサブインタフェースを使用して、アプリケーションはコンテキストでトリガーされたイベントにその対象を登録します。
NamingEventとは、ネーミングおよびディレクトリ・サービスで発生するイベントのことです。 ネーミング・イベントには次の2種類のカテゴリがあります。
- 名前空間に影響するもの(オブジェクトの追加、削除、名前の変更)
- オブジェクトのコンテンツに影響するもの。
NamespaceChangeListener、ObjectChangeListenerなどの対応するリスナーによって処理されます。
たとえば、アプリケーションの場合、変更する対象を次のようにオブジェクトに登録できます。
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());
}
}
Threading Issues
イベントがリスナーにディスパッチされる場合、リスナー・メソッド(objectChanged()など)は、addNamingListener()への呼出しが実行されたスレッド以外で実行可能です。 使用するスレッドは、サービス・プロバイダによって選択されます。 イベントが複数のリスナーにディスパッチされる場合、サービス・プロバイダは(一般的に推奨されているように)別個のスレッドで並行してリスナー・メソッドを実行することを選択することがあります。
リスナー・インスタンスがNamingEvent.getEventContext()を呼び出した場合、ほかのスレッドで並行して同一のコンテキストを処理している可能性を考慮する必要があります。 同じように、リスナーがaddNamingListener()を介して登録されるときのスレッドは、サービス・プロバイダが新規に作成したスレッドでリスナーをあとで呼び出す可能性があることを考慮する必要があります。 Contextインスタンスは、一般にスレッドに対して安全であることを保証されていないので、すべてのコンテキスト操作は必要に応じて同期化してください。
Exception Handling
リスナーがコンテキストにイベントを登録するときは、イベントの生成に必要な情報を収集するために、コンテキストの内部で処理を行う必要がある場合があります。 たとえば、サーバー上の変更の対象を登録し、最終的にイベントに変換するには、コンテキストからサーバーに要求を発行する必要があります。 例外が発生したためイベントの情報を収集できない場合は、リスナーにはイベントの通知は行われません。 このような例外が発生すると、NamingExceptionEventがトリガーされ、リスナーに通知します。 上記のサンプル・コードで表示されたようにリスナーのnamingExceptionThrown()メソッドが呼び出され、リスナーは自動的に登録解除となります。
パッケージの仕様
JNDI APIの仕様と関連ドキュメントについては、JNDIのドキュメントを参照してください。- 導入されたバージョン:
- 1.3
-
インタフェースのサマリー インタフェース 説明 EventContext コンテキストに指定されたオブジェクトが変更されたときにトリガーされるイベントの通知を受け取る、リスナーの登録/登録解除に関するメソッドを含みます。EventDirContext ディレクトリ・コンテキストに指定されたオブジェクトが変更されたときにトリガーされたイベントの通知を受け取る、リスナーの登録に関するメソッドを含みます。NamespaceChangeListener 名前空間の変更を対象とするリスナーが、実装に必要なメソッドを指定します。NamingListener このインタフェースは、NamingEventを処理するリスナー・インタフェースのルートです。ObjectChangeListener イベント・タイプがOBJECT_CHANGEDであるNamingEventのリスナーが実装する必要のあるメソッドを指定します。 -
クラスのサマリー クラス 説明 NamingEvent このクラスは、ネーム・サービス\/ディレクトリ・サービスでトリガーされたイベントを表します。NamingExceptionEvent このクラスは、リスナーにNamingEventを通知するための情報を収集するために使用される手順/プロセスがNamingExceptionをスローしたときにトリガーされたイベントを表します。