模块
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
-
接口摘要 接口 描述 Context 此接口表示命名上下文,该命名上下文由一组名称到对象绑定组成。Name Name
接口表示通用名称 - 有序的组件序列。NameParser 此接口用于解析分层命名空间中的名称。NamingEnumeration<T> 此接口用于枚举javax.naming和javax.naming.directory包中的方法返回的列表。Referenceable 此接口由可以为其自身提供引用的对象实现。 -
类摘要 类 描述 BinaryRefAddr 此类表示通信端点的地址的二进制形式。Binding 此类表示在上下文中找到的名称到对象绑定。CompositeName 此类表示复合名称 - 跨越多个名称空间的组件名称序列。CompoundName 此类表示复合名称 - 来自分层名称空间的名称。InitialContext 此类是执行命名操作的起始上下文。LinkRef 此类表示一个Reference,其内容是名称,称为链接名称,绑定到上下文中的原子名称。NameClassPair 此类表示在上下文中找到的绑定的对象名称和类名称对。RefAddr 此类表示通信端点的地址。Reference 此类表示对在命名/目录系统外部找到的对象的引用。StringRefAddr 此类表示通信端点的地址的字符串形式。 -
异常摘要 异常 描述 AuthenticationException 在访问命名或目录服务时发生身份验证错误时抛出此异常。AuthenticationNotSupportedException 如果不支持所请求的特定身份验证,则抛出此异常。CannotProceedException 抛出此异常表示操作已到达操作无法继续操作的名称中的某个点。CommunicationException 当客户端无法与目录或命名服务通信时,将引发此异常。ConfigurationException 遇到配置问题时会抛出此异常。ContextNotEmptyException 尝试销毁非空的上下文时抛出此异常。InsufficientResourcesException 当资源不可用于完成请求的操作时,抛出此异常。InterruptedNamingException 当被调用的命名操作被中断时,抛出此异常。InvalidNameException 此异常表示指定的名称不符合命名系统的命名语法。LimitExceededException 当方法由于用户或系统指定的限制而异常终止时,抛出此异常。LinkException 此异常用于描述解析链接时遇到的问题。LinkLoopException 在尝试解析链接时检测到循环或者已达到链接计数的特定于实现的限制时,将引发此异常。MalformedLinkException 在解析或构建链接时遇到格式错误的链接时会抛出此异常。NameAlreadyBoundException 方法抛出此异常以指示无法添加绑定,因为该名称已绑定到另一个对象。NameNotFoundException 当名称的组件由于未绑定而无法解析时,将引发此异常。NamingException 这是Context和DirContext接口中的操作抛出的所有异常的超类。NamingSecurityException 这是Context和DirContext接口中的操作抛出的与安全相关的异常的超类。NoInitialContextException 如果无法创建初始上下文实现,则抛出此异常。NoPermissionException 尝试执行客户端没有权限的操作时抛出此异常。NotContextException 当命名操作进行到需要上下文来继续操作的点时,抛出此异常,但解析的对象不是上下文。OperationNotSupportedException 当上下文实现不支持被调用的操作时,抛出此异常。PartialResultException 抛出此异常表示到目前为止返回或返回的结果是部分的,并且无法完成操作。ReferralException 此抽象类用于表示引用异常,该异常是为响应 引用(例如LDAP v3服务器返回的 引用)而生成的。ServiceUnavailableException 尝试与目录或命名服务通信时,抛出此异常,并且该服务不可用。SizeLimitExceededException 当方法生成的结果超出与大小相关的限制时,抛出此异常。TimeLimitExceededException 当方法未在指定的时间限制内终止时,抛出此异常。