已阅读5页,还剩1页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
VisiBroker的CORBA NameService使用方法品雪 1999.11.1 感性认识 NameService的原理就不多说了,先看做法:一、Bind Name为对象绑定名字1、初始化CORBA:CORBA:ORB_var orb = CORBA:ORB_init(argc, argv);CORBA:BOA_var boa = orb-BOA_init(argc, argv);2、指定要绑定名字的对象ID,及要绑定的名字const char* id = argv1;const char* kind = argv2;3、将对象实例登记到BOA中。MyImpl myObject(My Object);boa-obj_is_ready(&myObject);4、定义一个NamingContext:CosNaming:NamingContext_var context = CosNaming:NamingContext:_bind();5、定义一个Name对象,并把其id及kind设为想要绑定的名字参数CosNaming:Name name;name.length(1);name0.id = id;name0.kind = kind;6、绑定名字context-bind(name, &myObject);7、等待客户请求boa-impl_is_ready(); 二、Solve Name以名字查找取得对象1、初始ORB: CORBA:ORB_var orb = CORBA:ORB_init(argc, argv); 2、建立NamingContext和Name对象:CosNaming:NamingContext_var context = CosNaming:NamingContext:_bind(); CosNaming:Name name; 3、指定要查找的对象的名字参数:const char* id = argv1; const char* kind = argv2; name.length(1); name0.id = id; name0.kind = kind; 4、使用Name获取对对象的引用:CORBA:Object_var object = context-resolve(name); 5、使用获得的对象:This:Is_var test = This:Is:_narrow(object); cout Testing: test aTest(); 三、测试运行1、启动NameFactory,设定root NameContext为NorthAmerica,Log文件为na_log:Solaris prompt CosNamingExtFactory NorthAmerica na_logWindows prompt nameextf NorthAmerica na_log 2、运行bind程序,为程序中实现的My Object在NameContext中绑定一个名字(由指定ID和Type组成)prompt bind SanFrancisco City 3、运行resolve程序,尝试以NameID、Type获得对象prompt resolve SanFrancisco City4、在resolve程序中会使用获得的This:Is(My Object)型的对象引用aTest()方法。原理 一、背景 1. 有一大公司,在Asia、Europe、NorthAmerica有分部。 2. 以北美为例,NorthAmerica有Shipping Department和Sales Department 3. 在北美的Shipping Department要管理Inventory、Orders资料 4. 在北美的Sales Department要处管理Cutsomer、Billing资料 现在在要使用CORBA来建立其信息系统。为此,我们为Invetory、Orders等建立了对象在各地的相应系统进行数据处理。为简单化全球系统的互相访问,就需要使用Name Service来解决。二、解决之道利用Name Service我们可以一个Name Space,内容为分部名字;再建立每个分部的部门名Name Service;最后为每个部门建立业务名Name Space。每项业务都会有自己的对象,我们可以为这些对象取一些有意义的名字并登记到相应的名字空间里。于是我们得到了一个树形结构,由根到叶的路径时由有意义的名字组成的(如 北美,销售部,客户)。这样,我们就可以用一串有意义的名字形成一条路径来访问所需的对象,比起使用抽象的对象要容易些,另外处理同一业务的对象可以取相同的名字,由于名字空间不同不会发生冲突。在VisiBroker里是使用NamingContext对象来实现上边所述的Name Space的。该对象包含一个Name structure的清单,名字清单中的每个Name已经被绑定给某个对象或其它的NamingContext对象(如果是NamingContext则代表下一级名字空间);NamingContext对象还提供对空间内名字的管理功能,如服务器对象使用NamingContext给自己绑定名字(bind),客户端以逻辑名字调用NamingContext的resolve方法来取得所需要的对象等。(NamingContext的方法成员用法略,需要时请查联机文档)IDL语法的Name Context形式化描述:module CosNaming interface NamingContext void bind(in Name n, in Object obj) raises(NotFound, CannotProceed, InvalidName, AlreadyBound); void rebind(in Name n, in Object obj) raises(NotFound, CannotProceed, InvalidName);void bind_context(in Name n, in NamingContext nc) raises(NotFound, CannotProceed, InvalidName, AlreadyBound);void rebind_context(in Name n, in NamingContext nc) raises(NotFound, CannotProceed, InvalidName);Object resolve(in Name n) raises(NotFound, CannotProceed, InvalidName);void unbind(in Name n) raises(NotFound, CannotProceed, InvalidName);NamingContext new_context(); NamingContext bind_new_context(in Name n) raises(NotFound, CannotProceed, InvalidName, AlreadyBound);void destroy() raises(NotEmpty);void list(in unsigned long how_many, out BindingList bl, out BindingIterator bi); ; ; 那么Name Space将保存在什么地方呢?Visibroker提供了两个程序(namefact,nameextf)来提供名字空间服务。这两个程序实质上是用来创建NamingContext对象的,所以我们称它们为NamingContext Factory。两个factory的区别在于ext版的在建立NamingContext的同时会建立一个根名字空间(root name)。如果想使用名字空间服务先运行namefact FactName logfilename,这样就会建立起指定名字的名字工厂并记录在log中,下次再启动时服务程序会自动根据log重建名字空间。说了半天的名字,Visibroker里的名字是什么呢?它是一个CosNaming:Name对象,它表示的是可以可以绑定给一个对象实例或NamingContext的标识符。一个Name可不只是一串字符,它是一个或多个NameComponent结构的序列。每个NameComponent包含两个字符串:id和kind。Naming Service并不对这些字符串加以解释或管理(除了检查同一NamingContext里字串是否唯一)。id代表名字将要绑定给的对象。kind成员则给名字增加了一个性质描述,如Inventory的kind可设为RDBMS。用IDL语法对名字做一个形式化的描述:module CosNaming typedef string Istring; struct NameComponent Istring id; Istring kind; ; typedef sequence Name; ; 注:LName面提供了另外一种为CORBA对象创建名字的方法,略。给对象都起好有意义的名字之后,客户程序就可以据此访问对应的对象了。这要使用名字求解服务,NamingContext提供了resolve方法来完成逻辑名到对象引用的变换。一个Name由一个或多个NameComponent组成,所以求解过程需要组成Name路径的所有NameComponet。举几个实际Name的例子,其中用表示NameComponent,表示一个名字:简单的名字Billing,可以绑定给对象实例或NameContext。复杂的名字North American,ShippingDepartment,Inventory,由三个成员序列组成。1、 象这样由N个NamingComponent组成的复杂名字,是绑定给对象实例的,那么其中的前N-1个必须解得NamingContext,最后一个必须解得一个对象实例。2、显然,绑定给NamingContext的名字的所有成员都必须解得对NamingContext对象的引用。一个绑定给ORB对象的复杂名字:Nameid=NorthAmerica,kind=NULL,id=SalesDapartment,kind=NULL,id=Customer,kind=NULL,id=InternationalSupplies,kind=COM一个绑定给NamingContext对象的复杂名字:Nameid=NorthAmerica,kind=NULL,id=SalesDepartment,kind=NULL 三、小结一下:、NameFact.EXE-FactLogFile-NamingContext-NamingContextName-NameComponent名字服务程序静态的名字空间名字空间下级名字空间或者ORB对象、默认Context:对于一个客户程序来说,需要设定一个NamingContext做为自己的根Context,这就是它的Default Context。通过从命令行传递-SVCnameroot :name 1&rt;.;/./.; 参数给客户程序即可完成此项设定工作。该参数将传ORB_init(argc,argv),由该方法真正完成设定工作。所以,建立名字空
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025口腔种植体集采政策对市场竞争格局影响报告
- 2025卫星互联网星座组网进度及地面终端市场预测
- 2025医疗耗材集中采购政策对国企营收影响及成本控制措施报告
- 部队食品采购合同范本
- 维修手册出售合同范本
- 福州人社局就业协议书
- 物业客服招聘合同范本
- 2025年新能源企业数据治理与市场拓展报告
- 2025年新能源企业社会责任报告撰写要点与技巧
- 2026年合金钢中小型型钢行业发展现状及未来趋势研究分析报告
- 高中生综合素质评价范文50篇
- 2025国企中层竞聘试题及答案
- 2025年智能眼镜显示效果检测指标分析方案
- 高级计量经济学课件
- 中医养生学(兰州大学)学习通网课章节测试答案
- 中医病证诊断疗效标准
- 1. The Power Cut说课稿-2025-2026学年小学英语6a典范英语(Good English)
- 2025时政热点知识竞赛题及答案
- 老年人能力评估实操课件
- 孟姜女传说鉴赏课件
- 隧道工程机电安装施工方案
评论
0/150
提交评论