CORBA技术简介ppt课件.ppt_第1页
CORBA技术简介ppt课件.ppt_第2页
CORBA技术简介ppt课件.ppt_第3页
CORBA技术简介ppt课件.ppt_第4页
CORBA技术简介ppt课件.ppt_第5页
已阅读5页,还剩71页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、CORBA技术简介,张日安,1,内容概要,背景介绍 CORBA系统基本组成 CORBA接口定义 简单事例,2,背景介绍,3,分布环境的异构性,硬件平台的异构性:IBM主机、UNIX工作站、PC机、机器人等 操作系统的异构性:各种版本的UNIX、Microsoft Windows、IBM OS/2、Macintosh等 开发语言的异构性:C、C+、Java、Delphi等 网络平台的异构性:Ethernet、FDDI、ATM和TCP/IP、IPXSPX等,构造和集成异构环境下的分布式应用需要一个优良的支撑平台,4,对象的主要特点,对象的封装特性 内部实现与外部借口相分离 对象的继承特性 方便扩展

2、与扩充,对象技术+分布处理技术= 分布对象计算技术,5,OMG组织的宗旨和组成,OMG组织(对象管理组织)致力于制订、采纳和吸收异构环境下OO分布式应用的开发和集成的标准 OMG由11家公司成立于1989年4月, 其中包括3Com、American Airlines、Canon、Data General、Hewlett-Packard、Philips、Sun和Unisys。1989年10月,OMG作为一个独立的非赢利性机构开始运行。目前,OMG组织拥有800多个会员 OMG组织由三个机构组成: 平台技术委员会(Platform Technology Committee) 领域技术委员会(Dom

3、ain Technology Committee ) 体系结构委员会(Architecture Board),6,OMG组织的成员,7,OMG组织的OMA体系结构,对象请求代理ORB使对象在分布式环境中透明地收发请求和响应 对象服务是为使用和实现对象而提供的基本服务集合 通用设施是为许多应用提供的共享服务集合 领域接口是为特定应用领域提供的公共服务的集合 应用接口是用户应用软件自行提供的供他人使用的服务,OMG组织制订的通用参考体系结构,8,CORBA规范,CORBA规范的发展进程 1991 CORBA 1.1规范发布 1991 第一个遵循CORBA规范的商业产品进入市场 1993 CORBA

4、 1.2规范发布 1994 CORBA 2.0 规范发布, 包括了CORBA互操作规范 1995 遵循CORBA 2.0规范的商业产品进入市场 1997 CORBA 2.1规范发布,包括了COM/CORBA互操作规范 1998 CORBA 2.2规范发布,增加了POA,Java语言映射等 1999 CORBA 2.3规范发布,增加了传值调用,Java到IDL的反向映射,DCOM/CORFBA互操作等,并对语言映射部分进行了调整 2000 CORBA 3.0规范,9,CORBA 3.0规范,CORBA 3.0规范新增加的内容包括: CORBA组件模型 异步消息传输 对象传值 Java到IDL反向

5、映射 Internet 防火墙 最小CORBA 实时CORBA,10,CORBA规范的设计哲学,CORBA允许在不同对象间尽可能透明地传递请求 应用可以跨越不同的应用领域 支持服务(例如,名址映射)位于CORBA之外 CORBA具有平台无关性 可以工作于不同的操作系统和网络环境下 客户和服务器可以位于不同的平台上 CORBA具有编程语言无关性 可以支持多种编程语言(面向对象及非面向对象的语言) 客户和服务器可以使用不同的编程语言开发,11,ORB产品,考察ORB:支持平台、支持语言、性能 商业ORB Orbix,IONA公司,完全支持CORBA 2.3规范 Visibroker,Inprise

6、公司,4.0版完全支持2.3规范Netscape communicator浏览器嵌入Visibroker 自由ORB ORBit,遵循CORBA 2.2规范,支持C语言,性能较高 mico,GNU,OpenSource TAO,美国华盛顿大学分布式对象计算研究小组 omniORB,AT是客户使用服务器对象的“句柄” 对象引用与指针 CORBA对象与伪对象,18,对象调用,调用请求 目标对象的引用+操作名+操作参数 服务上下文(service context) 输出:返回值或者异常信息 调用参数 IN:从客户到服务器的参数 OUT:从服务器返回的参数 INOUT:包括以上的两方面,19,OMG

