- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
查看更多
命名服务
第18章 命名服务 OMG命名服务是最简单也是最基本的标准CORBA服务。它提供从名称到对象引用的映射:给定一个名称,该服务返回一个存储在名称下对象引用。这点很像Internet的域名服务系统(DNS),将Internet的域名转换为IP地址。OMG命名服务和DNS执行简单的从名称到对应查找值的映射。 命名服务给客户程序提供了许多便利之处: (1) 客户程序可以给对象起有意义的名称而不必处理字符串化的对象引用。 (2)通过改变在某个名称下公告的引用值,客户程序可以在不改变源代码的情况下使用不同接口的实现。客户程序使用同一个名称却获得不同的引用。 (3) 命名服务可以使应用程序的组元访问一个应用程序的初始引用。在命名服务中公告这些引用,可以避免将引用变成字符串化的引用存储在文件中的必要性。 18.3 基本概念 命名服务将名称映射为对象引用。这种“名称-引用”的关系称为名称绑定。同一个对象引用可以使用不同的名称多次被存储,但每一个名称只能准确的确定一个引用。一个命名上下文(naming context)就是一个存储名称绑定的对象。也就是说,每一个上下文对象实现一个从名称到对象引用的映射表,这个表中的名称可以表示某个应用程序的对象引用,也可以表示命名服务中的另一个上下文对象。这就意味着,如同文件系统,上下文就好像是一个有层次的表单:命名上下文相当于一个目录,用来存储指向其它目录和文件的名称,一个上下文和名称绑定的层次结构称为命名图。 基本概念 在下面的命名图中,空心的节点表示命名上下文,实心的节点表示应用程序对象。一个上下文就可以是内部节点,也可以是外部节点,而一个应用程序只能作为叶节点。方向弧表示对象引用,并且以它们在命名上下文中出现的名称被标注。 这种命名图与DOS和UNIX文件系统相似。 18.4 命名服务IDL的结构 命名服务IDL的定义是由CosNaming.idl文件提供的。此文件包含一个名为CosNaming的独立模块。这个模块包含许多类型的定义,同时还包含两个接口:NamingContext和BindingIterator。这个服务的IDL的完整结构如下: //File:CosNaming.idl #pragma perfix”omg.org” Module CosNaming{ //Type definitions here interface NamingContext{//……}; interface BindingIterator{//……};}; 18.5 名称的语义 18.5.1 名称结构 OMG命名服务中使用的名称与普通文件系统中的并不完全相同。其中有一个序列NameComponent。 NameComponent结构对应于路径名中的单“跳”。名称组元序列对应一个路径名。它定义了从某个起始上下文到目标绑定的遍历关系。每一个名称组元本身是由一对字符串构成的:id和kind。这里的名称CosNaming与普通文件的路径名不同(在路径名中,每个名称只是一个简单字符串,而不是字符串对。) 18.5.2 名称的表达 使用id和kind字段的一个名称表示如下: user(dir)/u1(dir)/fred(person) 用表格表示如下: Index id kind 0 user dir 1 u1 dir 2 fred person 18.5.3 kind字段的作用 名称组元中的kind字段可以用来描述id字段。例如,可以用person的字段值来对某一个名称下公告的对象进行分类。 18.5.4 不支持宽位字符串 主要是为了避免相同的仓库ID代表了不同的类型。 18.5.5 名称的等价性 (1) 两个名称组元有相同的id和kind字段值时-等价 (2) 两个名称只有当它们所有的组元均相同时-等价 18.6 名称上下文的IDL 绝大多数名称服务的功能都由NamingContext接口提供,此接口定义了许多相关的实现和异常。 18.6.3 获得初始命名上下文 resolve_initial_references函数不仅返回了一个Root POA引用,而且还充当许多其他对象和服务器程序的引导程序,包括命名服务。 list_initial_services函数只返回ORB所配置的对象标识符列表。 如果用NameService的对象标识符来调用resolve_initial_references,操
文档评论(0)