软件中间件技术UNIT2_第1页
软件中间件技术UNIT2_第2页
软件中间件技术UNIT2_第3页
软件中间件技术UNIT2_第4页
软件中间件技术UNIT2_第5页
已阅读5页,还剩173页未读 继续免费阅读

下载本文档

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

文档简介

1、 数据库中间件(DM,Database Middleware) 远程过程调用中间件(RPC, Remote Procedure Call) 面向消息中间件(MOM,Message Oriented Middleware) 事务处理中间件(TPM,Transaction Processing Monitor) 基于对象请求代理(ORB,Object Request Broker)的中间件 COM(Component Object Model)起源于OLE(Object Linking and Embedding,对象连接和嵌入);当时的OLE使用一种称为动态数据交换(Dynamic Data E

2、xchange,简称DDE)机制来支持程序之间的通信,而DDE建立在Windows消息机制基础上,稳定性和效率都很差;COM定义了客户与构件之间互操作的标准,包括规约与实现两部分。 - 规约部分定义了构件之间的通信机制,这些规约不依赖于任何特定的语言和操作系统。 - 实现部分即COM库,为COM规约的具体实现提供一些核心服务。 以COM技术为基础的OLE后改名为ActiveX。 随着NT4.0的发布,COM技术需要延伸到分布计算环境,这就产生了所谓的DCOM(Distributed COM,分布构件对象模型)。 DCOM用网络协议来代替本地进程之间的通信,并针对分布环境提供了一些新的特性,例如

3、位置透明、网络安全性、跨平台调用等。 COM/DCOM技术为基于构件的软件开发提供了基础。但是,如果用它来开发企业级应用系统,显然还需要功能强大的基础设施,这些基础设施将为构件提供基本的运行和部署环境。 为了满足企业级应用的需求,微软公司推出了一种微软事务服务器(Microsoft Transaction Server,简称MTS)。 MTS把应用系统的客户程序、应用构件和各种资源有机结合起来,弥补了COM/DCOM的不足,为分布式企业应用提供了一种服务器端的构件运行和部署环境。 MTS是从NT4.0+ SP4的Option Pack开始,随Windows操作系统免费提供的。 随着因特网应用的

4、日益广泛,企业级应用的体系结构越来越重要。为了使Windows真正成为企业应用平台,微软公司又推出了Windows DNA(Distributed interNet Applications Architecture,分布式网络应用体系结构)。 Windows DNA是一个完整的、多层的新一代企业应用体系结构,它包含工具、数据库、操作系统、编程模型和应用服务等。在新的企业应用体系结构下,微软公司希望进一步把COM、DCOM和MTS统一起来,形成真正适合于企业级应用的构件技术,这就是COM+。 COM+仍然以COM/DCOM为基础,包含了MTS。 COM+是一种中间件技术的规约,其要点是提供建立

5、在操作系统上的、支持分布式企业级应用的“服务”。 COM+是在20世纪末随着Windows2000发布才面世的。Windows DNA是一个服务器端的开发平台,包含了以下产品:Windows NT/2000: 操作系统,为所有微软公司技术提供运行环境和支持。DCOM: 支持分布式构件的核心技术。MSMQ(Microsoft Message Queue): 消息队列产品,支持构件间的异步通信。MTS(Microsoft Transaction Server): 管理构件的应用服务器。Microsoft Wolfpack: 支持集群服务器的软件。Microsoft SQL Server: 一个关系

6、型数据库管理系统。Microsoft IIS(Internet Information Server): Web服务器。Microsoft Management Console: 部署和管理工具。COM+技术是以上产品(尤其是DCOM、MTS、还有MSMQ的一部分)的相互结合。COM+COM+目录负载平衡驻留内存数据库对象池新的事件模型构件管理和部署JIT激活MTS基于接口的编程模型基本的构件服务远程支持分布式构件服务DCOM事务支持资源分发管理安全模型易于管理COM+的核心是改进的COM/DCOM和MTS的集成,但是COM+增加了一些非常重要的构件服务,比如负载平衡、驻留内存数据库、事件模型

