《CORBA技术简介.ppt》由会员分享,可在线阅读,更多相关《CORBA技术简介.ppt(76页珍藏版)》请在三一办公上搜索。
1、CORBA技术简介,张日安,内容概要,背景介绍CORBA系统基本组成CORBA接口定义简单事例,背景介绍,分布环境的异构性,硬件平台的异构性:IBM主机、UNIX工作站、PC机、机器人等操作系统的异构性:各种版本的UNIX、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组织的成员,OMG组织的OMA体系结构,对象请求代理ORB使对象在分布式环境中透明地收发请求和响应对象服务是为使用和实现对象而提供的基本服务集合通用设施是为许多应用提供的共享服务集合领域接口是为特定应用领域提供的公共服务的集合应用接口是用户应用软件自行提供的供他人使用的服务,OMG组织制订的通用参考体系结构,CORBA规范,CORBA规范的发展进程1991 CORBA 1.1规范发布 1991 第一个遵循CORBA规范的商业产品进入市场 1993 CORBA 1.2规范发布 1994 CORBA 2.0 规范发布,包括了CORBA互
4、操作规范 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规范,CORBA 3.0规范,CORBA 3.0规范新增加的内容包括:CORBA组件模型异步消息传输对象传值Java到IDL反向映射Internet 防火墙最小CORBA实时CORBA,CORBA规范的设计哲学,CORBA允许
5、在不同对象间尽可能透明地传递请求应用可以跨越不同的应用领域支持服务(例如,名址映射)位于CORBA之外CORBA具有平台无关性可以工作于不同的操作系统和网络环境下客户和服务器可以位于不同的平台上CORBA具有编程语言无关性可以支持多种编程语言(面向对象及非面向对象的语言)客户和服务器可以使用不同的编程语言开发,ORB产品,考察ORB:支持平台、支持语言、性能商业ORBOrbix,IONA公司,完全支持CORBA 2.3规范Visibroker,Inprise公司,4.0版完全支持2.3规范Netscape communicator浏览器嵌入Visibroker自由ORBORBit,遵循CORB
6、A 2.2规范,支持C语言,性能较高mico,GNU,OpenSourceTAO,美国华盛顿大学分布式对象计算研究小组omniORB,AT&T剑桥实验室,CORBA实现系统,ICL/Peerlogic DAISIBM Component BrokerInprise VisibrokerBEA M3(ne Iceberg)ThinkOne MICO Gerald Brose JacORBExpersoft CORBAplusIONA OrbixSun ChorusHitachi TPBrokerObjectShare Dist.Smalltalk OIS ORBExpress,Netscape
7、Navigator 4.0Lotus Notes 5.0Novell NetwareJavasoft Java/IDL(in JDK 2)BBN CorbusParagon Software OakAT&T Labs OmniORB 2.0Nortel RCP-ORBFujitsu ObjectDirectorNEC ObjectSpinnerGemstone GemORBDNS SmalltalkBroker,CORBA对象服务,CORBA公共对象服务将(分布式)应用软件的开发中的基本服务和功能标准化,从而实现它们的可重用性,以降低开发的代价CORBA公共对象服务在COSS规范中加以定义目前
8、,OMG组织制订了14种服务:包括名录服务、事件服务、永久对象服务、生命周期服务、并发控制服务、外部化服务、关系服务、事务服务、查询服务、许可证服务、特征服务、时间服务、交易服务和安全服务,领域接口,目前,OMG组织建立了以下应用领域技术委员会:基本事务对象电子商务领域金融领域运输领域制造领域电信领域医疗领域生命科学领域,CORBA系统基本组成,单个ORB的体系结构,对象引用,对象引用(Object Reference)是在一ORB范围内用以指定和标识一个目标服务对象的信息;是客户使用服务器对象的“句柄”对象引用与指针CORBA对象与伪对象,对象调用,调用请求目标对象的引用+操作名+操作参数服
9、务上下文(service context)输出:返回值或者异常信息调用参数IN:从客户到服务器的参数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
10、doublechar,wchar,boolean,octetOMG IDL语言构造类型:struct,union,enum,sequence,string,wstring,arrayAny对象引用,Data Types,接口与操作,接口属性定义操作定义数据结构定义用户异常定义操作定义调用语义+返回值类型+操作名+参数类型/方向+异常+上下文,OMG IDL语言(示例),interface account exception NoMoney;readonly attribute float balance;void makeLodgement(in float f);void makeWithd
11、rawal(in float f)raises(NoMoney);,IDL Compiler,IDL Definitions,IDL Compiler,Stubs,Skeletons,Define objects using IDLRun IDL file through IDL compilerCompiler uses language mappings to generate programming language specific stubs and skeletons,OMG IDL语言映射,IDL语言完全是一种描述性语言,而非编程语言。它没有控制结构,因而不能用于实现客户方程序和
12、对象实现方程序OMG组织已经定义了OMG IDL语言到C、C+、SmallTalk、Java、COBOL和Ada语言的映射,CORBA 系统的运行原理,IDL桩和IDL构架,服务对象调用者,服务对象,服务对象调用者,服务对象,STUB,SKELETON,IDL桩和动态调用接口(DII),IDL桩在这里所起的主要作用就是把请求从特定的编程语言的表示形式转换为适于传递到目标对象的形式 IDL桩是由IDL编译器编译目标对象的IDL接口描述文件而自动产生的IDL桩又被称为静态调用接口,IDL桩和动态调用接口(DII),动态调用接口(Dynamic Invocation Interface)由一组COR
13、BA系统对象组成,这些对象提供给客户动态地创建和调用对象请求功能:NamedValue,NVList,RequestDII中可以构造三类调用操作:-同步调用操作(Synchronous Invocation)-延迟同步调用操作(Deferred Invocation)-单向调用操作(Oneway Invocation),IDL构架和动态构架接口(DSI),构架的作用:-查找并将请求派发(Dispatch)到所要求目标对象的相应操作-对调用请求的参数进行解码,从传输格式转化为对象实现所使用的编程语言的表示形式-对调用请求的处理结果进行编码,从对象实现所使用的编程语言的表示形式转换为传输格式,ID
14、L构架和动态构架接口(DSI),与IDL桩类似,IDL构架也是根据目标对象接口的IDL描述由IDL编译器自动产生的调用对象实现的部件动态构架接口(Dynamic Skeleton Interface)允许动态调用对象,对象实现需要实现动态调用例程(Dynamic Invocation Routing)的接口,该接口名字为DynamicImplementationIDL桩和IDL构架以及DII和DSI之间没有必须配对的限制,对象适配器和基本对象适配器,对象适配器OA位于服务对象实现和ORB之间,提供对象登记、对象引用生成、服务激活等功能CORBA 2.0规范中定义了基本对象适配器BOA,以满足大
15、多数对象实现的需要BOA提供了以下功能:(1)产生和解释对象引用;(2)对请求进行认证;(3)激活和去活实现;(4)激活和去活单个对象;(5)构架调用方法;(6)实现对象的登记,对象适配器和基本对象适配器(续),根据CORBA 2.0规范,BOA在激活对象实现应用程序时,支持四种实现激活方式:-共享服务器方式(Shared Server)-非共享服务器方式(Unshared Server)-每方法/服务器方式(Server-Per-Method)-永久服务器方式(Persistent Server),POA可移植对象适配器,POA是在CORBA2.3规范中提出的以取代基本对象适配器BOA(Ba
16、sic Object Adapter),这是因为BOA在CORBA服务器中不易在ORBs之间移植。尽管CORBA 服务器端的移植性与应用服务器关系不大。POA在应用服务器上的应用的最主要的好处是它提供了很大的灵活性:可以将抽象的CORBA对象映射成JAVA 对象,并且能控制资源的利用和Java对象的生命周期。,POA可移植对象适配器(续),每一个CORBA服务器可以有多个POAs,每一个POA可以提供不同的功能或者支持不同的特性。而且每个POA都提供一个独立的对象 生存空间,相应有一套POA策略来决定这些寄存的对象如何被激活以及如何建立对象的参考。,Application,Object Req
17、uest Broker,Implementation of CORBA specificationMiddleware productConceptual Software BusHides location and implementation details,Hardware,OS,Drivers,Middleware,Object Request Broker,Object Request Broker,ORB APIPermit operation invocation to be executed from the programming language used by the c
18、lientorg.omg.CORBA.ORB.init()in JavaObject adaptorAllow the ORB to invoke operations on local implementationsForward the result of invocation to the remote clientWhat if the client and the server are not in the same system?Cooperation of ORBsInter-ORB protocolsInternet inter-ORB protocol(IIOP),Clien
19、t Side of CORBA,Client Side of CORBA,Client IDL StubStatic invocation interfaceMethods and parameters are specified at compile timeData marshallingDynamic invocation interface(DII)Methods and parameters determined at runtimeClient does not change because of change in server objectAt the expense of p
20、erformanceInterface repository(IR)Interface signaturesMetadataORB interfaceProvide standard functions for applicationsAccess to IRConversion of object references to strings,Static vs.Dynamic Invocation,Static invocationEasier and faster for the programmerDynamic invocationMore flexibleBut more compl
21、exTo build a network management system like MIB browsingWhich kind of invocation will you use?,Invocation:Synchronous vs.Asynchronous,Synchronous invocationWait untilAsynchronous invocationDoesnt need to waitCORBA does not provide asynchronous invocationBut provide deferred synchronous requestsClien
22、tORB:object invocationORBClient:object handleThis handle can be used to query the status of the operationClient can invoke other requestswithout having to generate a thread,Server Side of CORBA,Server Side of CORBA,Static skeletonsServer IDL stubDynamic skeleton interfaceDII in client sideUseful in
23、implementation of management gatewaysGateways can adapt to new MOs without being compiledObject adaptorProvide a runtime environmentInitialization of server objectsTransfer of requests from ORB to the running server objectIRStore information aboutServer object definitionsSever object instantiationsO
24、bject references,Inter-ORB Protocols,Inter-ORB Protocols,Essential in communication between ORBs of different vendorsGeneral inter-ORB protocol(GIOP)Defines the syntax and semantics of the messages exchanged between ORBsInternet inter-ORB Protocol(IIOP)Defines the mapping of GIOP to TCPHow GIOP PDUs
25、 are put into TCP packets,GIOP/IIOP协议,GIOP协议:-公共数据表示(CDR)-GIOP消息-GIOP消息传输机制IIOP(Internet Inter-ORB Protocol)是GIOP的一种映射,它定义了用于Internet之上的ORB间标准互操作协议,它利用的运输层协议就是Internet所采用的TCP协议,GIOP/IIOP协议(续),GIOP协议版本 GIOP 1.0(CORBA 2.0)包含7种消息:Request,CancelRequest,LocateRequest(发自client方)Reply,Locateeply,CloseConne
26、ction(发自server方)MessageError(发自双方)GIOP 1.1(CORBA 2.1)在GIOP 1.1的基础上增加了Fragment消息,该消息可以发自双方GIOP 1.2(CORBA 2.3),Interoperable Object Reference(IOR),Pointer to distributed objectIOR includes information:IIOP versionDescribes the IIOP version implemented by the ORB HostIdentifies the TCP/IP address of th
27、e ORBs host machine PortSpecifies the TCP/IP port number where the ORB is listening for client requests KeyValue uniquely identifies the object to the ORB exporting the servant ComponentsA sequence that contains additional information applicable to object method invocations,such as supported ORB ser
28、vices and proprietary protocol support,Interoperable Object Reference(IOR),IOR structure is not important to CORBA programmersIOR structure can be stringifiedIOR StringOrb.object_to_string()Exchange of IOR strings can advertise objectsMethods to publish objectsWriting IOR strings into a shared folde
29、rAssuming all of the clients supports a common DFSWeb publishing,客户端C+mapping,客户通过stub调用对象的方法客户如何得到对象引用客户如何调用对象方法,客户端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_va
30、r obj=orb-string_to_object(argv1);Account_var client=Account:_narrow(obj);client-deposit(700);client-withdraw(250);cout balance()endl;return 0;,服务器端C+mapping,对象与OA进行通信,服务器端C+mapping(续二),Servant和CORBA对象,服务器端C+mapping(续三),int main(int argc,char*argv)CORBA:ORB_var orb=CORBA:ORB_init(argc,argv,”local-or
31、b”);CORBA:Object_var poaobj=orb-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=poa-activate_object(account);/Write reference
32、 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策略,控制:对象生命周期:永久对象、暂态对象对象标识符:在POA范围内唯一POA Active Object Map:从ObjectID到servant
33、的映射请求处理策略:servant manager线程模型,POA:Portable Object Adapter(续),POA的编程所有的工作都从RootPOA开始所有的POA构成一个树状层次结构利用RootPOA的create_POA创建新的POA在创建POA时指定策略,CORBA:PolicyListPOA提供的功能创建对象注册servant,激活对象提供ObjectID、ObjectReference之间的转换servant manager编程POA manager:控制来自客户的请求多个POA可以共享同一个POA managerORB事件处理,服务器端C+mapping(续四),利用
34、idl生成的框架类编写servant类编写main函数从ORB初始化开始考虑POA的策略,简单的程序可以使用默认的RootPOA创建servant并注册处理对象引用进入主循环阻塞方式:orb-run()非阻塞方式:orb-work_pending()orb-perform_work(),用C+开发CORBA应用,基本的C+知识,包括链表结构、智能指针的知识针对当前使用的ORB产品,熟悉对于基本数据类型的支持,以及这些类型与当前平台上各数据类型的关系理解CORBA的client/server应用模型包含头文件链接库文件掌握IDL编译器掌握ORB接口如何传递对象引用,ORB接口,初始:CORBA:
35、ORB_Init,通过命令行传递参数对象引用到字符串的转换操作对象引用:CORBA:Object获得初始接口resolve_initial_reference,DII:Dynamic Invocation Interface,客户程序可以不通过IDL编译器生成的stub而调用对象的方法,步骤:客户首先得到对象引用:CORBA:Object_ptr创建一个请求对象CORBA:Request_ptr把调用参数放到链表中:CORBA:NVList_ptr,指明类型和数值,也指明返回值调用CORBA:Request_ptr-Invoke方法服务器并不知道客户程序是通过stub还是DII调用其方法的客户
36、程序在编译时刻可以没有idl类型知识比较:COM Automation中IDispatch接口的用法,用C+开发CORBA应用:客户,用IDL生成stub代码以及类型定义头文件在客户的main函数中,初始化orb,获得orb对象获得对象引用,并调用_narrow向下转换调用对象的方法如果使用DII,则需要用到请求对象,并处理参数如果不用_var类型的话,释放orb和对象引用,DSI:Dynamic Skeleton Interface,服务器程序可以动态实现对象,而不利用IDL编译器生成的skeleton代码服务器实现一个对象,如下所示class GenericServant:virtual
37、public PortableServer:DynamicImplementation virtual void invoke(CORBA:ServerRequest_ptr req);virtual CORBA:RepositoryId _primary_interface(const PortableServer:ObjectId main函数的处理不变重点在于invoke函数,利用CORBA:ServerRequest对象获得所有的类型信息对于客户透明比较:COM Automation中IDispatch接口的实现,用C+开发CORBA应用:服务器,用IDL生成skeleton代码以及类
38、型定义头文件在客户的main函数中,初始化orb,获得orb对象根据服务器应用的需要,处理POA创建servant对象如果使用DSI,那么invoke方法是servant对象的关键如何把对象引用传递出去?字符串?名字服务?调用orb-run()或者orb-perform_work(),CORBA IIOP和IOR,General Inter-ORB Protocol:CORBA定义了GIOP作为其互用性框架结构,包括数据传输、数据表示、消息格式Internet Inter-ORB Protocol:IIOP是GIOP的具体实现,建立在TCP/IP基础上IOR:Interoperable obj
39、ect reference,IOR例子,Repo Id:IDL:GenericServer:1.0IIOP 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 32/25607/991958392 2f 5f 30/_0Multiple Components Profile Components:Native Codese
40、ts: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.,naming service,CORBA services:naming service,建立起“名称-对象引用”的映射关系在内部以层次结构的形式组织名字映射,类似于文件系统的结构。所有的类型和接口定义位于CosNaming域中NamingContext接口负责所有有关命名服务相关的功能,例如:创建新的context、删除contextbind操作
41、、unbind操作resolve操作怎样获得初始namingcontext?通过orb-resolve_initial_referenceORB厂商应该提供命名服务工具,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(
42、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_var client=Account:_narrow(obj);,CORBA services:其他服务,Event service提供松耦合事件模型的机制Trade Service提供了更加灵活的对象查找服务Time Service提供了与时间有关的服务,统一了时间的表达方式Concur
43、rency serviceSecurity ServiceTransaction Service,CORBA基本概念,1、CORBA(Common Object Request Broker Architecture)公共对象请求代理程序体系结构)。CORBA是一个规范(specification)而不是程序实现(implementation)。它提供了一个允许在分布式和异构型环境中应用程序之间进行互操作的框架。2、ORB(Object Request Broker)对象请求代理:它作为一个“软件总线”来连接网络上的不同对象,提供对象的定位和方法调用,它是CORBA实现的关键。3、OA(Obj
44、ect Adapter)对象适配器:用于构造对象实现与ORB之间的接口。它给框架发送方法,调用并且支持服务器对象的生命周期(如:对象的创建和删除)。4、BOA(Basic Object Adapter)基本对象适配器:负责激活对象,即当客户请求对象的服务时,激活对象实现的能力。,5、POA(Portable Object Adapter)可移植对象适配器:是BOA的替代方式,提供大量可扩展的接口,来处理一些对于BOA来说不合理的要求。特性:(1)支持透明激活对象。(2)允许单个服务者支持很多对象标识。(3)允许一个服务者上有多个POA,每个都有自己的一套管理策略。(4)将对不存在服务者的请求委
45、托给默认服务者,或者向服务者的管理器请求一个合适的服务者。6、DII(Dynamic Invocation Interface)动态调用接口:位于客户端,发送客户端的调用请求。7、DSI(Dynamic Skeleton Interface)动态框架接口,位于服务器端,传送客户端的调用请求。,8、IDL(Interface Definition Language)接口定义语言:定义客户和服务器之间的静态接口,通过编译器生成客户存根、服务器框架,以及根据支持的语言映射,自动生成来自一个 CORBA IDL的代码。目前支持的语言映射包括:Java,C+,Ada,SmallTalk和COBOL等。9
46、、SII(Static Invocation Interface)静态调用接口:位于客户端,客户与ORB之间的静态接口。10、SSI(Static Skeleton Interface)静态框架接口:位于服务器端,ORB与服务器之间的静态接口。11、stub 存根:位于客户端,由IDL编译器编译IDL文件生成,其功能类似一个客户代理。12、skeleton 框架:位于服务器端,由IDL编译器编译IDL文件生成,其功能是负责发送一个操作调用给能实现此操作的服务。,13、IR(Interface Repository)接口存储库:存储运行时所需要的IDL规范。14、IMR(Implementati
47、on Repository)实现存储库:存储对象实现(一个服务器)的详细信息(即一个执行程序需要被放置在哪一个服务器上)。15、GIOP(General Inter-ORB Protocol)通用ORB之间的协议:定义了一个不同ORB之间的接口。16、IIOP(Internet Inter-ORB Protocol)因特网ORB之间的协议:IIOP把GIOP消息数据映射为TCP/IP连接行为和输入/输出流读/写。注意:IIOP不是完全从GIOP分离出来的协议,它更像是GIOP的一个实例。17、IOR(Interoperable Object Reference)可操作对象引用:它包括所有客户与服务器联系所需的各种信息(包括CORBA服务器对象进程的IP地址和TCP端口等),ORB将通过它产生在网络上唯一标识那个将被分布对象的消息。,18、ORBAservices CORBA服务:在ORB级别之上,定义了大多数分布式企业对象利用的公共服务。如:命名服务 交易对象服务 关系服务 生命周期服务 外表化服务 持久性服务 查询服务 对象集合服务 属性服务 事件服务 许可证服务 时间服务 事务服务 并发控制服务 安全服务 19、CORBAfacilities CORBA工厂:位于CORBAservices之上,定义了更高层次的分步式服务与框架。如:打印、电子邮件、文档管理等。,
链接地址:https://www.31ppt.com/p-5422806.html