关闭

JNDI(一) 之 Naming and Directory Concepts

标签: JNDIapijava指导文档
253人阅读 评论(0) 收藏 举报
分类:

下面的章节描述了JNDI™ (Java Naming and Directory Interface) ,一个访问目录和命名资源的API。通过学习你可以了解基础的命名和目录服务并且可以使用JNDI写一个简单的程序来使用一些服务。目前最流行的目录服务是LADP(Lightweight Directory Access Protocol),它使用JNDI去访问目录服务。

(一) Naming and Directory Concepts(命名和目录概念)
1. Naming Concepts(命名概念)
命名服务是所有计算机的基础设施之一,也就是说,一个对象关联一个名字并且我们可以通过这个名字来找到这个对象。当我们使用任何计算机程序或系统的时候,总 是在给对象命名。例如,当你使用一个电子邮件系统,你必须提供这个接收者的名字。
为了访问一个电脑上的文件,你必须提供它的名字。命名服务允许你通过名字来查找一个对象。

 
命名服务的主要功能是把利于人们记忆的名字映射到对象,例如:标识符或者计算机程序经常使用的对象。
例如,Internet Domain Name System (DNS) 把机器名字映射为IP地址:
www.example.com ==> 192.0.2.5
文件系统把文件名映射成文件的引用,一个程序可以使用这个引用去访问这个文件的内容:
c:\bin\autoexec.bat ==> File Reference
这两个例子也证实了命名服务的广泛存在,从在Internet上命名一个对象到本地文件系统的文件命名。
2. Names(名字)
为了在一个命名系统中需找一个对象,你需要提供这个对象的名字。命名系统决定了这个名字必须遵守的语法。这个语法有时被称为命名系统的命名约定。一个名字由 许多部分组成。一个名字的描述由分隔符分割的许多部分组成。

Naming System

Component Separator

Names

UNIX file system

"/"

/usr/hello

DNS

"."

sales.Wiz.COM

LDAP

"," and "="

cn=Rosanna Lee, o=Sun, c=US


UNIX文件系统的命名约定是一个文件命名的路径相对于文件系统的根,每个组件的路径从左到右使用斜杠(“/”)字符分割。UNIX路径,/usr/hello,表示一个名字叫做hello的文 件在usr目录里面,这个路径是相对于文件系统的根。
DNS命名约定要求名字按从右到左排序并且使用点字符(“.”)分割。因此,sales.Wiz.COM表示一个 DNS实体,名字叫做sales,相对于DNS实体Wiz.COM,Wiz和COM也是 这种情况。
Lightweight Directory Access Protocol (LDAP) 命名约定组件顺序是从右到左,使用逗号“,”分割。LDAP名字 cn=Rosanna Lee, o=Sun, c=US 命名了一个LDAP实体 cn=Rosanna Lee,相对于实体o=Sun,相对于c=US。进一步,LDAP要求每个组件必须是由等号(“=”)分割的键/值对。
3. Bindings (绑定)
一个对象和一个名字的关系叫做绑定。一个文件名被绑定到一个文件。
  DNS包括机器名字和IP地址的绑定信息。一个LDAP名字和一个LDAP实体绑定。