7、、队列服务等。COM+ 还提供了一个比MTS 更好的构件管理环境COM+ Explorer,用来设置COM+应用和COM+构件的属性信息。另外,COM+还支持所谓的申述式编程模型(declarative programming model),它允许开发人员以较通用的方式开发构件,而一些细节则留到部署时再确定。(1)真正的异步通信 COM+底层提供了队列构件服务,允许客户和构件进行异步通信。 (2)事件服务 新的事件机制利用系统服务简化了事件模型,避免了COM可连接对象机制的琐碎细节,使事件源和事件接收方实现事件功能更加灵活。(3)灵活性 动态负载平衡以及驻留内存数据库、对象池等系统服务为COM

8、+的灵活性提供了技术基础。(4)可管理和可部署性 COM+的申述式编程模型和构件管理环境支持应用系统在开发完成后的管理和部署。(5)易于开发 COM+开发模型比以前的COM构件开发更为简化。 (1)全局唯一标识符(Globally Unique Identifier ,简称GUID) GUID是一个128位整数,可用来唯一地标识COM对象或接口。GUID来源于开放软件基金会(Open Software Foundation,简称OSF)采用的通用统一标识符(Universally Unique Identifier,简称UUID),UUID被定义为分布式计算环境(Distributed Com

9、puting Enviorment,简称DCE)的一部分,主要用于标识远程过程调用(Remote Procedure Call,简称RPC)通信的双方。(2)COM对象和COM构件 在COM规约中,“构件”和“对象”经常混淆,所谓COM对象是指符合COM规则的CoClass(Component Class,构件类)的实例。每一个COM对象都有一个GUID,称为CLSID(CoClassID)。 COM构件是指一组以编译后的形式提供一组功能的COM对象。COM构件独立于具体编程语言,以二进制形式(DLL或EXE)发布,可以独立升级,可以透明地在网络上被重新分配。(3)COM接口 COM接口是CO

10、M对象显示出来的所有信息,是一组逻辑上相关的函数集合。 每一个接口都有一个GUID,称为接口标识符(Interface Identifier,简称 IID)。 COM接口具有不变性。COM接口只允许单继承。 一个COM对象可实现多个COM接口,这体现了COM对象多态性,这些接口由IUnknown接口来管理。(4)IUnknown接口 IUnknown是所有COM对象都必须实现的接口,其他接口都直接或间接继承IUnknown接口,它包含AddRef 、Release和QueryInterface三个操作。 QueryInterface负责向客户提供接口查询功能。Addref和Release相结合

11、,通过引用计数(reference counting)的方法,提供对COM对象的生存周期进行管理的功能。(5)接口定义语言 微软接口定义语言MIDL(Microsoft Interface Definition Language)是定义COM接口的申述式语言,其目标是通过独立于具体编程语言的方式来定义接口。MIDL是基于开放软件基金会分布式计算环境中的远程过程调用的接口描述语言,常简称为IDL。 客户机程序与进程内构件可通过直接函数调用进行交互。 COM采用了本地过程调用(Local Procedure Call,简称LPC)作为进程间通信机制。本地对象本地构件桩stubCOM本地服务器进程客

12、户机进程客户机应用进程内对象进程内构件本地对象代理COMLPC (1)COM库 (COM library) COM库是COM标准的系统级实现,为COM对象的标识和创建、内存管理、构件程序的卸载等提供了一组标准接口和辅助函数。在Windows系统中,COM库主要包含在OLE32.DLL和RPCSS.exe文件中,COM库很多地方直接用到了Windows系统的一些特性,例如系统注册表、动态连接库等。 (2)系统注册表(windows registry) 系统注册表是一个全操作系统范围公用的信息仓库,它可用作客户程序、构件程序和COM库三者交换有关COM对象信息和接口信息的场所。 (3)类工厂(cl

13、ass factory) 类工厂是能够创建其他COM对象的特殊COM对象,支持一个特殊的接口 IClassFacroty,为例化CoClass构件类提供了一种标准机制。显然,每一个COM对象类应该有一个相应的类工厂对象。IClassFactory接口中定义了两个重要的操作CreateInstance和LockServer。CreateInstance生成COM对象并返回所请求接口的指针。LockServer在内存中保持COM构件。 (4)COM服务器 COM服务器是指包含一个或多个COM对象类和相应的类工厂,能向客户提供服务的一个程序(EXE)或库(DLL)。 (1)自动化对象 所谓自动化是一

