Java™ Platform
Standard Edition 7

パッケージ javax.naming.event

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

参照: 説明

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

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

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

ネーミングイベント

このパッケージは、ネーミングおよびディレクトリサービスで生成されるイベントを表す 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() を介して登録されるときのスレッドは、サービスプロバイダが新規に作成したスレッドでリスナーをあとで呼び出す可能性があることを考慮する必要があります。Context インスタンスは、一般にスレッドに対して安全であることを保証されていないので、すべてのコンテキスト操作は必要に応じて同期化してください。

例外処理

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

パッケージの仕様

JNDI API の仕様と関連ドキュメントについては、「JNDI のドキュメント」を参照してください。
導入されたバージョン:
1.3
Java™ Platform
Standard Edition 7

バグまたは機能を送信
詳細な API リファレンスおよび開発者ドキュメントについては、Java SE のドキュメントを参照してください。そのドキュメントには、概念的な概要、用語の定義、回避方法、有効なコード例などの、開発者を対象にしたより詳細な説明が含まれています。
Copyright © 1993, 2013, Oracle and/or its affiliates. All rights reserved.