CORBAWindows组件体系

上传人:gb****c 文档编号:243016416 上传时间:2024-09-13 格式:PPT 页数:38 大小:273KB
返回 下载 相关 举报
CORBAWindows组件体系_第1页
第1页 / 共38页
CORBAWindows组件体系_第2页
第2页 / 共38页
CORBAWindows组件体系_第3页
第3页 / 共38页
点击查看更多>>
资源描述
,*,单击此处编辑母版标题样式,单击此处编辑母版文本样式,第二级,第三级,第四级,第五级,CORBA & Windows,组件体系,2003-12-26,1,内容,CORBA overview,Windows组件体系,2,CORBA Overview,ORB(Object Request Broker ),Interface Definition Language (IDL),CORBA Communications Model: IIOP,CORBA Object Model: IOR,CORBA Clients and Servers,client stubs and server skeletons,CORBAservices and CORBAfacilities,3,CORBA结构,4,CORBA Specification overview,OMG IDL,Interface:,ORB Interface、DII/DSI、Interface Repository,POA,Interoperability,GIOP、IIOP、IOR,Mapping,COM、Automation,C mapping、C+ mapping、SmallTalk,Service Specification(,单独的文档),naming service,、event service、transaction service、security service、trade service、,5,OMG IDL,类C风格的语言,定义接口: interface,基本数据类型,void、boolean、char、wchar、octet、 (unsigned) short、(unsigned) long、(unsigned ) long long、float、double、long double、string、any,常数、常量表达式,构造数据类型,typedef、enum、struct、union、数组、sequence,6,OMG IDL(,续),Interface,例如:,interface Account ,void deposit( in unsigned long amount );,void withdraw( in unsigned long amount );,long balance();,;,接口方法中参数的方向属性,异常:用户自定义异常和系统异常,oneway操作,module、include,允许多重继承,与实现(,implementation),无关,7,C+ mapping,基本数据类型与,C+,的对应关系,特殊标识符的处理,module namespace,IDL,类型,CORBA:,中的数据类型,字符串处理不用,new、delete,,而用专门的函数,枚举类型,复合类型,除了类型本身外,另生成一个_,var,类型(类似,auto_ptr,),接口类型,_,ptr,类型、_,var,类型,8,客户端C+ mapping,客户通过,stub,调用对象的方法,客户如何得到对象引用,客户如何调用对象方法,9,客户端,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-deposit( 700 );,client-withdraw( 250 );,cout 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 =,poa-activate_object,(account);, / Write reference to file,mgr-activate ();,orb-run();,poa-destroy (TRUE, TRUE);,delete micocash;,return 0;,13,POA: Portable Object Adapter,POA,负责创建对象引用、激活对象以及分发请求,POA,负责从,CORBA,对象到,servant,之间的对应,CORBA,对象与,servant,对象的生命周期相互分开,POA,对于,CORBA,服务器在性能、资源利用、可伸缩性等方面具有重要的意义,POA,策略,控制:,对象生命周期:永久对象、暂态对象,对象标识符:在,POA,范围内唯一,POA Active Object Map:,从,ObjectID,到,servant,的映射,请求处理策略:,servant manager,线程模型,14,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,事件处理,15,服务器端,C+ mapping(,续四),利用,idl,生成的框架类编写,servant,类,编写,main,函数,从,ORB,初始化开始,考虑,POA,的策略,简单的程序可以使用默认的,RootPOA,创建,servant,并注册,处理对象引用,进入主循环,阻塞方式:,orb-run(),非阻塞方式:,orb-work_pending()orb-perform_work(),16,用,C+,开发,CORBA,应用,基本的,C+,知识,包括链表结构、智能指针的知识,针对当前使用的,ORB,产品,熟悉对于基本数据类型的支持,以及这些类型与当前平台上各数据类型的关系,理解,CORBA,的,client/server,应用模型,包含头文件,链接库文件,掌握,IDL,编译器,掌握,ORB,接口,如何传递对象引用,17,ORB,接口,初始:,CORBA:ORB_Init,,通过命令行传递参数,对象引用到字符串的转换操作,对象引用:,CORBA:Object,获得初始接口,resolve_initial_reference,18,DII:Dynamic Invocation Interface,客户程序可以不通过,IDL,编译器生成的,stub,而调用对象的方法,步骤:,客户首先得到对象引用:,CORBA:Object_ptr,创建一个请求对象,CORBA:Request_ptr,把调用参数放到链表中:,CORBA:NVList_ptr,,指明类型和数值,也指明返回值,调用,CORBA:Request_ptr-Invoke,方法,服务器并不知道客户程序是通过,stub,还是,DII,调用其方法的,客户程序在编译时刻可以没有,idl,类型知识,比较:,COM Automation,中,IDispatch,接口的用法,19,用,C+,开发,CORBA,应用:客户,用,IDL,生成,stub,代码以及类型定义头文件,在客户的,main,函数中,初始化,orb,,获得,orb,对象,获得对象引用,并调用_,narrow,向下转换,调用对象的方法,如果使用,DII,,则需要用到请求对象,并处理参数,如果不用_,var,类型的话,释放,orb,和对象引用,20,DSI:Dynamic 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 &,PortableServer:POA_ptr);,;,main,函数的处理不变,重点在于,invoke,函数,利用,CORBA:ServerRequest,对象获得所有的类型信息,对于客户透明,比较:,COM Automation,中,IDispatch,接口的实现,21,用,C+,开发,CORBA,应用:服务器,用,IDL,生成,skeleton,代码以及类型定义头文件,在客户的,main,函数中,初始化,orb,,获得,orb,对象,根据服务器应用的需要,处理,POA,创建,servant,对象,如果使用,DSI,,那么,invoke,方法是,servant,对象的关键,如何把对象引用传递出去?字符串?名字服务?,调用,orb-run(),或者,orb-perform_work(),22,CORBA IIOP,和,IOR,General Inter-ORB Protocol:,CORBA,定义了,GIOP,作为其互用性框架结构,包括数据传输、数据表示、消息格式,Internet Inter-ORB Protocol:,IIOP,是,GIOP,的具体实现,建立在,TCP/IP,基础上,IOR:Interoperable object reference,RepositoryID Data for Protocol 1 Data for Protocol 2 ,Endpoint Info Object Key,Object ID,23,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 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 .,24,CORBA结构,25,CORBA services:naming service,建立起“名称-对象引用”的映射关系,在内部以层次结构的形式组织名字映射,类似于文件系统的结构。,所有的类型和接口定义位于,CosNaming,域中,NamingContext,接口负责所有有关命名服务相关的功能,例如:,创建新的,context、,删除,context,bind,操作、,unbind,操作,resolve,操作,怎样获得初始,namingcontext?,通过,orb-resolve_initial_reference,ORB,厂商应该提供命名服务工具,26,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 = 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 );,27,CORBA services:,其他服务,Event service,提供松耦合事件模型的机制,Trade Service,提供了更加灵活的对象查找服务,Time Service,提供了与时间有关的服务,统一了时间的表达方式,Concurrency service,Security Service,Transaction Service,28,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,剑桥实验室,29,CORBA与COM的比较,标准的层次不同,CORBA,与,Java,结合的优势,CORBA,跨平台优势,COM,在,Windows,平台上的优势,COM,的效率有优势,跨语言的策略不同,COM,组件丰富、,CORBA,开发简单,CORBA,不适合开发,UI,组件,CORBA,与,COM,互补策略,30,Windows组件技术,基于组件技术使得软件开发更容易管理,传统,Windows,软件开发,在动态链接库之前,代码模块共享的唯一方法是用静态链接,静态链接的缺点:对有,bug,的代码的管理和给客户应用程序添加其他库时必须重编整个程序,解决的办法:用动态链接库,31,Windows组件技术(续),动态链接库使用可用库的同一份拷贝。在运行时根据客户应用程序的要求载入。如果库已经被装入了,则,Windows,仅仅将代码页映射到客户内存空间,DLL,的缺点:,不能保证输出函数中所有的客户端和,DLLs,都同步,DLLs,和,COM,技术相似的地方是提供动态组合软件的能力,在运行时改变组件,如果,DLL,里所有的函数原型和客户端程序所期望的一样,,DLL,不会有问题。但是任何一个方法原型的变化(比如函数参数的增加或减少),如果此时客户端程序没有重新编译,则客户应用可能不能载入库(最好的情况下)或程序可能崩溃,(,最坏的情况,),32,COM之前的应用,在,COM,之前,应用程序是完全分开的实体,它们之间只有很少或没有任何集成关系,应用,代码和数据结构,33,Windows组件技术(续),COM,技术,COM,在客户端和实际的组件代码之间引入一个间接层:,COM,接口(,GUID,的函数)。接口被预先定义好,而且接口一旦被发布之后就不会变化,而原来的,DLL,入口点可以变化,一个正常的,Windows DLL,可能有许多入口点,但是,COM DLL,只有,4,个标准的,DLL,入口点:,DllGetClassObject,DllCanUnloadNow,DllRegisterServer,DllUnregisterServer,34,COM组件模型,COM,提供了组件集成的方法,.,但是,每个组件必须提供细节复杂的通讯接口,对象不能直接交互,35,COM的优缺点,COM,的优点:,在构建组件软件方面,,COM,优于简单的,DLL,模型,许多公司都使用,COM,构建了他们自己的核心系统。如:,N,的后端使用,COM,COM,成功的关键之一:强调接口,COM,的缺点:,COM DLLs,的名字和配置信息都进入注册表,将导致注册表过重的负担,因为,COM,使用注册表(每个使用者都可以看到),所以不可能隔离私有的组件,注册表为应用程序的安装和卸载过程增加了复杂性,接口一旦发布决不能变化,发布后变化接口将破坏可靠性和可预测性。客户使用接口必须遵循严格的规则,COM,组件的数据类型一致性问题:使用各自的类型系统,比如,VB,组件使用,VARIANT,类型,36,走向.NET,使用,.NET Framework,的公共语言运行时(,CLR),所有的组件都建立在一个共同的底层基础上。不再需要通讯的繁琐细节,对象可以直接交互,37,Microsoft .NET,把系统平台从,Windows,桌面转移到,Internet,上来,Internet,作为,.NET,的平台,Web Services,新观念:软件作为服务,(Software As A Service),核心技术,XML,:把各种数据和服务连接起来,Web Service,.NET Framework,38,
展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 图纸专区 > 大学资料


copyright@ 2023-2025  zhuangpeitu.com 装配图网版权所有   联系电话:18123376007

备案号:ICP2024067431-1 川公网安备51140202000466号


本站为文档C2C交易模式,即用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。装配图网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知装配图网,我们立即给予删除!