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

下载本文档

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

文档简介

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

2、算技术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) 领域技术委员会(Domain Technology Committee

3、) 体系结构委员会(Architecture Board)OMG组织的成员2AB3MAdobeAir FranceAlcatelBASFBEA SystemsBellSouthBoeingBristol- MyersCAChevronCompaqConcept 5Credit SuisseDaimler- BenzDeere & Co.DHLDMSODNS TechEconomicaEDSEricssonEurocontrolExpersoftFord MotorFujitsuFuji ElectricGMD FokusHPHitachiIBMInpriseIONAJ. P. Morg

4、anKeele UnivLucentMetaphaseMicro FocusMicrosoftMitreNECNetscapeNTTNISTNokiaNortelNSAOraclePhilipsRationalReutersRicohSAPSherpaSNISprintSunTelefonicaTIBCOTU BerlinUnisysVISAW3CXeroxSoutheast Univ.OMG组织的OMA体系结构对象请求代理ORB使对象在分布式环境中透明地收发请求和响应对象服务是为使用和实现对象而提供的基本服务集合通用设施是为许多应用提供的共享服务集合领域接口是为特定应用领域提供的公共服务的集

5、合应用接口是用户应用软件自行提供的供他人使用的服务应用接口领域接口通用设施对象服务对象请求代理(ORB)CORBA规范 CORBA规范的发展进程 1991 CORBA 1.1规范发布 1991 第一个遵循CORBA规范的商业产品进入市场 1993 CORBA 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规范发布,增加了传值调用

6、,Java到IDL的反向映射,DCOM/CORFBA互操作等,并对语言映射部分进行了调整 2000 CORBA 3.0规范CORBA 3.0规范 CORBA 3.0规范新增加的内容包括: CORBA组件模型 异步消息传输 对象传值 Java到IDL反向映射 Internet 防火墙 最小CORBA 实时CORBACORBA规范的设计哲学 CORBA允许在不同对象间尽可能透明地传递请求 应用可以跨越不同的应用领域 支持服务(例如,名址映射)位于CORBA之外 CORBA具有平台无关性 可以工作于不同的操作系统和网络环境下 客户和服务器可以位于不同的平台上 CORBA具有编程语言无关性 可以支持多

7、种编程语言(面向对象及非面向对象的语言) 客户和服务器可以使用不同的编程语言开发ORB产品 考察ORB:支持平台、支持语言、性能 商业ORB Orbix,IONA公司,完全支持CORBA 2.3规范 Visibroker,Inprise公司,4.0版完全支持2.3规范Netscape communicator浏览器嵌入Visibroker 自由ORB ORBit,遵循CORBA 2.2规范,支持C语言,性能较高 mico,GNU,OpenSource TAO,美国华盛顿大学分布式对象计算研究小组 omniORB,AT&T剑桥实验室CORBA实现系统ICL/ Peerlogic DAIS

8、IBM Component BrokerInprise VisibrokerBEA M3 (ne Iceberg)ThinkOne MICO Gerald Brose JacORBExpersoft CORBAplusIONA OrbixSun ChorusHitachi TPBrokerObjectShare Dist. Smalltalk OIS ORBExpressNetscape Navigator 4.0Lotus Notes 5.0Novell NetwareJavasoft Java/ IDL (in JDK 2)BBN CorbusParagon Software OakAT&

9、amp; T Labs OmniORB 2.0Nortel RCP- ORBFujitsu ObjectDirectorNEC ObjectSpinnerGemstone GemORBDNS SmalltalkBrokerCORBA对象服务 CORBA公共对象服务将(分布式)应用软件的开发中的基本服务和功能标准化,从而实现它们的可重用性,以降低开发的代价 CORBA公共对象服务在COSS规范中加以定义 目前,OMG组织制订了14种服务:包括名录服务、事件服务、永久对象服务、生命周期服务、并发控制服务、外部化服务、关系服务、事务服务、查询服务、许可证服务、特征服务、时间服务、交易服务和安全服务领

10、域接口 目前,OMG组织建立了以下应用领域技术委员会: 基本事务对象 电子商务领域 金融领域 运输领域 制造领域 电信领域 医疗领域 生命科学领域CORBA系统基本组成单个ORB的体系结构ORB核心动态调用IDL桩ORB接口动态构架基本对象适配器IDL构架用客户程序服务对象实现程序对象引用 对象引用(Object Reference)是在一ORB范围内用以指定和标识一个目标服务对象的信息;是客户使用服务器对象的“句柄” 对象引用与指针 CORBA对象与伪对象对象调用 调用请求 目标对象的引用+操作名+操作参数 服务上下文(service context) 输出:返回值或者异常信息 调用参数 I