7、IDL语言,OMG IDL语言(Interface Definition Language)是一种独立于编程语言、下层网络和具体实现的数据类型和服务接口描述语言 OMG IDL语言借鉴了C+语言的语法,去掉了其中涉及实现语义的内容,同时添加了若干适用于分布式系统的特征,20,OMG IDL语言(续),OMG IDL语言基本数据类型: short,long,long long (signed/unsigned) float,double,long double char,wchar,boolean,octet OMG IDL语言构造类型: struct,union,enum,sequence,s

8、tring,wstring,array Any 对象引用,21,Data Types,22,接口与操作,接口 属性定义 操作定义 数据结构定义 用户异常定义 操作定义 调用语义+返回值类型+操作名+参数类型/方向+异常+上下文,23,OMG IDL语言(示例),interface account exception NoMoney ; readonly attribute float balance; void makeLodgement (in float f); void makeWithdrawal (in float f) raises (NoMoney); ;,24,IDL Comp

9、iler,IDL Definitions,IDL Compiler,Stubs,Skeletons,Define objects using IDL Run IDL file through IDL compiler Compiler uses language mappings to generate programming language specific stubs and skeletons,25,OMG IDL语言映射,IDL语言完全是一种描述性语言,而非编程语言。它没有控制结构,因而不能用于实现客户方程序和对象实现方程序 OMG组织已经定义了OMG IDL语言到C、C+、Smal

10、lTalk、Java、COBOL和Ada语言的映射,26,CORBA 系统的运行原理,27,IDL桩和IDL构架,服务对象调用者,服务对象,服务对象调用者,服务对象,STUB,SKELETON,28,IDL桩和动态调用接口(DII),IDL桩在这里所起的主要作用就是把请求从特定的编程语言的表示形式转换为适于传递到目标对象的形式 IDL桩是由IDL编译器编译目标对象的IDL接口描述文件而自动产生的 IDL桩又被称为静态调用接口,29,IDL桩和动态调用接口(DII),动态调用接口(Dynamic Invocation Interface)由一组CORBA系统对象组成,这些对象提供给客户动态地创建

11、和调用对象请求功能:NamedValue,NVList,Request DII中可以构造三类调用操作: - 同步调用操作(Synchronous Invocation) - 延迟同步调用操作(Deferred Invocation) - 单向调用操作(Oneway Invocation),30,IDL构架和动态构架接口(DSI),构架的作用: - 查找并将请求派发(Dispatch)到所要求目标对象的相应操作 - 对调用请求的参数进行解码,从传输格式转化为对象实现所使用的编程语言的表示形式 - 对调用请求的处理结果进行编码,从对象实现所使用的编程语言的表示形式转换为传输格式,31,IDL构架和

12、动态构架接口(DSI),与IDL桩类似,IDL构架也是根据目标对象接口的IDL描述由IDL编译器自动产生的调用对象实现的部件 动态构架接口(Dynamic Skeleton Interface)允许动态调用对象,对象实现需要实现动态调用例程(Dynamic Invocation Routing)的接口,该接口名字为DynamicImplementation IDL桩和IDL构架以及DII和DSI之间没有必须配对的限制,32,对象适配器和基本对象适配器,对象适配器OA位于服务对象实现和ORB之间,提供对象登记、对象引用生成、服务激活等功能 CORBA 2.0规范中定义了基本对象适配器BOA,以满

13、足大多数对象实现的需要 BOA提供了以下功能:(1)产生和解释对象引用;(2)对请求进行认证;(3)激活和去活实现;(4)激活和去活单个对象;(5)构架调用方法;(6)实现对象的登记,33,对象适配器和基本对象适配器(续),根据CORBA 2.0规范,BOA在激活对象实现应用程序时,支持四种实现激活方式: - 共享服务器方式(Shared Server ) - 非共享服务器方式(Unshared Server) - 每方法/服务器方式(Server-Per-Method) - 永久服务器方式(Persistent Server),34,POA可移植对象适配器,POA是在CORBA2.3规范中提

