パッケージ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()); } }
スレッド問題
イベントがリスナーにディスパッチされると、リスナー・メソッド(objectChanged()
)は、addNamingListener()
へのコールが実行されたスレッド以外のスレッドで実行できます。 使用するスレッドは、サービス・プロバイダによって選択されます。 イベントが複数のリスナーにディスパッチされる場合、サービス・プロバイダは(一般的に推奨されているように)別個のスレッドで並行してリスナー・メソッドを実行することを選択することがあります。
リスナー・インスタンスがNamingEvent.getEventContext()
を起動する場合、他のスレッドがそのコンテキストで同時に機能する可能性を考慮する必要があります。 同様に、リスナーがaddNamingListener()
経由で登録されている場合、登録スレッドは、サービス・プロバイダが後で新しく作成されたスレッドでリスナーを起動する可能性を考慮する必要があります。 Context
インスタンスは一般的にスレッド・セーフであることが保証されないため、すべてのコンテキスト操作は必要に応じて同期する必要があります。
例外処理
リスナーがコンテキストにイベントを登録するときは、イベントの生成に必要な情報を収集するために、コンテキストの内部で処理を行う必要がある場合があります。 たとえば、サーバー上の変更の対象を登録し、最終的にイベントに変換するには、コンテキストからサーバーに要求を発行する必要があります。 例外が発生したためイベントの情報を収集できない場合は、リスナーにはイベントの通知は行われません。 このような例外が発生すると、リスナーに通知するためにNamingExceptionEvent
が起動されます。 上のサンプル・コードに示すように、リスナーのnamingExceptionThrown()
メソッドが呼び出され、リスナーが自動的に登録解除されます。
パッケージの仕様
JNDI APIの仕様と関連ドキュメントについては、「JNDIのドキュメント」を参照してください。- 導入されたバージョン:
- 1.3
-
クラス説明コンテキストに指定されたオブジェクトが変更されたときにトリガーされるイベントの通知を受け取る、リスナーの登録/登録解除に関するメソッドを含みます。ディレクトリ・コンテキストに指定されたオブジェクトが変更されたときにトリガーされたイベントの通知を受け取る、リスナーの登録に関するメソッドを含みます。名前空間の変更を対象とするリスナーが、実装に必要なメソッドを指定します。このクラスは、ネーム・サービス\/ディレクトリ・サービスでトリガーされたイベントを表します。このクラスは、
NamingEvent
のリスナーに通知するための情報を収集するために使用されるプロシージャ/プロセスがNamingException
をスローしたときに起動されるイベントを表します。このインタフェースは、NamingEvent
を処理するリスナー・インタフェースのルートです。イベント・タイプがOBJECT_CHANGED
のNamingEvent
のリスナーが実装する必要があるメソッドを指定します。