14、种允许高级语言(比如VBScript)使用构件的COM应用技术。自动化的核心是IDispatch接口,自动化对象就是实现了IDispatch接口的COM对象。(2)IDispatch接口 IDispstch是自动化对象必须实现的接口。IDispatch在IUnkown接口的基础上增加了GetIDsOfNames、GetTypeInfo、GetTypeInfoCount和Invoke等操作。 (3)类型库和对象描述语言 对象描述语言(Object Description Language,简称ODL)是IDL的扩充,用来描述COM对象的类型信息,一个COM对象的类型信息通常包括每个接口的类型信息

15、(用interface或disp interface关键字)和COM对象类的类型信息(用coclass关键字)。 类型库(type library)是IDL文件(*.idl)经编译后产生的一个二进制资源文件(*.tlb),包含COM服务器中COM对象和接口的信息。IDL文件中用library关键字描述类型库信息,包括类型库的全局唯一标识符(即LIBID)、类型库所使用的语言、版本等,也可用import关键字移入其他类型库信息。(4)ActiveX控件 ActiveX控件(ActiveX control)是一种主要用于用户界面和Internet的轻量级COM构件,是一种自动化对象。ActiveX

16、控件是从OCX(OLE控件)发展而来的。 DCOM是COM的进一步扩展。DCOM用网络协议来代替本地进程之间的通信,并针对分布环境提供了一些新的特性,例如位置透明、网络安全性、跨平台调用等。DCOM的分布功能依靠远程过程调用实现。客户机DCOM网络协议COM 运行时环境安全提供者DCE RPC协议栈COM 运行时环境安全提供者DCE RPC协议栈构件简单地说,COM+构件就是COM构件加上一些规则和实现几个接口。COM+编程模型主要有三个原则:(1)COM+构件建成COM DLL。(2)COM构件要符合基本编程和资源分配规则。主要有: - 为单个独立客户机编程,不必考虑多用户,因为COM+会处

17、理多用户。 - 构件需要资源(如数据库连接)时,不要过早请求。 - 尽早释放资源。 - 构件本身不必保持状态,使COM+能更有效地管理资源。 (3)COM+构件要利用COM+API与COM+交互。(1)代理进程(surrogate executable) MTS构件和COM+构件需要以DLL形式实现,DLL形式实现进程内构件,这样就很难生成多用途构件,既在MTS中运行,又作为独立服务器端进程外构件。为此,微软公司提出代理进程的概念,负责装载并提供COM+构件运行的周境(context)。(2)对象周境(object context) COM+的周境是指共享同一套运行要求的对象集合。由于不同的对

18、象类可能使用了不同的部署信息,所以一个进程通常包含一个或多个周境,这些周境的部署互不兼容。所有无部署信息的对象都驻留在调用方的周境中。每一个周境都有一个对象,即对象周境,运行在此周境中的对象可通过CoGetObjectContext API函数得到此对象周境,利用对象周境的IObjectContext接口可以访问到周境的属性信息。(3)对象周境的IObjectContext接口 每一个COM+构件对象都有相应的对象周境(或称对象描述表),对象周境提供IObjectContext接口 (MtxAS.dll或ComSvcs.dll中实现),COM+构件对象通过该接口与COM+通信。 (4)截取(i

19、ntercept) COM+系统可以在创建COM+对象时为其分配一个对象周境,这种技术被称为截取。 即时激活:Just In Time Activation,简称JITA。 JITA是COM+保持资源有效利用的一种动态对象激活机制,它是COM+的核心机制。 对象只有在真正需要时才被激活,如果对象一旦不用,COM+就释放它,并在客户再次需要时由COM+重新激活。(1)COM+构件的生成周期 COM+构件的生成周期包括创建(create)、激活(activate)、去活(deactivate)、删除(destroy)。 客户机创建对象时,COM创建但不激活对象,对象在第一次方法调用时被激活。对象去