14、出的以取代基本对象适配器BOA(Basic Object Adapter),这是因为BOA在CORBA服务器中不易在ORBs之间移植。尽管CORBA 服务器端的移植性与应用服务器关系不大。POA在应用服务器上的应用的最主要的好处是它提供了很大的灵活性:可以将抽象的CORBA对象映射成JAVA 对象,并且能控制资源的利用和Java对象的生命周期。,35,POA可移植对象适配器(续),每一个CORBA服务器可以有多个POAs,每一个POA可以提供不同的功能或者支持不同的特性。而且每个POA都提供一个独立的对象 生存空间,相应有一套POA策略来决定这些寄存的对象如何被激活以及如何建立对象的参考。,3

15、6,Application,Object Request Broker,Implementation of CORBA specification Middleware product Conceptual Software Bus Hides location and implementation details,Hardware,OS,Drivers,Middleware,37,Object Request Broker,38,Object Request Broker,ORB API Permit operation invocation to be executed from the

16、programming language used by the client org.omg.CORBA.ORB.init() in Java Object adaptor Allow the ORB to invoke operations on local implementations Forward the result of invocation to the remote client What if the client and the server are not in the same system? Cooperation of ORBs Inter-ORB protoc

17、ols Internet inter-ORB protocol (IIOP),39,Client Side of CORBA,40,Client Side of CORBA,Client IDL Stub Static invocation interface Methods and parameters are specified at compile time Data marshalling Dynamic invocation interface (DII) Methods and parameters determined at runtime Client does not cha

18、nge because of change in server object At the expense of performance Interface repository (IR) Interface signatures Metadata ORB interface Provide standard functions for applications Access to IR Conversion of object references to strings,41,Static vs. Dynamic Invocation,Static invocation Easier and

19、 faster for the programmer Dynamic invocation More flexible But more complex To build a network management system like MIB browsing Which kind of invocation will you use?,42,Invocation:Synchronous vs. Asynchronous,Synchronous invocation Wait until Asynchronous invocation Doesnt need to wait CORBA do

20、es not provide asynchronous invocation But provide deferred synchronous requests ClientORB: object invocation ORBClient: object handle This handle can be used to query the status of the operation Client can invoke other requests without having to generate a thread,43,Server Side of CORBA,44,Server S

21、ide of CORBA,Static skeletons Server IDL stub Dynamic skeleton interface DII in client side Useful in implementation of management gateways Gateways can adapt to new MOs without being compiled Object adaptor Provide a runtime environment Initialization of server objects Transfer of requests from ORB

22、 to the running server object IR Store information about Server object definitions Sever object instantiations Object references,45,Inter-ORB Protocols,46,Inter-ORB Protocols,Essential in communication between ORBs of different vendors General inter-ORB protocol (GIOP) Defines the syntax and semanti

23、cs of the messages exchanged between ORBs Internet inter-ORB Protocol (IIOP) Defines the mapping of GIOP to TCP How GIOP PDUs are put into TCP packets,47,GIOP/IIOP协议,GIOP协议: - 公共数据表示(CDR) - GIOP消息 - GIOP消息传输机制 IIOP(Internet Inter-ORB Protocol)是GIOP的一种映射,它定义了用于Internet之上的ORB间标准互操作协议,它利用的运输层协议就是Intern

24、et所采用的TCP协议,48,GIOP/IIOP协议(续),GIOP协议版本 GIOP 1.0(CORBA 2.0) 包含7种消息: Request, CancelRequest, LocateRequest(发自client方) Reply, Locateeply, CloseConnection(发自server方) MessageError(发自双方) GIOP 1.1(CORBA 2.1) 在GIOP 1.1的基础上增加了Fragment消息,该消息可以发自双方 GIOP 1.2(CORBA 2.3),49,Interoperable Object Reference (IOR),Po

25、inter to distributed object IOR includes information: IIOP version Describes the IIOP version implemented by the ORB Host Identifies the TCP/IP address of the ORBs host machine Port Specifies the TCP/IP port number where the ORB is listening for client requests Key Value uniquely identifies the obje

26、ct to the ORB exporting the servant Components A sequence that contains additional information applicable to object method invocations, such as supported ORB services and proprietary protocol support,50,Interoperable Object Reference (IOR),IOR structure is not important to CORBA programmers IOR stru

