在访问命名和
目录服务时提供对事件通知的支持。 此包定义 Java Naming and Directory InterfaceTM (JNDI) 的事件通知操作。 JNDI 向使用 Java 编程语言编写的应用程序提供命名和目录功能。它被设计成与任何特定的命名或目录服务实现无关。因此可以使用共同的方式对多种服务(新的、新出现的及已经部署的服务)进行访问。
命名事件
此包定义 NamingEvent 类以表示由命名/目录服务生成的事件。它还定义 Context 和 DirContext 的
子接口(分别称为 EventContext 和 EventDirContext),应用程序可以通过这些子接口注册它们感兴趣的、由上下文触发的事件。
NamingEvent 表示在命名或
目录服务中发生的事件。有两种命名事件:
影响对象内容的事件。
这两种事件分别由对应的侦听器处理:NamespaceChangeListener 或 ObjectChangeListener。
例如,应用程序可以按以下方式注册对上下文中的对象进行的其感兴趣的更改:
EventContext src =
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() 方法被调用(如上文示例代码所示),侦听器被自动注销。
包规范
以下文档可以在 Java 技术站点找到:
JNDI API Document (Postscript)
JNDI API Document (PDF)
从以下版本开始:
1.3