模块  java.naming

Package javax.naming

提供用于访问命名服务的类和接口。

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

上下文

此包定义了上下文的概念,由Context接口表示。 上下文由一组名称到对象绑定组成 Context是查找,绑定,解除绑定和重命名对象以及创建和销毁子上下文的核心接口。

lookup()是最常用的操作。 您提供lookup()要查找的对象的名称,并返回绑定到该名称的对象。 例如,以下代码片段查找打印机并将文档发送到要打印的打印机对象:

Printer printer = (Printer)ctx.lookup("treekiller");
printer.print(report);

名称

Context接口中的每个命名方法都有两个重载:一个接受Name参数,另一个接受字符串名称。 Name是一个表示通用名称的接口 - 零个更多组件的有序序列。 对于这些方法,可以使用Name表示复合名称CompositeName ),以便您可以使用跨多个名称空间的名称来命名对象。

接受Name的重载对于需要操作名称的应用程序非常有用:组合它们,比较组件等等。 接受字符串名称的重载可能对简单应用程序更有用,例如那些只是简单地读取名称并查找相应对象的应用程序。

绑定

Binding类表示名称到对象的绑定。 它是一个元组,包含绑定对象的名称,对象类的名称以及对象本身。

Binding类实际上是NameClassPair的子类, NameClassPair包含对象的名称和对象的类名。 当您只需要有关对象类的信息并且不想支付获取对象的额外成本时, NameClassPair非常有用。

参考

对象以不同方式存储在命名和目录服务中。 如果对象存储支持存储Java对象,则它可能支持以序列化形式存储对象。 但是,某些命名和目录服务不支持存储Java对象。 此外,对于目录中的某些对象,Java程序只是访问它们的一组应用程序。 在这种情况下,序列化的Java对象可能不是最合适的表示形式。 JNDI定义了一个引用 ,由Reference类表示,其中包含有关如何构造对象副本的信息。 JNDI将尝试将从目录中查找的引用转换为它们所代表的Java对象,以便JNDI客户端错误地认为目录中存储的内容是Java对象。

初始背景

在JNDI中,所有命名和目录操作都是相对于上下文执行的。 没有绝对的根源。 因此,JNDI定义了一个初始上下文 InitialContext ,它为命名和目录操作提供了一个起点。 一旦有了初始上下文,就可以使用它来查找其他上下文和对象。

例外

JNDI定义了在执行命名和目录操作过程中可以抛出的异常的类层次结构。 此类层次结构的根是NamingException 对处理特定异常感兴趣的程序可以捕获异常的相应子类。 否则,程序应该捕获NamingException

包装规格

JNDI API规范和相关文档可在JNDI documentation中找到。
从以下版本开始:
1.3