モジュール java.naming
パッケージ javax.naming.event

インタフェースEventContext

すべてのスーパー・インタフェース:
Context
既知のすべてのサブインタフェース:
EventDirContext

public interface EventContext extends Context
コンテキストに指定されたオブジェクトが変更されたときにトリガーされるイベントの通知を受け取る、リスナーの登録/登録解除に関するメソッドを含みます。

Target

addNamingListener()メソッドの名前パラメータは、targetと呼ばれます。 ターゲットはスコープとともに、リスナーが対象とするオブジェクトを特定します。 まだ存在しないターゲットに対して配信登録を行うことはできますが、サービス・プロバイダや使用するプロトコル/サービスによってはサポート内容に制限がある場合があります。

サービスが既存のターゲットの登録のみをサポートしている場合、存在しないターゲットへの登録を試みると、NameNotFoundExceptionができるだけ早くスローされます(できれば、addNamingListener()がコールされたとき)、または可能でない場合は、リスナーはNamingExceptionEventを介して例外を受け取ります。

また、既存のターゲットの登録のみをサポートするサービス・プロバイダの場合、リスナーが登録したターゲットが後でネームスペースから削除されると、リスナーはNamingExceptionEvent (NameNotFoundExceptionを含む)を介して通知されます。

アプリケーションは、targetMustExist()メソッドを使用して、存在しないターゲットの登録がEventContextでサポートされているかどうかを確認できます。

イベント・ソース

登録メソッドを起動するEventContextインスタンスは、(潜在的)が生成されるイベントの「イベント・ソース」です。 イベント・ソースはターゲットで指定したオブジェクトである必要はありません ターゲットの名前が空である場合のみ、ターゲットで指定したオブジェクトがソースになります。 つまり、ターゲットとスコープ・パラメータは、リスナーが関心を持っているtheobject(s)を識別するために使用されますが、イベント・ソースはリスナーが登録されているEventContextインスタンスです。

たとえば、リスナーが次の登録を行なったとします。

      NamespaceChangeListener listener = ...;
      src.addNamingListener("x", SUBTREE_SCOPE, listener);
"x/y"という名前のオブジェクトがその後削除されると、対応するNamingEvent (evt)に次のものが含まれている必要があります:
      evt.getEventContext() == src
      evt.getOldBinding().getName().equals("x/y")

さらに、リスナーの登録/登録解除は、ネームスペース内の対応するオブジェクトではなく、EventContext instanceを使用して行われます。 プログラムがなんらかの時点でリスナーを削除する場合は、addNamingListener() (リスナーへの参照を後で削除するために保持する必要がある場合と同じです)を起動したEventContextインスタンスへの参照を保持する必要があります。 lookup()を実行し、登録解除を実行するEventContextの別のインスタンスを取得することは期待できません。

登録の有効期間

登録したリスナーが登録解除されるのは次の場合です。
  • removeNamingListener()を使用して削除されます。
  • イベント情報の収集時に例外がスローされた。 つまり、リスナーがNamingExceptionEventを受信した場合です。
  • Context.close()は、それが登録されているEventContextインスタンスで起動されます。
その時点まで、未処理のリスナーを持つEventContextインスタンスは、引き続き存在し、サービス・プロバイダによって維持されます。

リスナーの実装

登録/登録解除メソッドは、NamingListenerのインスタンスを受け入れます。 NamingEventのイベント・タイプごとに、NamingListenerのサブインタフェースがあります。 たとえば、ObjectChangeListenerインタフェースは、NamingEvent.OBJECT_CHANGEDイベント・タイプ用です。 複数のイベント・タイプに関係を登録するには、リスナー実装で複数のNamingListenerサブインタフェースを実装し、単一のaddNamingListener()起動を使用する必要があります。 これにより、メソッド呼出しの回数の減少、およびリスナーのコード・サイズの削減に加えて、一部のサービス・プロバイダでは登録を最適化することができます。

スレッド問題

一般的に、Contextインスタンスと同様に、EventContextのインスタンスはスレッド・セーフである保証はありません。 複数のスレッドが同じEventContextに同時にアクセスする場合は注意が必要です。 スレッドの問題の詳細は、「パッケージの説明」を参照してください。
導入されたバージョン:
1.3