public interface EventContext
包含注册/注销侦听器的一些方法,这些侦听器在上下文中命名的对象发生更改时获得触发事件的通知。
如果服务仅支持注册现有目标,则试图注册不存在的目标将导致第一时间抛出 NameNotFoundException,一般是在调用 addNamingListener() 时;如果这没有发生,则侦听器将通过 NamingExceptionEvent 收到异常。
此外,对于仅支持注册现有目标的服务提供者而言,当以后从名称空间移除注册过侦听器的目标时,该侦听器通过 NamingExceptionEvent(包含 NameNotFoundException)获得通知。
应用程序可以使用 targetMustExist() 来检查 EventContext 是否支持注册不存在的目标。
例如,假定侦听器进行以下注册:
以后删除名为 "x/y" 的对象时,相应的 NamingEvent ( evt) 必须包含:NamespaceChangeListener listener = ...; src.addNamingListener("x", SUBTREE_SCOPE, listener);
evt.getEventContext() == src evt.getOldBinding().getName().equals("x/y")
此外,侦听器注册/注销是使用 EventContext 实例 进行的,而不是使用名称空间中的相应对象。如果程序在某个时候要移除侦听器,则它需要保持对要调用 addNamingListener() 的 EventContext 实例的引用(这正如为了以后进行移除而需要保持对侦听器的引用)。不要期望它能进行 lookup() 而获取另一个可以执行注销的 EventContext 实例。
字段摘要 | |
---|---|
static int |
OBJECT_SCOPE 该常量用来表示对涉及目标指定对象的事件感兴趣。 |
static int |
ONELEVEL_SCOPE 该常量用来表示对涉及目标指定上下文中对象的事件感兴趣,不包括目标指定的上下文。 |
static int |
SUBTREE_SCOPE 该常量用来表示对涉及目标指定对象的子树中对象的事件感兴趣,包括目标指定的对象。 |
方法摘要 | |
---|---|
void |
addNamingListener(Name target, int scope, NamingListener l) 添加接收命名事件的侦听器,这些事件在目标和范围所标识的对象发生更改时触发。 |
void |
addNamingListener(String 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 |
字段详细信息 |
---|
static final int OBJECT_SCOPE
此常量的值为 0。
static final int ONELEVEL_SCOPE
此常量的值为 1。
static final int SUBTREE_SCOPE
此常量的值为 2。
方法详细信息 |
---|
void addNamingListener(Name target, int scope, NamingListener l) throws NamingException
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)
void addNamingListener(String target, int scope, NamingListener l) throws NamingException
target
- 相对于此上下文解析的对象的非 null 字符串名称。
scope
-
OBJECT_SCOPE、
ONELEVEL_SCOPE 或
SUBTREE_SCOPE 之一。
l
- 非 null 侦听器。
NamingException
- 如果在添加侦听器时遇到问题。
removeNamingListener(javax.naming.event.NamingListener)
void removeNamingListener(NamingListener l) throws NamingException
l
- 非 null 侦听器。
NamingException
- 如果在移除侦听器时遇到问题。
addNamingListener(javax.naming.Name, int, javax.naming.event.NamingListener)
boolean targetMustExist() throws NamingException
NamingException
- 如果无法确定上下文的这一行为。