20、活的时间取决于对象是否支持事务。如果事务性对象调用SetAbort或SetComplete,则方法调用完成后立即去活,即使客户仍引用这个对象。下次客户调用这个对象时,COM+自动重新激活这个对象,对客户这是透明的。非事务性对象则保持活动状态,直到客户释放该对象的所有引用。(2)IObjectControl接口 COM+构件可实现IObjectControl接口,该接口有两个方法,即激活和去活,COM+分别在对象激活和去活时自动调用它们。因此,我们可以利用这两个方法做激活前的准备工作和去活前的扫尾工作,其作用相当于C+和Java的构造方法和析构方法。 请注意,COM+构件不能访问IObjectC

21、ontrol接口,只有COM+运行时周境可以调用该接口的方法。 IObjectControl接口还有一个名为CanBePooled的方法,对象通过该方法通知COM+运行时周境,它是否放在对象池中供复用。 COM和MTS把构件的所有部署信息都保存在Windows的系统注册表中。 而COM+则把大多数的构件信息保存在一个新的数据库中,称为COM+目录。 COM+目录统一了COM和MTS的注册模型,并提供了一个专门针对构件的管理周境。 COM+目录信息既可以通过COM+管理程序检查或设置,也可以在程序中通过COM+提供的一组COM接口来访问。 COM+构件可有以下几种事务特性: 1)要求事务。对象必

22、须运行在一个事务周境中。 2)要求一个新的事务。每个事务都运行在一个单独的事务周境中。 3)支持事务。对象可以运行在一个客户的事务周境中,或者创建一个新的事务周境。 4)不支持事务。对象不运行在事务周境中。 COM+构件的事务特性可以由COM+管理程序来部署,并通过对象周境实现。通过对象周境,一个事务操作可以被提交、被取消或者禁止提交。 COM+沿用MTS基于角色的安全模型。 在开发阶段,开发人员负责定义各种角色,并且在实现构件功能时,只允许指定角色的用户才可以执行这些功能; 在配置阶段,管理员负责为所有的角色指定有关的用户帐号,COM+允许达到方法级的安全控制。 COM+系统是一个典型的分布

23、式事务处理系统,主要由以下部分组成。 (1)COM+运行环境(COM+ runtime environment) 即COM+构件容器,负责在服务器上执行、放置所有创建的COM+构件。 (2)COM+构件服务管理程序(COM+ explorer) 是Windows 2000管理工具中的一部分,代替了MTS管理程序和DCOM配置程序,负责增加、删除COM+应用和COM+构件,设置COM+应用和COM+构件的属性信息,比如事务特性、安全特性等等。 (3)COM+应用(COM+ application) 对应于MTS中的包(package),COM+称之为COM+应用(COM+ aApplicatio

24、n),每一个COM+应用包含一个或多个COM+构件以及有关的信息。同一个COM+应用中的COM+构件共享同一个进程,共享同一套安全角色定义。 (4)资源分配程序(resource dispensers) 资源分配程序分配数据库连接、网络连接、对象、内存块等资源。资源分配程序主要是通过提供资源池(resource pool)功能来管理资源。最常用的有ODBC资源分配程序和共享属性管理程序(Shared Property Manager ,简称SPM)。 (5)分布式事务协调程序 分布式事务协调程序(Distributed Transaction Coordinator ,简称DTC)是Windo

25、ws的一个后台服务,它用两阶段提交的方式实现事务的功能,提供可伸缩、健全的分布式事务管理服务。 COM+封装了服务器端构件系统平台的复杂性,以系统服务的形式为多构件应用系统提供基本功能。 (1)COM+队列化构件(Queued Component ,简称QC) QC是COM+的关键特性,它基于微软消息队列服务 (Microsft Message Queue Server ,简称MSMQ),提供了一种异步的,基于消息的运行方式。 (2)COM+事件模型 COM+事件模型改进了COM的可连接对象机制,它采用了多通道的发布/订阅(multicasting publish/subscribe)事件机制

