- すべてのスーパー・インタフェース:
Context
- 既知のすべてのサブインタフェース:
EventDirContext
Target
addNamingListener()
メソッドの名前パラメータは、targetと呼ばれます。 ターゲットはスコープとともに、リスナーが対象とするオブジェクトを特定します。 まだ存在しないターゲットに対して配信登録を行うことはできますが、サービス・プロバイダや使用するプロトコル/サービスによってはサポート内容に制限がある場合があります。
サービスが既存のターゲットの登録のみをサポートしている場合、存在しないターゲットへの登録を試みると、NameNotFoundException
ができるだけ早くスローされます(できれば、addNamingListener()
がコールされたとき)、または可能でない場合は、リスナーはNamingExceptionEvent
を介して例外を受け取ります。
また、既存のターゲットの登録のみをサポートするサービス・プロバイダの場合、リスナーが登録したターゲットが後でネームスペースから削除されると、リスナーはNamingExceptionEvent
(NameNotFoundException
を含む)を介して通知されます。
アプリケーションは、targetMustExist()
メソッドを使用して、存在しないターゲットの登録がEventContext
でサポートされているかどうかを確認できます。
イベント・ソース
登録メソッドを起動するEventContext
インスタンスは、(潜在的)が生成されるイベントの「イベント・ソース」です。 イベント・ソースはターゲットで指定したオブジェクトである必要はありません。 ターゲットの名前が空である場合のみ、ターゲットで指定したオブジェクトがソースになります。 つまり、ターゲットとスコープ・パラメータは、リスナーが関心を持っているtheobject(s)を識別するために使用されますが、イベント・ソースはリスナーが登録されているEventContext
インスタンスです。
たとえば、リスナーが次の登録を行なったとします。
"x/y"という名前のオブジェクトがその後削除されると、対応するNamespaceChangeListener listener = ...; src.addNamingListener("x", SUBTREE_SCOPE, listener);
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
ターゲットに指定されたコンテキストのサブツリーにあるオブジェクトに関するイベントを、通知するかどうかを指定する定数です。ターゲットに指定されたオブジェクトも含みます。インタフェース 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
このEventContext
によって起動されたネーミング・イベントの受信からリスナーを削除します。boolean
存在しないターゲットで、リスナーが配信処理を登録できるかどうか判定します。インタフェース 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 リスナーを追加して、ターゲットおよびスコープで特定オブジェクトの変更時にトリガーされた、名前付きイベントを受け取れるようにします。 これらイベントのイベント・ソースがこのコンテキストになります。 イベント・ソースおよびターゲットについてはクラスの説明を参照してください。 定数OBJECT_SCOPE
、ONELEVEL_SCOPE
およびSUBTREE_SCOPE
の説明を参照して、scope
が登録に与える影響を確認してください。target
は、scope
がONELEVEL_SCOPE
の場合にのみコンテキストに名前を付ける必要があります。scope
がOBJECT_SCOPE
またはSUBTREE_SCOPE
の場合、target
は非コンテキストに名前を付けることができます。 非コンテキストにSUBTREE_SCOPE
を使用すると、たとえば、target
がコンテキストかどうかがあらかじめわかっておらず、target
をルートとする(サブツリーの退化の可能性)への関心を登録する場合などに便利です。リスナーにイベントが通知されると、リスナーは、
addNamingListener()
が実行されるスレッド以外のスレッドで起動される場合があります。 複数のスレッドが同じEventContext
に同時にアクセスする場合は注意が必要です。 スレッドの問題の詳細は、「パッケージの説明」を参照してください。- パラメータ:
target
- このコンテキストに関連して解釈されるnull以外の名前。scope
-OBJECT_SCOPE
、ONELEVEL_SCOPE
またはSUBTREE_SCOPE
のいずれか。l
- null以外のリスナー。- 例外:
NamingException
- リスナーの追加中に問題が検出された場合。- 関連項目:
-
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
void removeNamingListener(NamingListener l) throws NamingException このEventContext
によって起動されたネーミング・イベントの受信からリスナーを削除します。 リスナーがこのEventContext
に複数回登録されている可能性があります。ターゲット/スコープの引数は異なる可能性があります。 このメソッドが呼び出されると、リスナーはこのEventContext
インスタンスをイベント・ソース(ディスパッチ処理中のイベント以外)として持つイベントを受信しなくなります。 リスナーがこのEventContext
インスタンスに登録されていなかったか、登録されていない場合、このメソッドは何も行いません。- パラメータ:
l
- null以外のリスナー。- 例外:
NamingException
- リスナーの削除中に問題が見つかった場合。- 関連項目:
-
targetMustExist
boolean targetMustExist() throws NamingException存在しないターゲットで、リスナーが配信処理を登録できるかどうか判定します。- 戻り値:
- ターゲットが存在する必要がある場合はtrue。ターゲットが存在する必要がない場合はfalse。
- 例外:
NamingException
- このコンテキスト動作が判定できない場合。
-