Java命名与目录接口

JNDI - Java Naming and Directory Interface,Java命名和目录接口。

Naming

直译来说就是“名称”,但更多情况下是与 Naming Service 一起使用。所谓名称服务,简单来说就是通过名称查找实际对象的服务。这是个抽象概念,正如数学中的理论所言:普适的代价就是抽象。

通常我们根据名称系统(naming system)定义的命名规则去查找具体的对象,比如在 UNIX 文件系统中,名称(路径)规则就是以根目录为起点,并以 / 号分隔逐级查找子目录;DNS 名称系统中则是要求名称(域名)从右到左 进行逐级定义,并以点号 . 进行分隔。

在名称系统中,有几个重要的概念:

Bindings: 表示一个名称和对应对象的绑定关系,比如在文件系统中文件名绑定到对应的文件,在 DNS 中域名绑定到对应的 IP。

Context: 上下文,一个上下文中对应着一组名称到对象的绑定关系,我们可以在指定上下文中查找名称对应的对象。比如在文件系统中,一个目录就是一个上下文,可以在该目录中查找文件,其中子目录也可以称为子上下文 (subcontext)。

References: 在一个实际的名称服务中,有些对象可能无法直接存储在系统内,这时它们便以引用的形式进行存储,可以理解为 C/C++ 中的指针。引用中包含了获取实际对象所需的信息,甚至对象的实际状态。比如文件系统中实际根据名称打开的文件是一个整数 fd (file descriptor),这就是一个引用,内核根据这个引用值去找到磁盘中的对应位置和读写偏移。

Directory

目录服务是名称服务的一种拓展,除了名称服务中已有的名称到对象的关联信息外,还允许对象拥有属性(attributes)信息。由此,我们不仅可以根据名称去查找(lookup)对象(并获取其对应属性),还可以根据属性值去搜索(search)对象。

目录服务(Directory Service)提供了对目录中对象(directory objects)的属性进行增删改查的操作。一些典型的目录服务有:

  • NIS: Network Information Service,Solaris 系统中用于查找系统相关信息的目录服务;
  • Active Directory: 为 Windows 域网络设计,包含多个目录服务,比如域名服务、证书服务等;
  • 其他基于 LDAP 协议实现的目录服务;

总而言之,目录服务也是一种特殊的名称服务,关键区别是在目录服务中通常使用搜索(search)操作去定位对象,而不是简单的根据名称查找(lookup)去定位。

在下文中如果没有特殊指明,都会将名称服务与目录服务统称为目录服务。

Technology 4/18/2022, 2:22:18 PM
64
0
0
命名与目录接口命名服务目录服务JNDI
如有帮助,点赞鼓励一下吧!