26、,允许多个客户去“订阅”由各种构件对象“发布”的事件。(3)负载平衡(load balancing) 负载平衡是分布式应用的一种高层次需求,使用DCOM和MTS的配置特性能实现初步的静态负载平衡,但是不能实现动态负载平衡,而COM+提供了一个负载平衡服务,它可以以透明方式实现动态负载平衡。 (4)驻留内存数据库(In Memory DataBase,简称IMDB) IMDB是一个驻留在内存中的支持事务特性的数据库系统,它可以为COM+应用程序提供快速的数据访问。 (5) COM+对象池。 对象池是指把对象的实例保留在内存中,以便当客户请求创建对象时可以马上用到这些对象。对象池如同IMDB一样,

27、完全是出于效率考虑,用于建立大型的应用系统。 .NET.NET .NET.NET .NET.NET .NET.NET .NET.NET CORBACORBA:Common Object Request Broker Architecture,公共对象请求代理体系结构,由OMG制定的分布对象模型。要点:要点:通过IDL定义接口,使用不同编程语言、不同编译器实现的构件,可以通过ORB连接,形成一个跨平台的应用。OMGOMG:一个制定行业标准和对象管理标准的非盈利组织,成立于1989年,目前已拥有会员近千个,包括许多研究机构、大学和大公司如IBM、HP等。CORBACORBA产品:产品:CORBA是

28、一套规约,而不是一个产品,开发商可以开发不同的产品来实现CORBA规约。著名的产品有IONA公司的Orbix、 Corel(Borland/Inprise)公司的VisiBroker、 IBM公司的Component Broker等。第一代:第一代:CORBA规约的第一代主要集中在为分布式对象定义一个基础,其核心是ORB和IDL。CORBA 2.0CORBA 2.0:1995年颁布,增加了ORB互操作性规约,主要是基于TCP/IP的IIOP协议(Internet Inter-ORB Protocal,因特网ORB互联协议)。 CORBA 2.1CORBA 2.1:1997年颁布,增加了COM/

29、CORBA互操作规范。CORBA 2.2CORBA 2.2:1998年颁布,增加了易移植的对象适配器(Portable Object Adapter,简称POA)和IDL到Java语言的映射规约。CORBA3.0CORBA3.0草案:草案:1999年提交,2002年正式发布。CORBA 3.0以前的版本只注意到对象本身,而没有进一步考虑可部署的、由应用服务器管理的构件。 CORBA3.0增加了CCM(CORBA Component Model)CCM步微软公司的 COM+和Sun公司的EJB的后尘,这三者的核心概念是相似的。它们均提供容器作为构件的运行环境,而诸如事务处理、安全处理、事件处理、

30、持久性等公共服务都是通过公共API访问。但是,目前还没有成熟的、完全实现CORBA3.0规约的产品。该模型描述了分布式对象系统的基本成分,有四个主要层次:应用对象(application objects)、公共设施(common facilities)、对象请求代理(ORB,Object Request Broker )和对象服务(object services)。应用对象公共设施对象服务对象请求代理ORB1) 对象服务是一组系统级的对象,为实现和管理对象提供了基本的功能,包括名字、生存周期服务、事务服务、安全服务等等。2) ORB是核心,它提供了一种机制,使得对象可以透明地发送请求和接受响应

31、。3) 公共设施是适用于众多应用领域的通用构件,例如信息管理、系统管理、任务管理和用户界面等。4) 应用对象是专用于特定领域的应用构件,OMG没有为它制定标准。(1)客户和对象实现 客户是向对象发出请求的程序或进程,客户通过访问目标对象的对象引用来调用目标对象的操作,目标对象的实现方式对客户是透明的。 对象实现是实现目标对象接口的代码和数据的封装实体。对象实现不依赖于ORB或者客户调用对象的方式,对象可以具有不同的实现方式。通过使用不同的对象适配器,ORB系统可以支持各种不同类型的对象实现方式。(2)ORB内核和ORB接口 ORB内核提供了对象的通用表示和对象间通信的机制。客户和对象实现通过O