27、cture can be stringified IOR String Orb.object_to_string() Exchange of IOR strings can advertise objects Methods to publish objects Writing IOR strings into a shared folder Assuming all of the clients supports a common DFS Web publishing,51,客户端C+ mapping,客户通过stub调用对象的方法 客户如何得到对象引用 客户如何调用对象方法,52,客户端C

28、+ mapping,客户通过ORB接口获得初始的对象引用 首先初始化ORB并获得ORB接口 然后利用字符串形式的引用获得内部的对象引用,int main( int argc, char *argv ) / ORB initialization CORBA:ORB_var orb = CORBA:ORB_init( argc, argv, local-orb ); CORBA:Object_var obj = orb-string_to_object( argv1 ); Account_var client = Account:_narrow( obj ); client-deposit( 70

29、0 ); client-withdraw( 250 ); cout balance() endl; return 0; ,53,服务器端C+ mapping,对象与OA进行通信,54,服务器端C+ mapping(续二),Servant和CORBA对象,55,服务器端C+ mapping(续三),int main (int argc, char *argv) CORBA:ORB_var orb = CORBA:ORB_init (argc, argv, ”local-orb”); CORBA:Object_var poaobj = orb-resolve_initial_references

30、(RootPOA); PortableServer:POA_var poa = PortableServer:POA:_narrow (poaobj); PortableServer:POAManager_var mgr = poa-the_POAManager(); Account_impl * account = new Account_impl; PortableServer:ObjectId_var oid = poa-activate_object (account); / Write reference to file mgr-activate (); orb-run(); poa

31、-destroy (TRUE, TRUE); delete micocash; return 0; ,56,POA: Portable Object Adapter,POA负责创建对象引用、激活对象以及分发请求 POA负责从CORBA对象到servant之间的对应 CORBA对象与servant对象的生命周期相互分开 POA对于CORBA服务器在性能、资源利用、可伸缩性等方面具有重要的意义 POA策略,控制: 对象生命周期:永久对象、暂态对象 对象标识符:在POA范围内唯一 POA Active Object Map:从ObjectID到servant的映射 请求处理策略:servant ma

32、nager 线程模型 ,57,POA: Portable Object Adapter(续),POA的编程 所有的工作都从RootPOA开始 所有的POA构成一个树状层次结构 利用RootPOA的create_POA创建新的POA 在创建POA时指定策略,CORBA:PolicyList POA提供的功能 创建对象 注册servant,激活对象 提供ObjectID、ObjectReference之间的转换 servant manager编程 POA manager:控制来自客户的请求 多个POA可以共享同一个POA manager ORB事件处理,58,服务器端C+ mapping(续四),

33、利用idl生成的框架类编写servant类 编写main函数 从ORB初始化开始 考虑POA的策略,简单的程序可以使用默认的RootPOA 创建servant并注册 处理对象引用 进入主循环 阻塞方式:orb-run() 非阻塞方式:orb-work_pending()orb-perform_work(),59,用C+开发CORBA应用,基本的C+知识,包括链表结构、智能指针的知识 针对当前使用的ORB产品,熟悉对于基本数据类型的支持,以及这些类型与当前平台上各数据类型的关系 理解CORBA的client/server应用模型 包含头文件 链接库文件 掌握IDL编译器 掌握ORB接口 如何传递

34、对象引用,60,ORB接口,初始:CORBA:ORB_Init,通过命令行传递参数 对象引用到字符串的转换操作 对象引用:CORBA:Object 获得初始接口 resolve_initial_reference,61,DII:Dynamic Invocation Interface,客户程序可以不通过IDL编译器生成的stub而调用对象的方法,步骤: 客户首先得到对象引用:CORBA:Object_ptr 创建一个请求对象CORBA:Request_ptr 把调用参数放到链表中:CORBA:NVList_ptr,指明类型和数值,也指明返回值 调用CORBA:Request_ptr-Invok

