インタフェースEventContext
- すべてのスーパー・インタフェース:
Context
- 既知のすべてのサブインタフェース:
EventDirContext
ターゲット
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ターゲットに指定されたコンテキストのサブツリーにあるオブジェクトに関するイベントを、通知するかどうかを指定する定数です。ターゲットに指定されたオブジェクトも含みます。インタフェース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 -
メソッドのサマリー
修飾子と型メソッド説明voidaddNamingListener(String target, int scope, NamingListener l) リスナーを追加して、文字列のターゲット名およびスコープで特定したオブジェクトの変更時に、トリガーされた名前付きイベントを受け取れるようにします。voidaddNamingListener(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- このコンテキスト動作が判定できない場合。
-