4. References and Addresses (引用和地址)
依赖于命名服务,一些对象不能直接被命名服务存储;也就是说,一个对象的副本不能被放入命名服务中。相反的可以存储一个他们的引用;也就是说,一个指向这个 对象 的指针或者引用被存储在命名服务中。一个引用描述了怎样去访问这个对象。一般来说,它是一个紧凑的表示形式,可以用来和对象通信,而对象本身可能包括更 多的状态信息。使用引用,你可以和对象通信并且获取更多关于这个对象的信息。
例如,飞机对象可能包含飞机的乘客和机组人员的列表,它的飞行计划,燃料、仪器状态和航班号和起飞时间。相比之下,飞机对象引用可能只包含它的航班号和起飞时间。 这个 引用是一个更紧凑的描述信息关于飞机对象,并且可以通过它获得额外的信息。例如使用使用文件引用访问一个文件对象。例如,打印机对象可能包含打印机的状态, 当前队列和纸的纸托盘的数量。另一方面,打印机对象引用可能只包含信息如何获取打印机,例如打印机服务器名称和打印协议。
尽管引用可以包括任意的信息,但是它指向内容(或者通信终端)的地址是有用的:如何访问对象的具体信息。
简单期间,这个指南使用”对象”来表示对象和对象引用当他们之间不需要区分的时候。
5. Context (上下文)
一个上下文包含许多 名字到对象 的绑定信息。每一个上下文和一个命名约定相关联。
一个上下文总是提供一个对象查找操作,这个操作返回一个对象。它通常也提供名字绑定,列出绑定名字等操作。在一个上下文对象中的一个名字可以被绑定到另一个 上下文对象(也叫做子上下文)。


 
在UNIX系统中,一个文件目录,例如/usr,表示一个上下文。一个文件目录相对于另一个文件目录命名称作子上下文(UNIX用户叫它子目录)。也就是说在/usr/bin文件 目录中,
目录bin是usr的子上下文(subcontext)。一个DNS域,例如COM表示一个上下文。一个DNS域相对于另一个DNS域表示一个子上下文。例如Sun.COM,Sun是COM的一个 子上下文。
最后,一个LDAP实体,例如c=us,表示一个上下文。一个LDAP实体相对于另一个LDAP实体命名,那么也是一个子上下文。例如LDAP实体o=sun,c=us,实体o=sun是 c=us的一个子上下文。
6. Naming Systems and Namespaces (命名系统和命名空间)
命名系统是一组相关的具有相同类型的上下文(他们有相同的命名约定),并提供一组通用的操作。
一个系统实现了DNS,它是一个命名系统。一个使用LDAP通信的系统,是一个命名系统。
一个命名系统提供一组命名相关的操作为它的客户使用命名服务。命名服务通过自己的接口提供访问。DNS提供了一个机器名字到IP地址的映射。LDAP提供LDAP名 字到LDAP对象的映射服务。文件系统通过映射文件名到文件和目录来提供命名服务。
7. Directory Concepts(目录概念)
许多命名服务扩展自目录服务。一个目录服务把名字和对象关联在一起,也可以把对象和属性关联起来。
目录服务=命名服务 + 对象包含的属性
你不仅可以通过名字来查找对象和对象的属性也可以使用属性来搜索对象。
 
一个例子是电话公司的目录服务。它把名字映射到用户的地址和电话号码。电脑的目录服务很像电话公司的目录服务,他们都存储例如电话号码和地址信息。然而,电 脑的目录服务是更强大,因为它是联网的并且可以被用户、程序、甚至电脑自己和其他电脑存储各种各样的信息。
一个目录对象描述了计算机环境中的一个对象。一个目录对象可以是一台打印机、一用户、一台计算机或者网络。一个目录对象包含了它表示的对象的属性。
8. Attribute(属性)
目录对象可以有属性。例如,一个目录对象可能描述的是一台打印机,它有速度、分辨率和颜色。如果一个描述用户的目录对象,它可能有email地址、电话号码、邮 政地址和电子帐号等属性信息,例如:
Attribute Identifier : Attribute Value
                 mail   john.smith@example.com
9. Directories and Directories Services(目录和目录服务)
一个目录包括许多目录对象。目录服务提供创建、添加、删除和修改目录中关联对象属性操作。服务通过它自己的接口被访问。
生活中有许多关于目录服务的例子。
网络信息服务(NIS)
NIS是UNIX操作系统上的一个可用目录服务,用于存储系统相关的信息,例如:相关的机器、网络、打印机和用户。
Oracle目录服务
Oracle目录服务基于网络标准LDAP的通用目录服务。
10. Search Service(搜索服务)
你可以通过服务对象的名字在一个目录服务中查找目录对象。另外,许多基于LDAP的目录服务支持搜索。当你搜索的时候你可以不提供一个名字而是对象必须包含的 属性的逻辑表达式。查询表达式叫做查询过滤器。这种风格的搜索有时被称为反向查找或基于内容的搜索。目录服务搜索并且返回满足搜索过滤器的对象。
例如,你可以在目录服务中查找:
  • 所有age属性大于40岁的用户
  • 所有以“192.113.50”开头的IP
11. Combining Naming and Directory Services(结合命名和目录服务)
目录通常分层安排他们的对象。例如,LDAP以树的形式安排目录对象,叫做目录信息树(DIT)。例如在DIT内,一个组织对象可能包含一个组对象,这个组对象反过来 也包含person对象。当目录对象以这种方式安排的时候,他们扮演一个命名上下文的角色,除此之外还扮演属性容器。

0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:110842次
    • 积分:1930
    • 等级:
    • 排名:千里之外
    • 原创:73篇
    • 转载:9篇
    • 译文:6篇
    • 评论:39条
    博客专栏
    最新评论