11、N:从客户到服务器的参数 OUT:从服务器返回的参数 INOUT:包括以上的两方面OMG IDL语言 OMG IDL语言(Interface Definition Language)是一种独立于编程语言、下层网络和具体实现的数据类型和服务接口描述语言 OMG IDL语言借鉴了C+语言的语法,去掉了其中涉及实现语义的内容,同时添加了若干适用于分布式系统的特征OMG IDL语言(续) OMG IDL语言基本数据类型: short,long,long long (signed/unsigned) float,double,long double char,wchar,boolean,octet OM

12、G IDL语言构造类型: struct,union,enum,sequence,string,wstring,array Any 对象引用Data Types接口与操作 接口 属性定义 操作定义 数据结构定义 用户异常定义 操作定义调用语义+返回值类型+操作名+参数类型/方向+异常+上下文OMG IDL语言(示例)interface account exception NoMoney ; readonly attribute float balance; void makeLodgement (in float f); void makeWithdrawal (in float f) rais

13、es (NoMoney); ;IDL CompilerIDL DefinitionsIDL CompilerStubsSkeletons1.Define objects using IDL2.Run IDL file through IDL compiler3.Compiler uses language mappings to generate programming language specific stubs and skeletonsOMG IDL语言映射 IDL语言完全是一种描述性语言,而非编程语言。它没有控制结构,因而不能用于实现客户方程序和对象实现方程序 OMG组织已经定义了O

14、MG IDL语言到C、C+、SmallTalk、Java、COBOL和Ada语言的映射 CORBA 系统的运行原理桩桩 或或 D II编编 码码IIO P 消消 息息操操 作作 系系 统统TC P/IP对对 象象 适适 配配 器器解解 码码IIO P 消消 息息操操 作作 系系 统统客客 户户服服 务务 器器构构 架架 或或 D SIO R B 及及IIO PIDL桩和IDL构架服务对象调用者服务对象服务对象调用者服务对象STUBSKELETONIDL桩和动态调用接口(DII) IDL桩在这里所起的主要作用就是把请求从特定的编程语言的表示形式转换为适于传递到目标对象的形式 IDL桩是由IDL编

15、译器编译目标对象的IDL接口描述文件而自动产生的 IDL桩又被称为静态调用接口IDL桩和动态调用接口(DII) 动态调用接口(Dynamic Invocation Interface)由一组CORBA系统对象组成,这些对象提供给客户动态地创建和调用对象请求功能:NamedValue,NVList,Request DII中可以构造三类调用操作: - 同步调用操作(Synchronous Invocation) - 延迟同步调用操作(Deferred Invocation) - 单向调用操作(Oneway Invocation)IDL构架和动态构架接口(DSI) 构架的作用:- 查找并将请求派发(

16、Dispatch)到所要求目标对象的相应操作- 对调用请求的参数进行解码,从传输格式转化为对象实现所使用的编程语言的表示形式- 对调用请求的处理结果进行编码,从对象实现所使用的编程语言的表示形式转换为传输格式IDL构架和动态构架接口(DSI) 与IDL桩类似,IDL构架也是根据目标对象接口的IDL描述由IDL编译器自动产生的调用对象实现的部件 动态构架接口(Dynamic Skeleton Interface)允许动态调用对象,对象实现需要实现动态调用例程(Dynamic Invocation Routing)的接口,该接口名字为DynamicImplementation IDL桩和IDL构架

17、以及DII和DSI之间没有必须配对的限制对象适配器和基本对象适配器 对象适配器OA位于服务对象实现和ORB之间,提供对象登记、对象引用生成、服务激活等功能 CORBA 2.0规范中定义了基本对象适配器BOA,以满足大多数对象实现的需要 BOA提供了以下功能:(1)产生和解释对象引用;(2)对请求进行认证;(3)激活和去活实现;(4)激活和去活单个对象;(5)构架调用方法;(6)实现对象的登记对象适配器和基本对象适配器(续) 根据CORBA 2.0规范,BOA在激活对象实现应用程序时,支持四种实现激活方式: - 共享服务器方式(Shared Server ) - 非共享服务器方式(Unshare

18、d Server) - 每方法/服务器方式(Server-Per-Method) - 永久服务器方式(Persistent Server)POA可移植对象适配器 POA是在CORBA2.3规范中提出的以取代基本对象适配器BOA(Basic Object Adapter),这是因为BOA在CORBA服务器中不易在ORBs之间移植。尽管CORBA 服务器端的移植性与应用服务器关系不大。POA在应用服务器上的应用的最主要的好处是它提供了很大的灵活性:可以将抽象的CORBA对象映射成JAVA 对象,并且能控制资源的利用和Java对象的生命周期。 POA可移植对象适配器(续) 每一个CORBA服务器可以

