Skip navigation links
Java™ Platform
Standard Ed. 8

Package javax.naming.event

访问命名和目录服务时,提供对事件通知的支持。

See: 描述

Package javax.naming.event Description

访问命名和目录服务时,提供对事件通知的支持。

该包定义了Java命名和目录接口TM (JNDI)的事件通知操作。 JNDI为以Java编程语言编写的应用程序提供命名和目录功能。 它被设计为独立于任何特定的命名或目录服务实现。 因此,可以以一种常见的方式访问各种服务 - 新的,新兴的和已经部署的服务。

命名事件

此包定义了一个NamingEvent类来表示由命名/目录服务生成的事件。 它还定义了ContextDirContext的子接口 ,称为EventContextEventDirContext ,通过该子接口 ,应用程序可以注册他们对上下文触发的事件的兴趣。

NamingEvent表示发生在命名或目录服务中的事件。 命名事件有两类:

事件的每个类别都通过相应的监听器处理:NamespaceChangeListener,ObjectChangeListener。

例如,应用程序可以在上下文中注册对对象更改的兴趣,如下所示:

EventContext src = 
    (EventContext)(new InitialContext()).lookup("o=wiz,c=us");
src.addNamingListener("ou=users", EventContext.ONELEVEL_SCOPE,
    new ChangeHandler());
...
class ChangeHandler implements ObjectChangeListener {
    public void objectChanged(NamingEvent evt) {
        System.out.println(evt.getNewBinding());
    }
    public void namingExceptionThrown(NamingExceptionEvent evt) {
        System.out.println(evt.getException());
    }
}

线程问题

当一个事件被发送到一个监听器时,监听器方法(如objectChanged() )可以在一个除执行了addNamingListener()调用的线程之外的一个线程中被执行。 使用哪个线程的选择由服务提供商进行。 当事件被分派到多个监听器时,服务提供者可以选择(并且通常鼓励)在单独的线程中同时执行监听器方法。

当监听器实例调用NamingEvent.getEventContext()时,它必须考虑到其他线程将同时处理该上下文的可能性。 同样,当通过addNamingListener()注册一个监听器时,注册线程必须考虑服务提供商稍后在新创建的线程中调用侦听器的可能性。 由于Context实例通常不能保证是线程安全的,因此必须根据需要同步所有上下文操作。

异常处理

当监听器用上下文注册事件时,上下文可能需要进行一些内部处理,以便收集生成事件所需的信息。 例如,上下文可能需要向服务器发出请求,以注册对服务器上最终将被转换为事件的更改的兴趣。 如果发生异常,从而阻止收集有关事件的信息,则不会将侦听器通知给事件。 发生这种异常时,将触发NamingExceptionEvent通知侦听器。 调用监听器的namingExceptionThrown()方法,如上面的示例代码所示,并且监听器被自动注销。

包装规格

JNDI API规范及相关文档可在发现JNDI documentation
从以下版本开始:
1.3
Skip navigation links
Java™ Platform
Standard Ed. 8