インタフェースEventContext

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

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

ターゲット

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
  • フィールドのサマリー

    フィールド
    修飾子と型
    フィールド
    説明
    static final int
    ターゲットに指定されたオブジェクトに関するイベントを通知するかどうかを指定する定数です。
    static final int
    ターゲットに指定されたコンテキストのオブジェクトに関するイベントを通知するかどうかを指定する定数です。ターゲットに指定されたコンテキストは除きます。
    static final int
    ターゲットに指定されたコンテキストのサブツリーにあるオブジェクトに関するイベントを、通知するかどうかを指定する定数です。ターゲットに指定されたオブジェクトも含みます。

    インタフェースContextで宣言されたフィールド

    AUTHORITATIVE, BATCHSIZE, DNS_URL, INITIAL_CONTEXT_FACTORY, LANGUAGE, OBJECT_FACTORIES, PROVIDER_URL, REFERRAL, SECURITY_AUTHENTICATION, SECURITY_CREDENTIALS, SECURITY_PRINCIPAL, SECURITY_PROTOCOL, STATE_FACTORIES, URL_PKG_PREFIXES
    修飾子と型
    フィールド
    説明
    static final String
    要求されたサービスの権限を指定するための、環境プロパティの名前を保持する定数です。
    static final String
    サービスのプロトコルによってデータを返すときに使用するバッチ・サイズを指定するための、環境プロパティの名前を保持する定数です。
    static final String
    JNDI URLコンテキスト(dns://somehost/wiz.comなど)に使用するDNSホスト名およびドメイン名を指定するための、環境プロパティの名前を保持する定数です。
    static final String
    使用する初期コンテキスト・ファクトリを指定するための、環境プロパティの名前を保持する定数です。
    static final String
    サービスに使用する優先言語を指定するための、環境プロパティの名前を保持する定数です。
    static final String
    使用するオブジェクト・ファクトリのリストを指定するための、環境プロパティの名前を保持する定数です。
    static final String
    使用するサービス・プロバイダの構成情報を指定するための、環境プロパティの名前を保持する定数です。
    static final String
    サービス・プロバイダによって参照が処理される方法を指定するための、環境プロパティの名前を保持する定数です。
    static final String
    使用するセキュリティ・レベルを指定するための、環境プロパティの名前を保持する定数です。
    static final String
    サービスに対する呼出し側を認証する主体の資格を指定するための、環境プロパティの名前を保持する定数です。
    static final String
    サービスに対する呼出し側を認証する主体の識別情報を指定するための、環境プロパティの名前を保持する定数です。
    static final String
    使用するセキュリティ・プロトコルを指定するための、環境プロパティの名前を保持する定数です。
    static final String
    使用する状態ファクトリのリストを指定するための、環境プロパティの名前を保持する定数です。
    static final String
    URLコンテキスト・ファクトリをロードするときに使用するパッケージ接頭辞のリストを指定するための、環境プロパティの名前を保持する定数です。
  • メソッドのサマリー

    修飾子と型
    メソッド
    説明
    void
    addNamingListener(String target, int scope, NamingListener l)
    リスナーを追加して、文字列のターゲット名およびスコープで特定したオブジェクトの変更時に、トリガーされた名前付きイベントを受け取れるようにします。
    void
    addNamingListener(Name target, int scope, NamingListener l)
    リスナーを追加して、ターゲットおよびスコープで特定オブジェクトの変更時にトリガーされた、名前付きイベントを受け取れるようにします。
    void
    このEventContextによって起動されたネーミング・イベントの受信からリスナーを削除します。
    boolean
    存在しないターゲットで、リスナーが配信処理を登録できるかどうか判定します。

    インタフェースContextで宣言されたメソッド

    addToEnvironment, bind, bind, close, composeName, composeName, createSubcontext, createSubcontext, destroySubcontext, destroySubcontext, getEnvironment, getNameInNamespace, getNameParser, getNameParser, list, list, listBindings, listBindings, lookup, lookup, lookupLink, lookupLink, rebind, rebind, removeFromEnvironment, rename, rename, unbind, unbind
    修飾子と型
    メソッド
    説明
    addToEnvironment(String propName, Object propVal)
    このコンテキストの環境に、新しい環境プロパティを追加します。
    void
    bind(String name, Object obj)
    名前をオブジェクトにバインドします。
    void
    bind(Name name, Object obj)
    名前をオブジェクトにバインドします。
    void
    このコンテキストを閉じます。
    composeName(String name, String prefix)
    このコンテキストを基準にした名前を持つこのコンテキストの名前を変換します。
    composeName(Name name, Name prefix)
    このコンテキストを基準にした名前を持つこのコンテキストの名前を変換します。
    新しいコンテキストを作成してバインドします。
    新しいコンテキストを作成してバインドします。
    void
    名前付きコンテキストを破棄し、名前空間から削除します。
    void
    名前付きコンテキストを破棄し、名前空間から削除します。
    このコンテキストで有効な環境を取得します。
    独自の名前空間でこのコンテキストの完全な名前を取得します。
    名前付きコンテキストに関連したパーサーを取得します。
    名前付きコンテキストに関連したパーサーを取得します。
    list(String name)
    バインドされたオブジェクトのクラス名とともに、名前付きコンテキストでバインドされた名前を列挙します。
    list(Name name)
    バインドされたオブジェクトのクラス名とともに、名前付きコンテキストでバインドされた名前を列挙します。
    バインドされたオブジェクトとともに、名前付きコンテキストでバインドされた名前を列挙します。
    バインドされたオブジェクトとともに、名前付きコンテキストでバインドされた名前を列挙します。
    lookup(String name)
    名前付きオブジェクトを取得します。
    lookup(Name name)
    名前付きオブジェクトを取得します。
    名前の終端の基本コンポーネントを除くリンクをともなう、名前付きオブジェクトを取得します。
    名前の終端の基本コンポーネントを除くリンクをともなう、名前付きオブジェクトを取得します。
    void
    rebind(String name, Object obj)
    名前をオブジェクトにバインドし、既存のバインディングを上書きします。
    void
    rebind(Name name, Object obj)
    名前をオブジェクトにバインドし、既存のバインディングを上書きします。
    このコンテキストの環境から環境プロパティを削除します。
    void
    rename(String oldName, String newName)
    新しい名前を、以前の名前にバインドされたオブジェクトにバインドし、以前の名前をアンバインドします。
    void
    rename(Name oldName, Name newName)
    新しい名前を、以前の名前にバインドされたオブジェクトにバインドし、以前の名前をアンバインドします。
    void
    unbind(String name)
    名前付きオブジェクトをアンバインドします。
    void
    unbind(Name name)
    名前付きオブジェクトをアンバインドします。
  • フィールド詳細

    • OBJECT_SCOPE

      static final int OBJECT_SCOPE
      ターゲットに指定されたオブジェクトに関するイベントを通知するかどうかを指定する定数です。

      この定数の値は0です。

      関連項目:
    • ONELEVEL_SCOPE

      static final int ONELEVEL_SCOPE
      ターゲットに指定されたコンテキストのオブジェクトに関するイベントを通知するかどうかを指定する定数です。ターゲットに指定されたコンテキストは除きます。

      この定数の値は1です。

      関連項目:
    • SUBTREE_SCOPE

      static final int SUBTREE_SCOPE
      ターゲットに指定されたコンテキストのサブツリーにあるオブジェクトに関するイベントを、通知するかどうかを指定する定数です。ターゲットに指定されたオブジェクトも含みます。

      この定数の値は2です。

      関連項目:
  • メソッドの詳細

    • addNamingListener

      void addNamingListener(Name target, int scope, NamingListener l) throws NamingException
      リスナーを追加して、ターゲットおよびスコープで特定オブジェクトの変更時にトリガーされた、名前付きイベントを受け取れるようにします。 これらイベントのイベント・ソースがこのコンテキストになります。 イベント・ソースおよびターゲットについてはクラスの説明を参照してください。 定数OBJECT_SCOPEONELEVEL_SCOPEおよびSUBTREE_SCOPEの説明を参照して、scopeが登録に与える影響を確認してください。

      targetは、scopeONELEVEL_SCOPEの場合にのみコンテキストに名前を付ける必要があります。scopeOBJECT_SCOPEまたはSUBTREE_SCOPEの場合、targetは非コンテキストに名前を付けることができます。 非コンテキストにSUBTREE_SCOPEを使用すると、たとえば、targetがコンテキストかどうかがあらかじめわかっておらず、targetをルートとする(サブツリーの退化の可能性)への関心を登録する場合などに便利です。

      リスナーにイベントが通知されると、リスナーは、addNamingListener()が実行されるスレッド以外のスレッドで起動される場合があります。 複数のスレッドが同じEventContextに同時にアクセスする場合は注意が必要です。 スレッドの問題の詳細は、「パッケージの説明」を参照してください。

      パラメータ:
      target - このコンテキストに関連して解釈されるnull以外の名前。
      scope - OBJECT_SCOPEONELEVEL_SCOPEまたはSUBTREE_SCOPEのいずれか。
      l - null以外のリスナー。
      スロー:
      NamingException - リスナーの追加中に問題が検出された場合。
      関連項目:
    • addNamingListener

      void addNamingListener(String target, int scope, NamingListener l) throws NamingException
      リスナーを追加して、文字列のターゲット名およびスコープで特定したオブジェクトの変更時に、トリガーされた名前付きイベントを受け取れるようにします。 詳細は、Nameを受け入れるオーバーロードを参照してください。
      パラメータ:
      target - このコンテキストを基準にして解決されたオブジェクトのnull以外の文字列名。
      scope - OBJECT_SCOPEONELEVEL_SCOPEまたはSUBTREE_SCOPEのいずれか。
      l - null以外のリスナー。
      スロー:
      NamingException - リスナーの追加中に問題が検出された場合。
      関連項目:
    • removeNamingListener

      void removeNamingListener(NamingListener l) throws NamingException
      このEventContextによって起動されたネーミング・イベントの受信からリスナーを削除します。 リスナーがこのEventContextに複数回登録されている可能性があります。ターゲット/スコープの引数は異なる可能性があります。 このメソッドが呼び出されると、リスナーはこのEventContextインスタンスをイベント・ソース(ディスパッチ処理中のイベント以外)として持つイベントを受信しなくなります。 リスナーがこのEventContextインスタンスに登録されていなかったか、登録されていない場合、このメソッドは何も行いません。
      パラメータ:
      l - null以外のリスナー。
      スロー:
      NamingException - リスナーの削除中に問題が見つかった場合。
      関連項目:
    • targetMustExist

      boolean targetMustExist() throws NamingException
      存在しないターゲットで、リスナーが配信処理を登録できるかどうか判定します。
      戻り値:
      ターゲットが存在する必要がある場合はtrue。ターゲットが存在する必要がない場合はfalse。
      スロー:
      NamingException - このコンテキスト動作が判定できない場合。