基于TAO(The ACE ORB)的CORBA编程

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

CORBAProgrammingwithTAO-1.Start(基本概念)摘要:简要介绍CORBA的基本原理,并解释POA、stub、skeleton、servant等重要概念。一、CORBA及TAO简介CORBA是一个为简化跨平台应用而提出的规范,它独立于网络协议、编程语言和软硬件平台,支持异构的分布式计算环境和不同编程语言间的对象重用。CORBA可以作为不同平台应用间信息传递的中间件,CORBA通过引入经过充分验证的有效的框架结构和通信手段,最大限度地简化了网络通信相关应用的设计与开发,使得我们可以专注于业务逻辑的实现,而无需关心通信的细节。CORBA曾在无数文章中被称作“软总线”,以表明它作为数据传递通道的基本特性。现在存在众多CORBA实现,既有商用的ORBacus、VisiBroker,也有一些优秀的开源实现,如:TAO、omniORB、MICO等。由于各实现遵从相同的规范,接口基本一致,所以在熟练应用一种CORBA实现后,转而使用其它实现时,一般不会存在太大的障碍。TAO(TheACEORB)是美国华盛顿大学的DouglasC.Schmidt教授领导开发的一个实时CORBA平台,它是一个免费的开放源码项目,用C++语言开发,符合CORBA2.6规范。支持语言:C++支持平台:Win32,常见的各种Unix/Linux,实时操作系统如VxWorks等等。在所有的CORBA实现中,TAO支持的平台是最多的。支持的服务:Naming、Event、Notification、Security、Time、Scheduling、Logging、Lifecycle、Trading、Concurrency、Lifecycle、A/VStreaming、Loadbalancing等。本系列文章将以当前最新的ACE-5.5+TAO-1.5+CIAO0.5为例,简要介绍如何应用TAO进行CORBAC++编程,其中部分内容(尤其是编译器配置相关的内容)是Windows平台特有的,但其它大多数信息在各平台上都是相同或者类似的。二、基本概念本文不打算深入介绍CORBA相关的理论基础(已有很多书籍、文章讨论了这些内容),但在进入下一主题前,为了便于后续问题的讨论,这里简要介绍一下CORBA的基本原理,并对几个重要的基本概念进行解释,以便为没有相关知识的朋友扫清障碍。下图是CORBA的基本模型:图中除上面那根灰线(有点浅,看不清的请慢慢找,^_^)以上的两个部分需要我们直接介入外,其他部分基本可以由IDL编译器自动生成或由CORBA实现为我们完成。借助CORBA提供的中间件机制,我们在进行方法调用时,无需考虑被调用对象所在的具体位置,而是像调用一个本地模块的方法一样“直接”与其通信(因此,有些应用中,CORBA也被用于本地进程间通信,以降低各模块间的耦合度,同时也便于系统结构的调整)。上图主要包括以下几个组成部分:Client即客户程序,Client通过调用服务程序提供的接口实现特定功能。ObjectCORBAObject是一个语言无关的虚拟的实体,它可以由ORB定位,并可被客户程序请求调用,它最终由某种语言来具体实现,从而成为应用程序的一部分。Servant即实例化的Object,Servant是组成服务程序,具体为Client提供服务的某个运行中(且被注册到OA)的C++/Java(或其他语言)对象。Object与Servant是一对多的关系,一个Object可以被实例化多次,注册到一个或多个OA中为一个或多个Client提供服务,各Servant对应不同的IOR(多个IOR具有相同的Type信息,但唯一标识不同),并且,每个Servant都可以由IOR唯一确定,对于持久Object,该IOR在两次启动同一系统时不会发生变化,除非服务程序所在主机IP或配置信息等发生改变,而对于非持久Object,该IOR在两次启动同一服务程序时,总是变化的(因为其中往往包含一个时间戳)。Stub即桩,或称存根,Stub负责“假扮”Servant为Client提供一个本地化的接口,并负责与ORB进行交互,完成调用请求的列集(marshaling,即打包)与散集(unmarshaling,即解包)。列集的主要作用是按双方ORB可以识别的方式对需要传递的数据进行格式化,而散集则将收到的数据中还原成上层应用可以理解的内存数据形式,对于远端指针,散集时ORB还负责分配相应的内存空间,并将指针的内容复制到本地内存空间以为本地应用提供一个远端指针的镜像,从而保证本地应用对远端指针的“透明”访问。Skeleton与Stub对应,负责调用参数在Server端的解包和调用返回的打包。ORBCore屏蔽底层通信细节的中间件,所有远程访问请求在Client和Server端的ORB间被传递,使得上层应用无需关注平台、语言、网络结构等方面的差异。ObjectAdapter(OA)OA是ORB与Servant之间的桥梁,主要负责:1、产生对象引用;2、激活Servant或反之;3、将请求分解后传递给对应的Servant;4、与Skeleton配合完成对Servant提供方法的调用。OA与Servant也是一对多的关系。下面的图形进一步说明了ORB、OA、Skeleton、Servant之间的关系:关于OA的更为详细的信息,详见参考1。三、编译TAOTAO可以从如下地址获得:由于TAO是以源码包的形式发布的,因此,获得TAO源码包后,需要自行在所使用的平台上编译TAO。由于下一系列《体验CORBA对象模型CCM》同样涉及CIAO的编译问题,因此下面将单独用一节内容来介绍如何在Windows平台上编译ACE+TAO+CIAO源码包。参考:1、IrfanPyarali,DouglasC.Schmidt.AnOverviewoftheCORBAPortableObjectAdapter.~schmidt/PDF/POA.pdf2、MichiHenning,SteveVinoski.AdvancedCORBAProgrammingwithC++.Addison-Wesley,1999.3、Mentoya.TAO使用指南.(编译ACE/TAO/CIAO)摘要:简要介绍如何在Windows平台上编译ACE/TAO/CIAO,及编译过程中需注意的问题。正文:随着ACE/TAO/CIAO研究者研究的不断深入,整个平台变得越来越庞大,涉及的工程及目录数目也越来越多,下面简要介绍一下如何在Windows平台上编译ACE/TAO/CIAO,其过程在其它平台上是类似的。一、目录结构在开始之前,先简要介绍一下整个产品的目录结构。ACE(AdaptiveCommunicationEnvironment)是整个ACE/TAO/CIAO体系的基础,由操作系统适配层、对并发/进程间通信/虚拟内存管理等的OO封装、ACE框架、网络服务组件等几个部分组成;而TAO(TheACEORB)则是在ACE基础上建立起来的一个CORBAORB实现;CIAO(ComponentIntegratedACEORB)则是在TAO基础上的一个CORBAComponentModel实现,同时CIAO也是目前相对比较成熟的一个CCM实现。正是由于三者之间的上述关系,在目录结构上整个源码包也采用了类似下面的结构:ACE_ROOT├─ace├─docs├─...├─TAO│├─tao│├─docs│├─orbsvcs(TAO实现的众多CORBA服务被放置在这个目录下)│├─...│├─CIAO││├─ciao││├─docs││├─DAnCE││├─RACE││├─...三个产品的帮助文档,可以在相应节点下的docs目录中找到,其中除了对相应产品特定模块或服务的说明外,还包括一些不错的Tutorial,对于我们理解相应产品很有帮助(ACE/TAO/CIAO的较完整的文档是收费的,这些随源码发布的文档虽然少,但仍颇为有用)。二、关于编译器可以使用VC6/7.1/8来编译ACE/TAO/CIAO,不推荐使用VC7,但由于VC6的ProjectSettings不支持环境变量,会对我们使用CIAO带来一些麻烦(如需手动修改自动生成的工程文件),因此,笔者推荐读者使用VC8,即VisualC++2005来进行编译(注:现在VC++2005Express可以从MS的网站上免费获得,但若安装该版本的话,需按照的指示安装SDK并进行相关设置)。VC8在调试器的设计上有了很大改进,同时对C++标准的支持也有了很大进步(但也变得非常耗资源),因此,下面的讨论将基于ACE-5.5+TAO-1.5+CIAO-0.5+VC2005Express,不保证在其它ACE或编译器版本下完全一致。三、基本设置好啦,废话说完了,重新回到我们的主题。首先,设置好如下环境变量:ACE_ROOTTAO_ROOTCIAO_ROOT分别指向ACE根目录,TAO根目录(即%ACE_ROOT%/TAO),CIAO根目录(即%TAO_ROOT%/CIAO)。在%ACE_ROOT%/ace目录下添加一个文件config.h,并在其中添加如下内容:/*-*-C++-*-*///=============================================================================/***@fileconfig.h**///=============================================================================#defineACE_HAS_STANDARD_CPP_LIBRARY1#includeace\config-win32.h若是在其它平台上进行编译,还需要添加文件:$ACE_ROOT/include/makeinclude/platform_macros.GNU具体方法见ACEInstallationGuide。此外,为了便于今后使用ACE/TAO/CIAO,应当将%ACE_ROOT%/bin(部分通用工具的输出目录)%ACE_ROOT%/lib(所有.lib、.dll文件的输出目录)添加到PATH环境变量中。并且,需打开VC8,选择Tools-Options-ProjectsandSolutions-VC++Directories,添加如下编译器环境变量:Executablefiles:$(ACE_ROOT)\bin$(CIAO_ROOT)\binIncludefiles:$(ACE_ROOT)$(TAO_ROOT)$(TAO_ROOT)\orbsvcs$(CIAO_ROOT)$(CIAO_ROOT)\ciaoLibraryfiles:$(ACE_ROOT)\lib四、开始编译现在可以开始编译了,但是,在笔者的Win2000中编译ACE5.5/TAO1.5/CIAO0.5时遇到的第一个问题就是:源码包中的VCWorkspace/Solution打开之后一片空白,一个工程也没有。(上一版本没有这个问题。最终通过比较源码包中的.sln文件和通过下面的方法得到的.sln文件,发现其实是由于文件是Unix格式造成的)几经周折,终于想到了一个办法:自己运行mwc.pl重新生成工程文件。要运行mwc.pl自然需要安装Perl,安装过程略。下面简单说说mwc的工作原理:mwc.pl根据参数中指定的.mwc文件的内容到相应目录下查找.mpc

1 / 44
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功