




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、corba体系结构研究corba体系结构研究摘 要:corba规范被称为是面向21世纪的软件总线,已经成为流行的分布对象计算规 范。关键词:corba; orb; smart agent;混合编程。the research of corba architectureabstract: corba specification is called 21st century - oriented soft bus. now, it becomes a popular distributed object computing specification. this paper analyses its
2、 architecture and implementation. and an example of implementing a helioworld program using c+ and java mixed programming based on corba is given in this pape匚key words: corba; orb; smail agent; mixed programming1 corba简介corba是omg定义的分布式应用程序的标准结构。它的目的是为了简化开发分布式应 用程序的复杂性,用于创建一个基于对象的跨平台的分布式结构。为了实现上述1=1
3、标,omg 组织制定了 oma(object management architecture ,対象管理体系结构)参考模型。该模型描 述了 omg的规范所遵循的概念化的结构基础,其核心部分是orb (object request broker , 对象请求代理)。基于orb机制就可以充分利用分布的、可以互操作的对象构造和可以互 操作的应用。这种优势是明显的,用户可以在不了解实现交互细节的情况下,建立共亨资源的 应用。corba是一个透明的中介分彳|j式对象标准,遵循corba标准编写的分布式対象可以在 许多平台中执行。以c + + builder5. 0中所使用的inprise公司的visib
4、roker为例,冃前其所 支持的平台有 windows 95/ 98 , windows nt , solaris , hp - ux ,ibm aix ,sgi, ibm 390 以 及dec。此外corba也是一个语言无关的对象标准,同样可以使用多种语言來开发corba 对象及客户端应用程序,甚至可以混合各种语言来开发corba应用系统。2 corba的体系结构2. 1 corba的体系结构为实现机制在corba应用系统中主要分为两部分:一是位于应用程序服务器中的corba対象,另一 个是应用使用的客户程序。这些客户程序通过corba技术使用corba对彖提供的服务 来完成其工作。corb
5、a规范定义了客户程序与服务程序屮的对象如何进行通信的机制。对象请求代理(orb)负责处理它们z间的通信。orb提供了支持分布式处理的机制:为请 求查找具体的对彖实现,让对彖实现作好接收请求的准备,传送构成请求的数据等。客户所看 到的接口完全独立于对象所在的物理位證,实现对象的编程语言,以及在对象的接口小没有反 映出来的其他特性。orb通过idl程序框架或动态程序框架来定位相应的实现代码,传送 参数,以及对对象实现的传送控制。处理通信的対象分别称为存根和构架。客八端为存根(stub),服务器端为构架(skeleton) o 在客户端存根对彖担当corba对彖的代理,当客户程序调用corba对彖的
6、方法时,存根把 调用传递给orb ,orb使用smart agent (聪明代理)程序定位corba服务器,在corba 服务器上,orb应用程序把调用传递给构架,构架orb的通信需要经过boa(basic object adaptor 本对象适配器),corba服务器运行指定的过程,然后由相反的路径返回结果。图1显示了 corba应用程序各部件之间的调用关系,orb在corba客户和服务器之 间传递方法调用和相关信息。图1 corba应用程序结构图smart agent用来定位corba服务器。启动程序时,自动访问smart agent o如果要支持 corba ,应该在局域网的某台机器上运
7、行smah agent,当然也可以启动多个smar( agent,以 提高系统的可靠性。当客户机或服务器启动时,它们通过广播消息寻找smart agent,因此无盂 事先知道smart agent的位ho orb实际上是一组放在动态库orb- r.dll屮的函数,用户很少 直接调用该dll中的函数,系统在必要的时候调用他们。当服务器启动时,orb向smart agent注册corba服务器。corba系统的结构其实并不复杂,并与dcom的结构非常相 似。我们可以把它看作扩展的远程过程调用(rpc) o2. 1. 1存根和构架corba结构中的存根和构架很像我们在前面提到com小的代理对彖和存根
8、dllo客户 应用程序通过orb调用远程的corba对象实际上,是调川存在于客户应用程序中的存根 对象。这个存根对象具有和远程corba相同的方法和属性,所以客户应川程序就像远程 corba对象一样来使用这个存根对象。存根对象是远程corba対象在客八应用程序中的 一个化身。当客户程序调用存根对象时,存根对象再通过orb来调用远程corba对象。 这中间需要对数据进行调度。当存根对象通过orb把数据调度到服务器程序后,就由服务 器应用程序中的构架对象來处理。构架対象会将调度过來的数据组织成服务器可使用的格式, 然后根据需要再调用corba对象。完成后,再通过相反的过程将数据传回客户应用程序。
9、虽然这种调用过程很复杂,但实际实现屮可以由开发工具来完成。2. 1.2聪明代理聪明代理主要是用来定位应用程序服务器。它其实是一个动态的、分布式的冃录服务。应 川程序服务器要先向聪明代理进行注册,聪明代理中冇向它注册的所冇服务器的一个信息列 表(具屮就包含服务器的位置信息),在需要时可以查找这个列表來确定所需的应川服务器的 位置。聪明代理至少要在局域网(只可以发送广播数据报)的一台计算机上运行,orb使用广 播数据报来确定聪明代理的位置。在一个网络中同时可以运行多个聪明代理程序,这样就可 以提高程序的稳定性,聪明代理支持服务器之间的负载平衡。它还提供了服务器的失效保护, 如果连接失败,聪明代理将
10、重新启动服务器,或重新定位另外一台计算机上的服务器。2.2 orb的体系结构对象请求代理是corba参考模型的核心,它类似于一个电话交换机,提供产生呼叫和接收 呼叫的基木处理机制,通过与対彖服务的结合,可以确保符corba规范的应用实体z间进行 有意义的通信。单个orb的体系结构如图2所示。图2单个orb体系结构图该体系结构图描述了以下内容:1)corba规范中定义了 1dl语言及其向其他高级语言的映射。类似于com中的idl 语言,omg的idl语言通过说明对象的接口來定义对象,它也是一种描述性语言。一个接口 同样包括一组命名的操作和相应于这些接口的参数。2)orb核心提供了客户为对象间实现
11、透明通信的方法,它可以屏蔽对象实现位置、实现方 式、状态和通信机制等细节以及不同实现间可能存在的差异。3)对象适配器位于orb核心和对象实现之间,它负责服务对象的注册、对象引川的创建 和解释、对象实现的服务进程的激活和去活、对象实现的激活和去活以及客八请求的分发。4)idl存根为客户提供了静态调用方式,idl构架为客户提供了静态实现方式。idl编译 器编译描述服务对象接口的idl文件,生成对应于具体编程语言的idl存根和idl构架程 序。1dl存根负责把用八的请求进行编码,发送到対象实现端,并対接收到的处理结果进行解 释,把结果或界常信息返回给用户;idl构架对用户请求进行解码,定位所请求的对
12、彖的方法, 执行该方法,并把执行结果或异常信息编码后发送给客户。5)动态调用接口 dll (dynamic invocation interface)和动态构架接口 ds1 (dynamic skeleton interface)提供了动态调用方法和动态实现方法。某些情况卜客户预先不知道服务 对象的接口信息,需要通过杏询或者采用其他的乎段获得服务对象的接口描述信息,然后使用 dii动态调用orb核心接口的方法來构造客户请求并发送到对象实现。在对象实现方可以 使用dsi动态分发用户请求的机制,以便动态的处理客户方的请求。客户和对彖实现所采用 的方式并不一定要对应,也就是说,客户方支持的静态和动态
13、两种调用方式,对彖实现方支持 的静态和动态两种实现方式,经过纽合后得到的4种方式都对能出现。例如,客户方可能使川 静态调用方式,而对象实现方使用动态构架接口,反之亦然。6)在动态方式下,需要查询相应的服务对象的接口描述信息(在静态方式下,这些信息由 idl文件来描述),这些信息由接口库提供。接i i库通常以idl描述文件为其输入,将接i i描 述信息进行处理后存放在文件、数据库或者其他形式的存储机制中,并提供一组标准的调用 接口供客户查询使用。服务对彖的描述信息也由接口库提供。7)corba2. 0规范还为不同厂商的orb系统之间实现互操作制定了规范。它定义了 giop( general in
14、ter - orb protocol,通用orb间通信协议),对数据编码的格式、消息格式和 对传输协议的要求都做出了详细的规定。由于giop是一个抽彖的协议,它必须映射到具体 的传输协议和传输机制中去,corba 2.0中支持giop到1iop协议(internet inter - orb protocol,简称hop)的映射。同时,在corba规范中还定义了使用于特定应用环境的协议 esiop ( environment specific inter orb protocol,简称 esiop)。esiop 协议也需要映射到 指定的环境,已定义的映射是dceciop(dce common i
15、nterorb protocol) <>2.4 corba的运行流程与应用向boa注册所实现的对象;boa在向smart agent注册;登录在自己竹理的信息 目录中;通过boa向smartagent请求对象;smart agent在它的目录中找到对象的 信息,然后回传给客八;客户程序根据smart agent回传的服务器信息,直接与应用程序服务器通信图3 corba对象(服务器)与客户应用程序之间的关系图服务器运行吋,会向boa注册它所实现的客户对象,接着boa会向smart agent注册,最后 smartagent会把客户对彖信息登录在它的対彖冃录z中。当客户程序调川corb
16、a对彖的 方法时,stub把调用传递给orb ,orb使用smart agent程序定位corba服务器,在 corba服务器上,orb应用程序把调用传递给skeleton ,skeleton与orb的通倍需要经过 boa ,corba服务器运行指定的过程,然后由相反的路径返回结果。如果在客户端应用程序 执行时,客户所需对象还未激活并向smart agent注册时,那么就需要oad(object activation deamon ,对象激活守护程序)的协助。当smart agent无法在它管理的対象目录(对象库)中 找到客户应丿ij程序所需要的对象时,它就会在所管理的对象库屮查询客户对象所在
17、的机器。 如果程序员已经把这些对象信息注册到oad,那么oad便可以通过boa来激活包含客户 对象的corba对象。最后在向smart agent注册并fl.由smart agent回传给客八应用程序。 corba定义了一个带有开放软件总线的分布式结构,在这一结构中,来口不同厂商的、运行 在不同操作系统上的对象,能进行互操作。corba对象可以用任何一种corba软件开发 商所支持的语言,如c,c卄java, ada fl i smalltalk来编写。使用idl编写的对彖接口,使得 与语言无关的独立性成为可能。idl使所有corba对象以一种方式被描述,仅仅需要一个 由本地语言(c/c+,
18、corba, java)到idl的“桥梁”。corba対象的互通信以orb为中介,这种互通可以在多种流行通信协议之上实 现。3 corba跨语言实例corba是一个语言无关的对彖标准,同样可以使用多种语言来开发corba对象及客八端应用程序,甚至可以混合各种语言來开发corba应用系统。在运彳亍平台:windows xp, myeclipse, visual studio 2008,步骤:1)编写接口 hcllo.idl文件interface hellostring sayhello();oneway void shutdown();2) 编写服务端 helloserver.java/hell
19、oserver.javaimport org.omg.cosnaming.*;import org.omg.cosnaming.namingcontextpackage.*;import org.omg.corba.*;import org.omg.portableserver.*;import org.omg.portableserve匚poa;import java.util.propcrtics;class hellolmpl extends hellopoa private orb orb;public void setorb(orb orb_val) orb = orb_val;om
20、niorb/ implement sayhello() methodpublic string sayhcllo() return "hello world !n"/ implement shutdown() methodpublic void shutdown() orb.shutdown(falsc);public class helioserver public static void main(string argsfl) try/ create and initialize the orborb orb = orb.init(args, null)
21、;/ get reference to rootpoa & activate the poamanagerpoa rootpoa = (poa)orb.resolve_initial_references("rootpoa"); rootpoa.the_poamanager().activate();/ create servant and register it with the orbhellolmpl hellolmpl = new hellolmpl();hclloimpl.sctorb(orb);/ get object refer
22、ence from the servantorg.omg.corba.object ref =rootpoa.servant_to_reference(hellolmpl);system.out.println(ref);/ and cast the reference to a corba referencehello href = hcllohclpcr.narrow(rcf);/ get the root naming context/ nameservice invokes the transient name service org.omg.corba.object objref =
23、orb.resolve_initial_references(&qu ot;nameservice&qu ot;);/ use namingcontextext, which is part of the/ interoperable naming service (ins) specification.namingcontextext ncref =namingcontextexthelpe 匚 n arrow(objref);/ bind the object reference in namingstring name = "hcllo l&qu
24、ot;namecomponent path j = ncref.to_name( name ); ncref.rebind(path, href);systcm.out.println("hel1oserver ready and waiting .");/ wait for invocations from clientsorb.run();catch (exception e) system.err.println("error: " + e);c. printstacktracc(systcm.out);system
25、.out.println("helloserver exiting ."); /end main / end class helloserver.java3) 在 vs2008 中配置 omniorb4) 编写客户端程序client.cpp#include "hello.h"#ifdcf have_std#include <iostream>#inelude <fstream>using namespace std;#else#includc <iost
26、rcam.h>#endifiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiinint main(int argc, char* argv)try corba:orb_var orb = corba:orb_init(argc, argv);corba:object_var obj =orb->string_to_objcct("ior:000000000000000c49444c3a48656c6c6f3a312c30000000 000000010000000000000086000102000000000e313
27、9322e3136382e312e313034001 f0000000031 afabcb000000002052fl01 b70000000100000000000000010000000 8526f6f74504f41000000000800000001 ()()()()()()()() 140000000000000200000001000000200000000 00001000100000002050100010001002000010109000000010001010000000026000000020002& quot;);hello_var helloref = he
28、llo: :_narrow(obj);if( corba:is_nil(helloref) cerr << "can't narrow reference to type echo (or it was nil)." << endl; rctui*n 1;cout<<helloref->sayhello()<<endl; / 返回 hello world !orb->desiroy();catch(corba:t
29、ransient&) cerr << "caught system exception transient unable to contact the " << "server."endl;catch(corba:systcmexccption& ex) cerr << "caught a corba:" <⁢ ex._name() << endl;catch(corba:ex
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 广州民航职业技术学院《总谱读法》2023-2024学年第二学期期末试卷
- 郑州信息工程职业学院《spss大数据分析》2023-2024学年第二学期期末试卷
- 修缮工程施工合同
- 大型不锈钢广告牌施工合同
- 工程代建服务合同书
- 建筑工程合作合同协议书
- 商业活动策划与执行合同书及付款方式说明
- 房地产交接合同协议书
- 增资扩股协议书合同
- 酒店物业管理合同书
- 北师大版心理健康六年级上册第十四课欣赏我自己 课件
- 小班语言绘本《报纸上的洞洞》
- 河北石家庄旅游PPT介绍石家庄幻灯片模板
- 宴席设计与菜品开发第二版劳动版宴席菜肴与菜单设计课件
- 2023学年完整公开课版积极情绪
- 轴向拉压杆的强度计算
- 安徽宝镁轻合金有限公司年产30万吨高性能镁基轻合金项目环境影响报告书
- 2160kn溢洪道双向门机安装使用说明书
- 振动筛安装作业指导书
- 正弦交流电的-产生
- 《教育学原理》教材第一章-教育及其本质课件
评论
0/150
提交评论