32、RB接口的形式访问ORB内核提供的功能,这些接口在所有的ORB实现系统中都是相同的。 ORB接口是客户与对象实现可以直接访问到的、抽象描述ORB操作的接口。ORB接口由ORB内核实现,它不依赖于任何的对象适配器。ORB接口主要包括:ORB初始化;获取初始对象引用;对象引用操作;策略域的管理;线程有关的操作等。(3)基本对象适配器BOA和易移植对象适配器POA对象适配器是对象实现访问ORB所提供服务的主要方式。基本对象适配器(Basic Object Adaptor,简称BOA)和易移植对象适配器(Portable Object Adaptor,简称POA)是CORBA架构演变过程中两个重要的里

33、程碑。 BOA着重CORBA服务器实现,而不是CORBA对象实现,BOA规范定义的体系结构比较模糊。 POA规约在CORBA 2.2中引入,可以看作是对BOA规约的改进。POA规约定义CORBA对象为具有标识、接口和实现的抽象实体,并引入了服务体(servant)的概念,使抽象的CORBA对象能和实现该对象功能的具体编程语言实体彻底分离。(4)接口仓库和实现仓库 接口仓库是储存、发布、管理相关对象接口定义的集合,是ORB系统的辅助部件。接口仓库在实现时使用持久对象机制,通常以IDL文件为其输入,将接口描述信息进行处理后存放在文件、数据库或者其它形式的存储机制中,并提供一组标准的调用接口供运行时

34、动态查询。 实现仓库包含了允许ORB定位和激活对象实现的信息。此外,实现仓库也是储存与ORB对象实现相关的其它信息(例如,调试信息,管理控制,安全性等)的公共场所。实现仓库既可以和接口仓库作为整体一起实现,也可以作为一个单独的部件实现。(5)客户桩和实现骨架 客户桩又称IDL stubs,是一些由IDL编译器根据IDL文件生成的、与编程语言相关的客户端代码段。客户桩向客户提供一个因接口而异的API,从而透明对象实现的位置和ORB操作。 实现骨架又称IDL Skeleton,是由IDL编译器根据IDL文件生成的,与编程语言相关的服务器端代码框架。实现骨架提供将对象适配器转发的请求调度到对象实现上

35、的适当操作的代码。 请注意,实现骨架与客户桩不是必然对应的。(6)动态激活接口DII和动态骨架接口DSI DII是一种允许动态创建和激活对CORBA对象的请求的客户端接口。DII根据客户代码提供的要调用的对象、要执行的操作、操作的参数集和参数类型等信息(其中包括从接口仓库获得的各种动态信息),在运行时动态创建和激活对对象的请求。注意,客户通过静态桩还是动态接口发出请求对于对象实现是透明的。 DSI是一种允许将请求在运行时从对象适配器动态提交给对象实现的接口。注意,对象适配器是通过静态骨架还是动态骨架接口访问对象实现,对于客户是透明的。1) OMG IDL 是CORBA的重要组成部分,已被国际标

36、准化组织ISO采纳(ISO DIS 14750)。2) OMG IDL是独立于具体编程语言的,一个IDL文件可以向多种编程语言映射。例如,IDL 到C,C+,Java,SmallTalk 等的映射。OMG IDL也是独立于平台的,由IDL定义的接口可以在不同的ORB和平台上一致地表达。3) CORBA规约中主要部件的接口,例如ORB接口、Stub、Skeleton、对象适配器等,全部由OMG IDL定义。当然,OMG IDL更主要的用途是定义应用系统中的重要接口,这些接口是复用、互操作的关键部分,也是软件架构的重要组成部分。/ StockMarket.idl /注释 module StockM

37、arket /定义名字空间 typedef string StockSymbol; /类型说明 typedef sequence StockSymbolList; exception AccountExpired string expiration_date; ; /异常说明 interface Account; /forward declaration说明接口 interface StockServer /定义接口 float getStockValue(in StockSymbol symbol);/操作说明 StockSymbolList getStockSymbols(); ; int