35、e方法 服务器并不知道客户程序是通过stub还是DII调用其方法的 客户程序在编译时刻可以没有idl类型知识 比较:COM Automation中IDispatch接口的用法,62,用C+开发CORBA应用:客户,用IDL生成stub代码以及类型定义头文件 在客户的main函数中,初始化orb,获得orb对象 获得对象引用,并调用_narrow向下转换 调用对象的方法 如果使用DII,则需要用到请求对象,并处理参数 如果不用_var类型的话,释放orb和对象引用,63,DSI:Dynamic Skeleton Interface,服务器程序可以动态实现对象,而不利用IDL编译器生成的skele

36、ton代码 服务器实现一个对象,如下所示 class GenericServant : virtual public PortableServer:DynamicImplementation virtual void invoke (CORBA:ServerRequest_ptr req); virtual CORBA:RepositoryId _primary_interface ( const PortableServer:ObjectId main函数的处理不变 重点在于invoke函数,利用CORBA:ServerRequest对象获得所有的类型信息 对于客户透明 比较:COM Aut

37、omation中IDispatch接口的实现,64,用C+开发CORBA应用:服务器,用IDL生成skeleton代码以及类型定义头文件 在客户的main函数中,初始化orb,获得orb对象 根据服务器应用的需要,处理POA 创建servant对象 如果使用DSI,那么invoke方法是servant对象的关键 如何把对象引用传递出去?字符串?名字服务? 调用orb-run()或者orb-perform_work(),65,CORBA IIOP和IOR,General Inter-ORB Protocol:CORBA定义了GIOP作为其互用性框架结构,包括数据传输、数据表示、消息格式 Inte

38、rnet Inter-ORB Protocol:IIOP是GIOP的具体实现,建立在TCP/IP基础上 IOR:Interoperable object reference,66,IOR例子,Repo Id: IDL:GenericServer:1.0 IIOP Profile Version: 1.0 Address: inet:162.105.178.100:12122 Location: corbaloc:162.105.73.196:12122/25607/991958392/%5f0 Key: 2f 32 35 36 30 37 2f 39 39 31 39 35 38 33 39

39、32 /25607/991958392 2f 5f 30 /_0 Multiple Components Profile Components: Native Codesets: normal: ISO 8859-1:1987; Latin Alphabet No. 1 wide: ISO/IEC 10646-1:1993; UTF-16, UCS Transformation Format 16-bit form Key: 00 .,67,naming service,68,CORBA services:naming service,建立起“名称-对象引用”的映射关系 在内部以层次结构的形式

40、组织名字映射,类似于文件系统的结构。 所有的类型和接口定义位于CosNaming域中 NamingContext接口负责所有有关命名服务相关的功能,例如: 创建新的context、删除context bind操作、unbind操作 resolve操作 怎样获得初始namingcontext? 通过orb-resolve_initial_reference ORB厂商应该提供命名服务工具,69,naming service示例,CORBA:Object_var nsobj = orb-resolve_initial_references (NameService); CosNaming:Nami

41、ngContext_var nc = CosNaming:NamingContext:_narrow (nsobj); CosNaming:Name name; name.length (1); name0.id = CORBA:string_dup (myAccount); name0.kind = CORBA:string_dup (); / 服务器方 Account_ptr acc = new Account_impl (); nc-bind (name, acc); / 客户方 CORBA:Object_var obj; obj = nc-resolve (name); Account

42、_var client = Account:_narrow( obj );,70,CORBA services:其他服务,Event service 提供松耦合事件模型的机制 Trade Service 提供了更加灵活的对象查找服务 Time Service 提供了与时间有关的服务,统一了时间的表达方式 Concurrency service Security Service Transaction Service ,71,CORBA基本概念,1、CORBA(Common Object Request Broker Architecture)公共对象请求代理程序体系结构)。CORBA是一个规范(specification)而不是程序实现 (implementation)。它提供了一个允许在分布式和异构型环境中应用程序之间进行互操作的框架。 2、ORB(Object Request Broker)对象请求代理:它作为一个“软件总线”来连接网络上的不同对象,提供对象的定位和方法调用,它是CORBA实现的关键。 3、OA(Object Adapter)对象适配器:用于构造对象实现与ORB之间的接口。它给框架发送方法,调用并且支持服务器对象的生命周期(如:对象的创建和删除)。 4、BOA(Basic Object Ada

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论