19、有多个POAs,每一个POA可以提供不同的功能或者支持不同的特性。而且每个POA都提供一个独立的对象 生存空间,相应有一套POA策略来决定这些寄存的对象如何被激活以及如何建立对象的参考。ApplicationObject Request Broker Implementation of CORBA specification Middleware product Conceptual Software Bus Hides location and implementation details HardwareOSDriversMiddlewareObject Request BrokerObj

20、ect Request Broker ORB API Permit operation invocation to be executed from the 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

21、and the server are not in the same system? Cooperation of ORBs Inter-ORB protocols Internet inter-ORB protocol (IIOP)Client Side of CORBAClient Side of CORBA Client IDL Stub Static invocation interface Methods and parameters are specified at compile time Data marshalling Dynamic invocation interface

22、 (DII) Methods and parameters determined at runtime Client does not change 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 t

23、o stringsStatic vs. Dynamic Invocation Static invocation Easier and 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?Invocation:Synchronous vs. Asynchronous Synchronous invocation

24、Wait until Asynchronous invocation Doesnt need to wait CORBA does 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

25、having to generate a threadServer Side of CORBAServer Side 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 Initial

26、ization of server objects Transfer of requests from ORB to the running server object IR Store information about Server object definitions Sever object instantiations Object referencesInter-ORB ProtocolsInter-ORB Protocols Essential in communication between ORBs of different vendors General inter-ORB

27、 protocol (GIOP) Defines the syntax and semantics 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 packetsGIOP/IIOP协议 GIOP协议:- 公共数据表示(CDR)- GIOP消息- GIOP消息传输机制 IIOP(Internet Inter-ORB Protocol)是GIOP的一种映射,它定义了用于

28、Internet之上的ORB间标准互操作协议,它利用的运输层协议就是Internet所采用的TCP协议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)Interop

29、erable Object Reference (IOR)Pointer to distributed objectIOR includes information:IIOP versionDescribes the IIOP version implemented by the ORB HostIdentifies the TCP/IP address of the ORBs host machine PortSpecifies the TCP/IP port number where the ORB is listening for client requests KeyValue uni

30、quely identifies the object to the ORB exporting the servant ComponentsA sequence that contains additional information applicable to object method invocations, such as supported ORB services and proprietary protocol supportInteroperable Object Reference (IOR)IOR structure is not important to CORBA p

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

32、用对象方法客户端C+ 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-dep

