JavaTM Platform
Standard Ed. 6

パッケージ 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() メソッドが呼び出され、リスナーは自動的に登録解除となります。

パッケージの仕様

JNDI API 仕様と関連ドキュメントについては、「JNDI のドキュメント」を参照してください。

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

JavaTM Platform
Standard Ed. 6

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

Copyright 2006 Sun Microsystems, Inc. All rights reserved. Use is subject to license terms. Documentation Redistribution Policy も参照してください。