38、erface StockAccount : Account /IDL支持多重继承 readonly attribute float getbalance; /属性说明 readonly attribute string getowner; Boolean makeWithdraw(in any f) raise(AccountExpired); ; 通过ORB,客户机可以请求远程对象的操作,这些操作是用与编程语言无关的接口定义语言IDL描述的。客户机与远程对象发送和接受请求的方法主要有两种:静态方法和动态方法。 静态方法要求在编译时已知所有的IDL接口,然后由IDL编译程序生成客户端的桩代码和

39、服务器端的骨架代码,并分别链接到客户机程序和对象实现中,桩代码和骨架代码的编程语言可能完全不同。这样,客户端本地的桩代码中的代理对象(proxy object)代表远程的对象实现,而远程的对象实现又是以骨架代码为实现框架,运行时双方就能相互“认识”。 动态方法在编译时客户机和服务器端程序都不知道IDL接口。运行时,客户端使用动态激活接口DII向对象实现发出请求,服务器端的对象适配器使用动态骨架接口DSI访问对象实现,两者之间的接口信息从ORB的接口仓库中动态获取。为了支持ORB之间的互操作,CORBA规约定义了ORB间通信的标准协议GIOP(General Inter-ORB Protocol

40、)。 GIOP是直接建立在传输层协议上的,CORBA规约另外还定义了一种建立在DCE RPC上的协议:特定环境的ORB互连协议(Environment-Specific Inter-ORB Protocol,简称ESIOP)。 GIOP只是一种抽象的协议,在实现时必须映射到具体的传输层协议或者特定的传输机制上。因特网ORB互联协议(Internet Inter-ORB Protocal,简称IIOP)就是GIOP在TCP/IP上的映象。(1)用IDL定义接口/ IDL文件为grid.idlinterface Grid readonly attribute short height; reado

41、nly attribute short width; void set(in short row, in short col, in long value); long get(in short row, in short col);(2)编译IDL文件grid.idlIDL编译程序将IDL文件grid.idl编译成C+桩gridC.cc和骨架gridS.cc,其共同的说明文件为grid.hh/grid.hhclass Grid : public virtual CORBA:Object public: static Grid_ptr _bind(.); virtual CORBA:Short

42、 height(CORBA:Environment&); virtual CORBA:Short width(CORBA:Environment&); virtual void set(CORBA:Short row, CORBA:Short col, CORBA:Long value, CORBA:Environment &); virtual CORBA:Long get(CORBA:Short row, CORBA:Short col, CORBA:Environment &);(3)编写客户端程序#include “grid.hh”#include ma

43、in () Grid_var p;/ Like a C+ pointer/ Connect to a remote Grid object p = Grid:_bind(“myGrid:GridSrv”, GridHost);/ Now use it like a regular C+ object cout “height is “ height() endl; cout “width is “ width() set(2,4,123); / a remote call cout “grid2,4 is “ get(2,4) endl;(4)实现接口,/ Define a C+ implem

44、entation class Grid_i#include ”grid.hh” class Grid_i: public virtual GridBOAImpl short m_height, m_width; long * m_array;public: Grid_i(short h, short w); / Constructor virtual Grid_i(); / Destructor virtual CORBA:Short height(CORBA:Environment&) return m_width; ; virtual CORBA:Short width(CORBA

45、:Environment&) return m_height; virtual void set(CORBA:Short row, CORBA:Short col, CORBA:Long value, CORBA:Environment&) m_arrayrowcol = value; ; virtual CORBA:Long get(CORBA:Short row, C O R B A : : S h o r t c o l , C O R B A : : E n v i r o n m e n t & ) return m_arrayrowcol; ;(5)编写服务器端程序server mainline#include “grid_i.h”#include main() / Create some initial objects (only one in this case) Grid_i myGrid(100,100); try /Give control to the ORB C

温馨提示

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

评论

0/150

提交评论