- すべてのスーパー・インタフェース:
Context
- 既知のすべてのサブインタフェース:
EventDirContext
public interface EventContext extends Context
Target
addNamingListener()
メソッドにある名前パラメータは、ターゲットと呼ばれます。 ターゲットはスコープとともに、リスナーが対象とするオブジェクトを特定します。 まだ存在しないターゲットに対して配信登録を行うことはできますが、サービス・プロバイダや使用するプロトコル/サービスによってはサポート内容に制限がある場合があります。
あるサービスが既存のターゲットに対する配信登録のみをサポートする場合、存在しないターゲットを登録しようとすると、可能な限り早い時点でNameNotFoundException
がスローされます。スローされるタイミングはaddNamingListener()
を呼び出す時点が理想的ですが、それが可能ではない場合は、リスナーはNamingExceptionEvent
経由で例外を受け取ります。
また、既存のターゲットしか登録しないサービス・プロバイダでは、リスナーが登録したターゲットが名前空間から削除されると、NamingExceptionEvent
(NameNotFoundException
を含む)からリスナーに通知されます。
アプリケーションは、targetMustExist()
メソッドを使用して、存在しないターゲットの登録がEventContext
でサポートされているかどうかを確認できます。
イベント・ソース
登録メソッドを起動したEventContext
インスタンスは、生成した(見込みも含む)イベントのイベント・ソースです。 イベント・ソースはターゲットで指定したオブジェクトである必要はありません。 ターゲットの名前が空である場合のみ、ターゲットで指定したオブジェクトがソースになります。 つまり、ターゲットをスコープ・パラメータとともに使用し、リスナーが関心を持つオブジェクトを特定します。ただし、イベント・ソースは、リスナーが登録したEventContext
インスタンスとなります。
たとえば、リスナーが次の登録を行なったとします。
そのあとに「x/y」という名前のオブジェクトが削除された場合、対応するNamespaceChangeListener listener = ...; src.addNamingListener("x", SUBTREE_SCOPE, listener);
NamingEvent
(evt
)には次が含まれている必要があります。
evt.getEventContext() == src evt.getOldBinding().getName().equals("x/y")
さらに、リスナーの登録/登録解除はEventContext
インスタンスを使って行われ、名前空間の対応オブジェクトを用いません。 プログラムの一部でリスナーを削除する場合、addNamingListener()
を起動したEventContext
インスタンスの参照を保存します(リスナーに対して参照を保存し、あとで削除するために必要になります)。 lookup()
を実行し、登録解除を実行するEventContext
の別のインスタンスを取得することは期待できません。
登録の有効期間
登録したリスナーが登録解除されるのは次の場合です。removeNamingListener()
を使って削除された。- イベント情報の収集時に例外がスローされた。 つまり、リスナーが
NamingExceptionEvent
を受け取ったとき。 Context.close()
が登録したEventContext
インスタンスで起動された。
EventContext
インスタンスは、引き続き存在し、サービス・プロバイダによってメンテナンスされます。
リスナーの実装
登録/登録解除メソッドではNamingListener
のインスタンスを受け取ります。 これには、NamingEvent
のさまざまなイベント・タイプに対するNamingListener
のサブインタフェースがあります。 たとえば、ObjectChangeListener
インタフェースはNamingEvent.OBJECT_CHANGED
イベント・タイプに対するものです。 複数のイベント・タイプで配信対象を登録するには、リスナーの実装で複数のNamingListener
サブインタフェースを実装し、addNamingListener()
の呼出しを1回行う必要があります。 これにより、メソッド呼出しの回数の減少、およびリスナーのコード・サイズの削減に加えて、一部のサービス・プロバイダでは登録を最適化することができます。
スレッド問題
一般的なContext
インスタンスのように、EventContext
のインスタンスはスレッドに対して安全というわけではありません。 複数のスレッドが同時に同じEventContext
にアクセスしている場合は注意が必要です。 スレッドの問題の詳細は、「パッケージの説明」を参照してください。 - 導入されたバージョン:
- 1.3
-
フィールドのサマリー
フィールド 修飾子と型 フィールド 説明 static int
OBJECT_SCOPE
ターゲットに指定されたオブジェクトに関するイベントを通知するかどうかを指定する定数です。static int
ONELEVEL_SCOPE
ターゲットに指定されたコンテキストのオブジェクトに関するイベントを通知するかどうかを指定する定数です。ターゲットに指定されたコンテキストは除きます。static int
SUBTREE_SCOPE
ターゲットに指定されたコンテキストのサブツリーにあるオブジェクトに関するイベントを、通知するかどうかを指定する定数です。ターゲットに指定されたオブジェクトも含みます。インタフェース javax.naming.Contextで宣言されたフィールド
APPLET, 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
-
メソッドのサマリー
修飾子と型 メソッド 説明 void
addNamingListener(String target, int scope, NamingListener l)
リスナーを追加して、文字列のターゲット名およびスコープで特定したオブジェクトの変更時に、トリガーされた名前付きイベントを受け取れるようにします。void
addNamingListener(Name target, int scope, NamingListener l)
リスナーを追加して、ターゲットおよびスコープで特定オブジェクトの変更時にトリガーされた、名前付きイベントを受け取れるようにします。void
removeNamingListener(NamingListener l)
リスナーを削除して、このEventContext
によってトリガーされたネーミング・イベントを受信できないようにします。boolean
targetMustExist()
存在しないターゲットで、リスナーが配信処理を登録できるかどうか判定します。インタフェース javax.naming.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
-
フィールド詳細
-
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リスナーを追加して、ターゲットおよびスコープで特定オブジェクトの変更時にトリガーされた、名前付きイベントを受け取れるようにします。 これらイベントのイベント・ソースがこのコンテキストになります。 イベント・ソースおよびターゲットについてはクラスの説明を参照してください。scope
がどのように登録に影響するかについては、定数OBJECT_SCOPE
、ONELEVEL_SCOPE
、およびSUBTREE_SCOPE
の説明を参照してください。target
がコンテキストを指定する必要があるのは、scope
がONELEVEL_SCOPE
である場合のみです。scope
がOBJECT_SCOPE
またはSUBTREE_SCOPE
のいずれかの場合、target
は非コンテキストを指定できます。 たとえば、target
がコンテキストかどうかが事前にわからない場合に、呼出し側がtarget
をルートとするサブツリー(存在しない場合もある)を登録するときは、SUBTREE_SCOPE
を非コンテキストに使用すると便利な場合があります。リスナーがイベントの通知を受け取ると、
addNamingListener()
が実行されていないスレッドでリスナーが起動されます。 複数のスレッドが同時に同じEventContext
にアクセスしている場合は注意が必要です。 スレッドの問題の詳細は、「パッケージの説明」を参照してください。- パラメータ:
target
- このコンテキストに関連して解釈されるnull以外の名前。scope
-OBJECT_SCOPE
、ONELEVEL_SCOPE
、SUBTREE_SCOPE
のいずれか。l
- null以外のリスナー。- 例外:
NamingException
- リスナーの追加中に問題が検出された場合。- 関連項目:
removeNamingListener(javax.naming.event.NamingListener)
-
addNamingListener
void addNamingListener(String target, int scope, NamingListener l) throws NamingExceptionリスナーを追加して、文字列のターゲット名およびスコープで特定したオブジェクトの変更時に、トリガーされた名前付きイベントを受け取れるようにします。 詳細は、Name
を受け取るオーバーロードを参照してください。- パラメータ:
target
- このコンテキストを基準にして解決されたオブジェクトのnull以外の文字列名。scope
-OBJECT_SCOPE
、ONELEVEL_SCOPE
、SUBTREE_SCOPE
のいずれか。l
- null以外のリスナー。- 例外:
NamingException
- リスナーの追加中に問題が検出された場合。- 関連項目:
removeNamingListener(javax.naming.event.NamingListener)
-
removeNamingListener
void removeNamingListener(NamingListener l) throws NamingExceptionリスナーを削除して、このEventContext
によってトリガーされたネーミング・イベントを受信できないようにします。 このEventContext
を使用し、おそらく別のターゲット/スコープ引数を用いて、1回以上リスナー登録を行なった可能性があります。 このメソッドの起動後は、リスナーはイベント・ソースとして、このEventContext
インスタンスでイベントを受け取ることができません(ディスパッチ処理中のイベントは除く)。 リスナーがこのEventContext
インスタンスに登録されていない場合、このメソッドは何も実行しません。- パラメータ:
l
- null以外のリスナー。- 例外:
NamingException
- リスナーの削除中に問題が見つかった場合。- 関連項目:
addNamingListener(javax.naming.Name, int, javax.naming.event.NamingListener)
-
targetMustExist
boolean targetMustExist() throws NamingException存在しないターゲットで、リスナーが配信処理を登録できるかどうか判定します。- 戻り値:
- ターゲットが存在する必要がある場合はtrue。ターゲットが存在する必要がない場合はfalse。
- 例外:
NamingException
- このコンテキスト動作が判定できない場合。
-