33、osit( 700 ); client-withdraw( 250 ); cout Balance is balance() resolve_initial_references (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

34、= poa-activate_object (account); / Write reference to file mgr-activate (); orb-run(); poa-destroy (TRUE, TRUE); delete micocash; return 0;POA: Portable Object Adapter POA负责创建对象引用、激活对象以及分发请求 POA负责从CORBA对象到servant之间的对应 CORBA对象与servant对象的生命周期相互分开 POA对于CORBA服务器在性能、资源利用、可伸缩性等方面具有重要的意义 POA策略,控制: 对象生命周期:永

35、久对象、暂态对象 对象标识符:在POA范围内唯一 POA Active Object Map:从ObjectID到servant的映射 请求处理策略:servant manager 线程模型 POA: Portable Object Adapter(续) POA的编程 所有的工作都从RootPOA开始 所有的POA构成一个树状层次结构 利用RootPOA的create_POA创建新的POA 在创建POA时指定策略,CORBA:PolicyList POA提供的功能 创建对象 注册servant,激活对象 提供ObjectID、ObjectReference之间的转换 servant manag

36、er编程 POA manager:控制来自客户的请求 多个POA可以共享同一个POA manager ORB事件处理服务器端C+ mapping(续四) 利用idl生成的框架类编写servant类 编写main函数 从ORB初始化开始 考虑POA的策略,简单的程序可以使用默认的RootPOA 创建servant并注册 处理对象引用 进入主循环 阻塞方式:orb-run() 非阻塞方式:orb-work_pending()orb-perform_work()用C+开发CORBA应用 基本的C+知识,包括链表结构、智能指针的知识 针对当前使用的ORB产品,熟悉对于基本数据类型的支持,以及这些类型与

37、当前平台上各数据类型的关系 理解CORBA的client/server应用模型 包含头文件 链接库文件 掌握IDL编译器 掌握ORB接口 如何传递对象引用ORB接口 初始:CORBA:ORB_Init,通过命令行传递参数 对象引用到字符串的转换操作 对象引用:CORBA:Object 获得初始接口 resolve_initial_referenceDII:Dynamic Invocation Interface 客户程序可以不通过IDL编译器生成的stub而调用对象的方法,步骤: 客户首先得到对象引用:CORBA:Object_ptr 创建一个请求对象CORBA:Request_ptr 把调用

38、参数放到链表中:CORBA:NVList_ptr,指明类型和数值,也指明返回值 调用CORBA:Request_ptr-Invoke方法 服务器并不知道客户程序是通过stub还是DII调用其方法的 客户程序在编译时刻可以没有idl类型知识 比较:COM Automation中IDispatch接口的用法用C+开发CORBA应用:客户 用IDL生成stub代码以及类型定义头文件 在客户的main函数中,初始化orb,获得orb对象 获得对象引用,并调用_narrow向下转换 调用对象的方法 如果使用DII,则需要用到请求对象,并处理参数 如果不用_var类型的话,释放orb和对象引用DSI:Dy

39、namic Skeleton Interface 服务器程序可以动态实现对象,而不利用IDL编译器生成的skeleton代码 服务器实现一个对象,如下所示class GenericServant : virtual public PortableServer:DynamicImplementation virtual void invoke (CORBA:ServerRequest_ptr req); virtual CORBA:RepositoryId _primary_interface (const PortableServer:ObjectId &, PortableServe

40、r:POA_ptr); main函数的处理不变 重点在于invoke函数,利用CORBA:ServerRequest对象获得所有的类型信息 对于客户透明 比较:COM Automation中IDispatch接口的实现用C+开发CORBA应用:服务器 用IDL生成skeleton代码以及类型定义头文件 在客户的main函数中,初始化orb,获得orb对象 根据服务器应用的需要,处理POA 创建servant对象 如果使用DSI,那么invoke方法是servant对象的关键 如何把对象引用传递出去?字符串?名字服务? 调用orb-run()或者orb-perform_work()CORBA I

41、IOP和IOR General Inter-ORB Protocol:CORBA定义了GIOP作为其互用性框架结构,包括数据传输、数据表示、消息格式 Internet Inter-ORB Protocol:IIOP是GIOP的具体实现,建立在TCP/IP基础上 IOR:Interoperable object referenceRepositoryID Data for Protocol 1 Data for Protocol 2 Endpoint Info Object KeyObject IDIOR例子 Repo Id: IDL:GenericServer:1.0IIOP Profile

42、Version: 1.0 Address: inet:00:12122 Location: corbaloc:96:12122/25607/991958392/%5f0 Key: 2f 32 35 36 30 37 2f 39 39 31 39 35 38 33 39 32 /25607/991958392 2f 5f 30 /_0Multiple Components Profile Components: Native Codesets: normal: ISO 8859-1:1987; Latin Alphabet No. 1 wide:

43、 ISO/IEC 10646-1:1993; UTF-16, UCS Transformation Format 16-bit form Key: 00 .naming serviceCORBA services:naming service 建立起“名称-对象引用”的映射关系 在内部以层次结构的形式组织名字映射,类似于文件系统的结构。 所有的类型和接口定义位于CosNaming域中 NamingContext接口负责所有有关命名服务相关的功能,例如: 创建新的context、删除context bind操作、unbind操作 resolve操作 怎样获得初始namingcontext? 通过

44、orb-resolve_initial_reference ORB厂商应该提供命名服务工具naming service示例 CORBA:Object_var nsobj = orb-resolve_initial_references (NameService); CosNaming:NamingContext_var nc = CosNaming:NamingContext:_narrow (nsobj); CosNaming:Name name; name.length (1); name0.id = CORBA:string_dup (myAccount); name0.kind = C

45、ORBA:string_dup ();/ 服务器方 Account_ptr acc = new Account_impl (); nc-bind (name, acc);/ 客户方 CORBA:Object_var obj; obj = nc-resolve (name); Account_var client = Account:_narrow( obj );CORBA services:其他服务 Event service 提供松耦合事件模型的机制 Trade Service 提供了更加灵活的对象查找服务 Time Service 提供了与时间有关的服务,统一了时间的表达方式 Concurrency service Security Service Transaction Service CORBA基本概念基本概念1、CORBA(Common Object Request Broker Architecture)公共对象请求代理程序体系结构)。CORBA是一个规范(specification)而不是程序实现 (implementation)。它提供了一个允许在分布式和异构型环境中应用程序之间进行互操作的框架。 2、ORB(Object Request Broker)对象请求代理:它作为一个“软件总线”来连接网络上的不同对象,提供对象的定位和方法调用,它

温馨提示

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

评论

0/150

提交评论