-
- All Superinterfaces:
-
Context
- All Known Subinterfaces:
-
EventDirContext
public interface EventContext extends Context
包含注册/取消注册侦听器的方法,以便在上下文中命名的对象发生更改时触发事件。目标
addNamingListener()
方法中的name参数称为目标 。 目标与范围一起识别侦听器感兴趣的对象。可以在不存在的目标中注册兴趣,但可以在多大程度上限制对象的支持程度。服务提供商和底层协议/服务。如果服务仅支持对现有目标的注册,则尝试注册不存在的目标会导致
NameNotFoundException
抛出NameNotFoundException
,最好在调用addNamingListener()
,或者如果不可能,则侦听器将收到异常通过NamingExceptionEvent
。此外,对于仅支持现有目标注册的服务提供商,当随后从命名空间中删除侦听器已注册的目标时,将通过
NamingExceptionEvent
(包含NameNotFoundException
)通知侦听器。应用程序可以使用方法
targetMustExist()
来检查EventContext
是否支持不存在的目标的注册。事件来源
您调用注册方法的EventContext
实例是(可能)生成的事件的事件源 。 源不一定是目标指定的对象。 仅当目标是空名称时,才是目标由源命名的对象。 换句话说,目标与scope参数一起用于标识侦听器感兴趣的对象,但事件源是侦听器已注册的EventContext
实例。例如,假设一个监听器进行以下注册:
NamespaceChangeListener listener = ...; src.addNamingListener("x", SUBTREE_SCOPE, listener);
NamingEvent
(evt
)必须包含:evt.getEventContext() == src evt.getOldBinding().getName().equals("x/y")
此外,侦听器注册/注销是使用
EventContext
实例 ,而不是使用命名空间中的相应对象。 如果程序在某个时候打算删除一个监听器,那么它需要保持对它所调用的EventContext
实例的引用addNamingListener()
(正如它需要保留对监听器的引用以便稍后删除它)。 它不能期望做lookup()
并获得另一个EventContext
实例来执行注销。注册寿命
在以下情况下注册的监听器将被取消注册:- 它被删除使用
removeNamingListener()
。 - 收集有关事件的信息时会抛出异常。 也就是说,当听众收到
NamingExceptionEvent
。 -
Context.close()
在已注册的EventContext
实例上调用。
EventContext
实例将继续存在并由服务提供商维护。监听器实现
注册/注销方法接受NamingListener
的实例。 对于NamingListener
的不同事件类型,存在NamingEvent
子接口。 例如,ObjectChangeListener
接口用于NamingEvent.OBJECT_CHANGED
事件类型。 要注册对多个事件类型的兴趣,侦听器实现应实现多个NamingListener
子接口,并使用单个调用addNamingListener()
。 除了减少方法调用的数量以及可能的侦听器的代码大小之外,这还允许一些服务提供商优化注册。线程问题
就像Context
在一般情况下,的实例EventContext
不能保证是线程安全的。 当多个线程同时访问同一个EventContext
时,必须小心。 有关线程问题的更多信息,请参见package description 。- 从以下版本开始:
- 1.3
-
-
字段汇总
字段 变量和类型 字段 描述 static int
OBJECT_SCOPE
表示对与目标命名的对象有关的事件感兴趣的常量。static int
ONELEVEL_SCOPE
用于表示对目标指定的上下文中的对象的事件感兴趣的常量,不包括目标指定的上下文。static int
SUBTREE_SCOPE
表示对目标指定的对象的子树中的对象的事件感兴趣的常量,包括目标命名的对象。-
Fields declared in interface 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
触发的命名事件中删除侦听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
添加一个侦听器,用于接收目标和作用域标识的对象更改时触发的命名事件。 这些事件的事件源是此上下文。 有关事件源和目标的讨论,请参阅类说明。 见常的描述OBJECT_SCOPE
,ONELEVEL_SCOPE
和SUBTREE_SCOPE
怎么看scope
影响登记。target
仅在scope
为ONELEVEL_SCOPE
target
需要命名上下文。target
如果可以命名一个非上下文scope
要么是OBJECT_SCOPE
或SUBTREE_SCOPE
。 将SUBTREE_SCOPE
用于非上下文可能很有用,例如,如果调用者事先不知道target
是否是上下文并且只想注册对以target
根的(可能是简并子树)的target
。当监听器被通知事件时,监听器可以在除执行
addNamingListener()
的线程之外的线程中调用。 当多个线程同时访问同一个EventContext
时,必须小心。 有关线程问题的更多信息,请参见package description 。- 参数
-
target
- 相对于此上下文要解析的非target
名称。 -
scope
-一个OBJECT_SCOPE
,ONELEVEL_SCOPE
,或SUBTREE_SCOPE
。 -
l
- 非l
的侦听器。 - 异常
-
NamingException
- 如果在添加侦听器时遇到问题。 - 另请参见:
-
removeNamingListener(javax.naming.event.NamingListener)
-
addNamingListener
void addNamingListener(String target, int scope, NamingListener l) throws NamingException
添加一个侦听器,用于接收由字符串目标名称和作用域命名的对象更改时触发的命名事件。 有关详细信息,请参阅接受Name
的重载。- 参数
-
target
- 相对于此上下文解析的对象的非target
字符串名称。 -
scope
-OBJECT_SCOPE
,ONELEVEL_SCOPE
或SUBTREE_SCOPE
。 -
l
- 非l
的侦听器。 - 异常
-
NamingException
- 如果在添加侦听器时遇到问题。 - 另请参见:
-
removeNamingListener(javax.naming.event.NamingListener)
-
removeNamingListener
void removeNamingListener(NamingListener l) throws NamingException
从接收到此EventContext
触发的命名事件中删除侦听EventContext
。 监听器可能已使用此EventContext
多次注册,可能具有不同的目标/范围参数。 调用此方法后,侦听器将不再接收使用此EventContext
实例作为事件源的事件(已分派过程中的事件除外)。 如果侦听器未注册或不再注册此EventContext
实例,则此方法不执行任何操作。- 参数
-
l
- 非l
的侦听器。 - 异常
-
NamingException
- 如果在删除侦听器时遇到问题。 - 另请参见:
-
addNamingListener(javax.naming.Name, int, javax.naming.event.NamingListener)
-
targetMustExist
boolean targetMustExist() throws NamingException
确定侦听器是否可以注册对不存在的目标的兴趣。- 结果
- 如果目标必须存在,则为true; 如果目标不存在则为false。
- 异常
-
NamingException
- 如果无法确定上下文在这方面的行为。
-
-