命名和目录概念
这一节课将详细地解释命名和目录的概念,并讨论Java程序如何利用命名和目录服务所提供的功能。同时也会给出所有与该服务相关的术语定义。这些术语将在本课结尾的术语表中一一归纳列出。
命名的概念
命名服务作为一种基础设施出现在众多的计算机系统,其意义在于提供根据名称关联对象和通过对象匹配相应名称的服务。当你使用几乎所有的计算机程序或系统的时候,你总是会使用到这个或那个对象的名称。举例来说,当你使用一个电子邮件系统的时候, 你必须提供你想要发送邮件的接受者的名字。为了存取计算机上的一个文件,你必须提供它的名字。命名服务允许你通过名称找到一个与之对应的对象。
一个命名服务的主要功能就是把一个人类容易理解的名字映射到相应的对象, 例如计算机程序经常使用的地址、标识符或对象等。 举例来说,Internet域名系统(DNS)把机器名字(例如www.sun.com) 映射到IP地址(192.9.48.5)。一个文件系统把一个文件名(例如c:\ bin\autoexec.bat)映射到一个文件句柄以便程序能够存取文件的内容。这二个例子都说明了命名服务广泛的应用在多个领域,从命名Internet上的一个对象到命名本地文件系统上的一个文件。
名称
你可以通过一个名称要在一个命名系统中查找到一个对象。命名系统决定名称必须遵从的语法规则。这种语法有时被称为命名系统的命名规则。
举例来说,UNIX文件系统的命名规则是,一个文件从它与文件系统的根的相对路径来命名,路径的每个部分从左到右使用向前的斜杠("/")进行分隔。例如,UNIX路径名称,/usr/hello,标记着一个位于目录usr下的文件hello,而目录usr位于文件系统的根下面。
DNS的命名规则规定一个DNS的名称由按照从右至左顺序的通过被点(".")分隔的各个部分组成。例如,DNS名称sales.Wiz.COM标记了一个属于Wiz.COM下面的名为sales的入口。同样道理,DNS入口Wiz.COM又标记着Wiz是属于COM入口下面的一个入口。
轻量级目录访问协议(LDAP)的命名规则是各个组成部分按照从右至左的顺序排列,中间以逗号(",")分隔。例如LDAP名称cn= Rosanna Lee,o=Sun,c=US定义了一个属于入口o=Sun的LDAP入口cn= Rosanna Lee,而o=Sun依次属于c=US。LDAP协议进一步的规则定义了其中的每个部分必须是一个名称/值对(name/pair)的形式,并且名称与值之间使用等号("=")连接。
绑定
通过名称与相应对象关联的方式称为绑定。例如,可以认为,一个文件名绑定到一个文件,DNS包含了从IP地址映射到机器的绑定,LDAP名称绑定到一个LDAP入口。
引用和地址
因为有了命名服务,对象不需要直接地储存在服务里面,同时,对象的副本也不需要存储在命名服务里。取而代之的作法是,他们只保存其引用,也就是说,仅仅是一个指向该对象的引用被保存在命名服务里面。一个引用保存着关于如何访问对象的信息。典型地,引用充当着一个精简的与所引用对象通讯的代表,而更多的状态信息依然保存在对象自身上。通过引用,你能够连接对象并且获得关于对象的更多的信息。
举例来说,一个飞机对象可能包含一连串的飞机乘客和组员、航班计划、燃料、设备状态、班机号码和出发时间等状态信息。相反地,一个飞机对象的引用可能仅仅包含它的班机号码和出发时间的信息。这个引用是关于飞机对象的精简的代表而且能用来获得飞机对象更多的信息。又例如,一个文件对象——一个存取文件的引用,也称为一个文件句柄。一个打印机对象,可能包含打印机的状态,例如它的当前等待队列和存纸的数量。而另一方面,一个打印机对象可能只包含关于如何访问打印机的信息,例如它的打印服务器名称和打印协议。
虽然总的来说,一个引用能包含任意的信息,但是通常它被作为其所指内容的地址(或者说通讯端点)——访问对应对象的特定信息。
为了简单起见,当两者区别不明显的情况下,本教程使用对象(object)同时指代“对象”和“对象的引用”。
上下文(Context)
上下文是一组名称-对象的绑定。每种上下文都有一个对应的命名规则。任何一个上下文都将提供返回需要的对象的查询(或解释)操作,或者还可能提供类似绑定名称、取消绑定名称和列举绑定的名称的操作。一个上下文对象中的名称又能够被绑定到其他的具有相同命名规则的上下文中(称之为子上下文)。
举例来说,一个UNIX文件系统中的目录/usr就是一个上下文。一个相对于另外一个文件目录命名的文件目录就是子上下文。(一些 UNIX用户称其为一个子目录)。在一个文件目录/usr/bin中, 目录bin是usr的子上下文。另外一个例子,比如COM这样的一个DNS领域是一个上下文。一个相对于另一个DNS域命名的DNS域是一个子上下文。举例来说,在DNS域Sun.COM中,DNS域Sun是COM的子上下文。
最后,一个LDAP入口,比如c=us,就是一个上下文。一个相对于另一个LDAP入口命名的LDAP入口是上下文。举例来说,在LDAP入口o=sun,c=us中,o=sun是c=us的子上下文。
命名系统和命名空间
一个命名系统是由相同类型的若干连接的上下文组成,它们拥有相同的命名规则,并且提供一系列通用的操作方法。
例如,DNS就是一个命名系统的实现,一个实现LDAP通讯的系统也是一个命名系统。
一个命名系统为其客户提供处理命名相关的操作的服务。这些服务通过其接口进行访问。例如,DNS提供把机器关联到IP地址的命名服务。LDAP提供把LDAP名称映射到LDAP入口的服务。文件系统系统把文件名连接到文件或目录的服务。(译注:目录通常只是文件的特殊形式,例如,在Unix系统中,目录就是一个文件,只是它包含的内容就是一系列文件的入口。
命名空间就是命名系统中的若干名字的集合。比如,Unix文件系统中的所有文件和目录的名字就组成一个命名空间。DNS的命名空间包含了所有的DNS域和入口的名称。LDAP的命名空间包含着所有LDAP入口的名称。
本文地址:http://com.8s8s.com/it/it11457.htm