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

下载本文档

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

文档简介

CORBA技术简介,张日安,内容概要,背景介绍CORBA系统基本组成CORBA接口定义简单事例,背景介绍,分布环境的异构性,硬件平台的异构性:IBM主机、UNIX工作站、PC机、机器人等操作系统的异构性:各种版本的UNIX、MicrosoftWindows、IBMOS/2、Macintosh等开发语言的异构性:C、C+、Java、Delphi等网络平台的异构性:Ethernet、FDDI、ATM和TCP/IP、IPXSPX等,构造和集成异构环境下的分布式应用需要一个优良的支撑平台,对象的主要特点,对象的封装特性内部实现与外部借口相分离对象的继承特性方便扩展与扩充,对象技术+分布处理技术=分布对象计算技术,OMG组织的宗旨和组成,OMG组织(对象管理组织)致力于制订、采纳和吸收异构环境下OO分布式应用的开发和集成的标准OMG由11家公司成立于1989年4月,其中包括3Com、AmericanAirlines、Canon、DataGeneral、Hewlett-Packard、Philips、Sun和Unisys。1989年10月,OMG作为一个独立的非赢利性机构开始运行。目前,OMG组织拥有800多个会员OMG组织由三个机构组成:平台技术委员会(PlatformTechnologyCommittee)领域技术委员会(DomainTechnologyCommittee)体系结构委员会(ArchitectureBoard),OMG组织的成员,OMG组织的OMA体系结构,对象请求代理ORB使对象在分布式环境中透明地收发请求和响应对象服务是为使用和实现对象而提供的基本服务集合通用设施是为许多应用提供的共享服务集合领域接口是为特定应用领域提供的公共服务的集合应用接口是用户应用软件自行提供的供他人使用的服务,OMG组织制订的通用参考体系结构,CORBA规范,CORBA规范的发展进程1991CORBA1.1规范发布1991第一个遵循CORBA规范的商业产品进入市场1993CORBA1.2规范发布1994CORBA2.0规范发布,包括了CORBA互操作规范1995遵循CORBA2.0规范的商业产品进入市场1997CORBA2.1规范发布,包括了COM/CORBA互操作规范1998CORBA2.2规范发布,增加了POA,Java语言映射等1999CORBA2.3规范发布,增加了传值调用,Java到IDL的反向映射,DCOM/CORFBA互操作等,并对语言映射部分进行了调整2000CORBA3.0规范,CORBA3.0规范,CORBA3.0规范新增加的内容包括:CORBA组件模型异步消息传输对象传值Java到IDL反向映射Internet防火墙最小CORBA实时CORBA,CORBA规范的设计哲学,CORBA允许在不同对象间尽可能透明地传递请求应用可以跨越不同的应用领域支持服务(例如,名址映射)位于CORBA之外CORBA具有平台无关性可以工作于不同的操作系统和网络环境下客户和服务器可以位于不同的平台上CORBA具有编程语言无关性可以支持多种编程语言(面向对象及非面向对象的语言)客户和服务器可以使用不同的编程语言开发,ORB产品,考察ORB:支持平台、支持语言、性能商业ORBOrbix,IONA公司,完全支持CORBA2.3规范Visibroker,Inprise公司,4.0版完全支持2.3规范Netscapecommunicator浏览器嵌入Visibroker自由ORBORBit,遵循CORBA2.2规范,支持C语言,性能较高mico,GNU,OpenSourceTAO,美国华盛顿大学分布式对象计算研究小组omniORB,AT是客户使用服务器对象的“句柄”对象引用与指针CORBA对象与伪对象,对象调用,调用请求目标对象的引用+操作名+操作参数服务上下文(servicecontext)输出:返回值或者异常信息调用参数IN:从客户到服务器的参数OUT:从服务器返回的参数INOUT:包括以上的两方面,OMGIDL语言,OMGIDL语言(InterfaceDefinitionLanguage)是一种独立于编程语言、下层网络和具体实现的数据类型和服务接口描述语言OMGIDL语言借鉴了C+语言的语法,去掉了其中涉及实现语义的内容,同时添加了若干适用于分布式系统的特征,OMGIDL语言(续),OMGIDL语言基本数据类型:short,long,longlong(signed/unsigned)float,double,longdoublechar,wchar,boolean,octetOMGIDL语言构造类型:struct,union,enum,sequence,string,wstring,arrayAny对象引用,DataTypes,接口与操作,接口属性定义操作定义数据结构定义用户异常定义操作定义调用语义+返回值类型+操作名+参数类型/方向+异常+上下文,OMGIDL语言(示例),interfaceaccountexceptionNoMoney;readonlyattributefloatbalance;voidmakeLodgement(infloatf);voidmakeWithdrawal(infloatf)raises(NoMoney);,IDLCompiler,IDLDefinitions,IDLCompiler,Stubs,Skeletons,DefineobjectsusingIDLRunIDLfilethroughIDLcompilerCompileruseslanguagemappingstogenerateprogramminglanguagespecificstubsandskeletons,OMGIDL语言映射,IDL语言完全是一种描述性语言,而非编程语言。它没有控制结构,因而不能用于实现客户方程序和对象实现方程序OMG组织已经定义了OMGIDL语言到C、C+、SmallTalk、Java、COBOL和Ada语言的映射,CORBA系统的运行原理,IDL桩和IDL构架,服务对象调用者,服务对象,服务对象调用者,服务对象,STUB,SKELETON,IDL桩和动态调用接口(DII),IDL桩在这里所起的主要作用就是把请求从特定的编程语言的表示形式转换为适于传递到目标对象的形式IDL桩是由IDL编译器编译目标对象的IDL接口描述文件而自动产生的IDL桩又被称为静态调用接口,IDL桩和动态调用接口(DII),动态调用接口(DynamicInvocationInterface)由一组CORBA系统对象组成,这些对象提供给客户动态地创建和调用对象请求功能:NamedValue,NVList,RequestDII中可以构造三类调用操作:-同步调用操作(SynchronousInvocation)-延迟同步调用操作(DeferredInvocation)-单向调用操作(OnewayInvocation),IDL构架和动态构架接口(DSI),构架的作用:-查找并将请求派发(Dispatch)到所要求目标对象的相应操作-对调用请求的参数进行解码,从传输格式转化为对象实现所使用的编程语言的表示形式-对调用请求的处理结果进行编码,从对象实现所使用的编程语言的表示形式转换为传输格式,IDL构架和动态构架接口(DSI),与IDL桩类似,IDL构架也是根据目标对象接口的IDL描述由IDL编译器自动产生的调用对象实现的部件动态构架接口(DynamicSkeletonInterface)允许动态调用对象,对象实现需要实现动态调用例程(DynamicInvocationRouting)的接口,该接口名字为DynamicImplementationIDL桩和IDL构架以及DII和DSI之间没有必须配对的限制,对象适配器和基本对象适配器,对象适配器OA位于服务对象实现和ORB之间,提供对象登记、对象引用生成、服务激活等功能CORBA2.0规范中定义了基本对象适配器BOA,以满足大多数对象实现的需要BOA提供了以下功能:(1)产生和解释对象引用;(2)对请求进行认证;(3)激活和去活实现;(4)激活和去活单个对象;(5)构架调用方法;(6)实现对象的登记,对象适配器和基本对象适配器(续),根据CORBA2.0规范,BOA在激活对象实现应用程序时,支持四种实现激活方式:-共享服务器方式(SharedServer)-非共享服务器方式(UnsharedServer)-每方法/服务器方式(Server-Per-Method)-永久服务器方式(PersistentServer),POA可移植对象适配器,POA是在CORBA2.3规范中提出的以取代基本对象适配器BOA(BasicObjectAdapter),这是因为BOA在CORBA服务器中不易在ORBs之间移植。尽管CORBA服务器端的移植性与应用服务器关系不大。POA在应用服务器上的应用的最主要的好处是它提供了很大的灵活性:可以将抽象的CORBA对象映射成JAVA对象,并且能控制资源的利用和Java对象的生命周期。,POA可移植对象适配器(续),每一个CORBA服务器可以有多个POAs,每一个POA可以提供不同的功能或者支持不同的特性。而且每个POA都提供一个独立的对象生存空间,相应有一套POA策略来决定这些寄存的对象如何被激活以及如何建立对象的参考。,Application,ObjectRequestBroker,ImplementationofCORBAspecificationMiddlewareproductConceptualSoftwareBusHideslocationandimplementationdetails,Hardware,OS,Drivers,Middleware,ObjectRequestBroker,ObjectRequestBroker,ORBAPIPermitoperationinvocationtobeexecutedfromtheprogramminglanguageusedbytheclientorg.omg.CORBA.ORB.init()inJavaObjectadaptorAllowtheORBtoinvokeoperationsonlocalimplementationsForwardtheresultofinvocationtotheremoteclientWhatiftheclientandtheserverarenotinthesamesystem?CooperationofORBsInter-ORBprotocolsInternetinter-ORBprotocol(IIOP),ClientSideofCORBA,ClientSideofCORBA,ClientIDLStubStaticinvocationinterfaceMethodsandparametersarespecifiedatcompiletimeDatamarshallingDynamicinvocationinterface(DII)MethodsandparametersdeterminedatruntimeClientdoesnotchangebecauseofchangeinserverobjectAttheexpenseofperformanceInterfacerepository(IR)InterfacesignaturesMetadataORBinterfaceProvidestandardfunctionsforapplicationsAccesstoIRConversionofobjectreferencestostrings,Staticvs.DynamicInvocation,StaticinvocationEasierandfasterfortheprogrammerDynamicinvocationMoreflexibleButmorecomplexTobuildanetworkmanagementsystemlikeMIBbrowsingWhichkindofinvocationwillyouuse?,Invocation:Synchronousvs.Asynchronous,SynchronousinvocationWaituntilAsynchronousinvocationDoesntneedtowaitCORBAdoesnotprovideasynchronousinvocationButprovidedeferredsynchronousrequestsClientORB:objectinvocationORBClient:objecthandleThishandlecanbeusedtoquerythestatusoftheoperationClientcaninvokeotherrequestswithouthavingtogenerateathread,ServerSideofCORBA,ServerSideofCORBA,StaticskeletonsServerIDLstubDynamicskeletoninterfaceDIIinclientsideUsefulinimplementationofmanagementgatewaysGatewayscanadapttonewMOswithoutbeingcompiledObjectadaptorProvidearuntimeenvironmentInitializationofserverobjectsTransferofrequestsfromORBtotherunningserverobjectIRStoreinformationaboutServerobjectdefinitionsSeverobjectinstantiationsObjectreferences,Inter-ORBProtocols,Inter-ORBProtocols,EssentialincommunicationbetweenORBsofdifferentvendorsGeneralinter-ORBprotocol(GIOP)DefinesthesyntaxandsemanticsofthemessagesexchangedbetweenORBsInternetinter-ORBProtocol(IIOP)DefinesthemappingofGIOPtoTCPHowGIOPPDUsareputintoTCPpackets,GIOP/IIOP协议,GIOP协议:-公共数据表示(CDR)-GIOP消息-GIOP消息传输机制IIOP(InternetInter-ORBProtocol)是GIOP的一种映射,它定义了用于Internet之上的ORB间标准互操作协议,它利用的运输层协议就是Internet所采用的TCP协议,GIOP/IIOP协议(续),GIOP协议版本GIOP1.0(CORBA2.0)包含7种消息:Request,CancelRequest,LocateRequest(发自client方)Reply,Locateeply,CloseConnection(发自server方)MessageError(发自双方)GIOP1.1(CORBA2.1)在GIOP1.1的基础上增加了Fragment消息,该消息可以发自双方GIOP1.2(CORBA2.3),InteroperableObjectReference(IOR),PointertodistributedobjectIORincludesinformation:IIOPversionDescribestheIIOPversionimplementedbytheORBHostIdentifiestheTCP/IPaddressoftheORBshostmachinePortSpecifiestheTCP/IPportnumberwheretheORBislisteningforclientrequestsKeyValueuniquelyidentifiestheobjecttotheORBexportingtheservantComponentsAsequencethatcontainsadditionalinformationapplicabletoobjectmethodinvocations,suchassupportedORBservicesandproprietaryprotocolsupport,InteroperableObjectReference(IOR),IORstructureisnotimportanttoCORBAprogrammersIORstructurecanbestringifiedIORStringOrb.object_to_string()ExchangeofIORstringscanadvertiseobjectsMethodstopublishobjectsWritingIORstringsintoasharedfolderAssumingalloftheclientssupportsacommonDFSWebpublishing,客户端C+mapping,客户通过stub调用对象的方法客户如何得到对象引用客户如何调用对象方法,客户端C+mapping,客户通过ORB接口获得初始的对象引用首先初始化ORB并获得ORB接口然后利用字符串形式的引用获得内部的对象引用,intmain(intargc,char*argv)/ORBinitializationCORBA:ORB_varorb=CORBA:ORB_init(argc,argv,local-orb);CORBA:Object_varobj=orb-string_to_object(argv1);Account_varclient=Account:_narrow(obj);client-deposit(700);client-withdraw(250);coutbalance()the_POAManager();Account_impl*account=newAccount_impl;PortableServer:ObjectId_varoid=poa-activate_object(account);/Writereferencetofilemgr-activate();orb-run();poa-destroy(TRUE,TRUE);deletemicocash;return0;,POA:PortableObjectAdapter,POA负责创建对象引用、激活对象以及分发请求POA负责从CORBA对象到servant之间的对应CORBA对象与servant对象的生命周期相互分开POA对于CORBA服务器在性能、资源利用、可伸缩性等方面具有重要的意义POA策略,控制:对象生命周期:永久对象、暂态对象对象标识符:在POA范围内唯一POAActiveObjectMap:从ObjectID到servant的映射请求处理策略:servantmanager线程模型,POA:PortableObjectAdapter(续),POA的编程所有的工作都从RootPOA开始所有的POA构成一个树状层次结构利用RootPOA的create_POA创建新的POA在创建POA时指定策略,CORBA:PolicyListPOA提供的功能创建对象注册servant,激活对象提供ObjectID、ObjectReference之间的转换servantmanager编程POAmanager:控制来自客户的请求多个POA可以共享同一个POAmanagerORB事件处理,服务器端C+mapping(续四),利用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:ORB_Init,通过命令行传递参数对象引用到字符串的转换操作对象引用:CORBA:Object获得初始接口resolve_initial_reference,DII:DynamicInvocationInterface,客户程序可以不通过IDL编译器生成的stub而调用对象的方法,步骤:客户首先得到对象引用:CORBA:Object_ptr创建一个请求对象CORBA:Request_ptr把调用参数放到链表中:CORBA:NVList_ptr,指明类型和数值,也指明返回值调用CORBA:Request_ptr-Invoke方法服务器并不知道客户程序是通过stub还是DII调用其方法的客户程序在编译时刻可以没有idl类型知识比较:COMAutomation中IDispatch接口的用法,用C+开发CORBA应用:客户,用IDL生成stub代码以及类型定义头文件在客户的main函数中,初始化orb,获得orb对象获得对象引用,并调用_narrow向下转换调用对象的方法如果使用DII,则需要用到请求对象,并处理参数如果不用_var类型的话,释放orb和对象引用,DSI:DynamicSkeletonInterface,服务器程序可以动态实现对象,而不利用IDL编译器生成的skeleton代码服务器实现一个对象,如下所示classGenericServant:virtualpublicPortableServer:DynamicImplementationvirtualvoidinvoke(CORBA:ServerRequest_ptrreq);virtualCORBA:RepositoryId_primary_interface(constPortableServer:ObjectIdmain函数的处理不变重点在于invoke函数,利用CORBA:ServerRequest对象获得所有的类型信息对于客户透明比较:COMAutomation中IDispatch接口的实现,用C+开发CORBA应用:服务器,用IDL生成skeleton代码以及类型定义头文件在客户的main函数中,初始化orb,获得orb对象根据服务器应用的需要,处理POA创建servant对象如果使用DSI,那么invoke方法是servant对象的关键如何把对象引用传递出去?字符串?名字服务?调用orb-run()或者orb-perform_work(),CORBAIIOP和IOR,GeneralInter-ORBProtocol:CORBA定义了GIOP作为其互用性框架结构,包括数据传输、数据表示、消息格式InternetInter-ORBProtocol:IIOP是GIOP的具体实现,建立在TCP/IP基础上IOR:Interoperableobjectreference,IOR例子,RepoId:IDL:GenericServer:1.0IIOPProfileVersion:1.0Address:inet:162.105.178.100:12122Location:corbaloc:162.105.73.196:12122/25607/991958392/%5f0Key:2f32353630372f393931393538333932/25607/9919583922f5f30/_0MultipleComponentsProfileComponents:NativeCodesets:normal:ISO8859-1:1987;LatinAlphabetNo.1wide:ISO/IEC10646-1:1993;UTF-16,UCSTransformationFormat16-bitformKey:00.,namingservice,CORBAservices:namingservice,建立起“名称-对象引用”的映射关系在内部以层次结构的形式组织名字映射,类似于文件系统的结构。所有的类型和接口定义位于CosNaming域中NamingContext接口负责所有有关命名服务相关的功能,例如:创建新的context、删除contextbind操作、unbind操作resolve操作怎样获得初始namingcontext?通过orb-resolve_initial_referenceORB厂商应该提供命名服务工具,namingservice示例,CORBA:Object_varnsobj=orb-resolve_initial_references(NameService);CosNaming:NamingContext_varnc=CosNaming:NamingContext:_narrow(nsobj);CosNaming:Namename;name.length(1);name0.id=CORBA:string_dup(myAccount);name0.kind=CORBA:string_dup();/服务器方Account_ptracc=newAccount_impl();nc-bind(name,acc);/客户方CORBA:Object_varobj;obj=nc-resolve(name);Account_varclient=Account:_narrow(obj);,CORBAservices:其他服务,Eventservice提供松耦合事件模型的机制TradeService提供了更加灵活的对象查找服务TimeService提供了与时间有关的服务,统一了时间的表达方式ConcurrencyserviceSecurityServiceTransactionService,CORBA基本概念,1、CORBA(CommonObjectRequestBrokerArchitecture)公共对象请求代理程序体系结构)。CORBA是一个规范(specification)而不是程序实现(implementation)。它提供了一个允许在分布式和异构型环境中应用程序之间进行互操作的框架。2、ORB(ObjectRequestBroker)对象请求代理:它作为一个“软件总线”来连接网络上的不同对象,提供对象的定位和方法调用,它是CORBA实现的关键。3、OA(ObjectAdapter)对象适配器:用于构造对象实现与ORB之间的接口。它给框架发送方法,调用并且支持服务器对象的生命周期(如:对象的创建和删除)。4、BOA(BasicObjectAdapter)基本对象适配器:负责激活对象,即当客户请求对象的服务时,激活对象实现的能力。,5、POA(PortableObjectAdapter)可移植对象适配器:是BOA的替代方式,提

温馨提示

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

评论

0/150

提交评论