Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2084562
  • 博文数量: 414
  • 博客积分: 10312
  • 博客等级: 上将
  • 技术积分: 4921
  • 用 户 组: 普通用户
  • 注册时间: 2007-10-31 01:49
文章分类

全部博文(414)

文章存档

2011年(1)

2010年(29)

2009年(82)

2008年(301)

2007年(1)

分类: C/C++

2008-10-09 14:50:19

一、CORBATAO简介

     CORBA是一个为简化跨平台应用而提出的规范,它独立于网络协议、编程语言和软硬件平台,支持异构的分布式计算环境和不同编程语言间的对象重用。CORBA可以作为不同平台应用间信息传递的中间件,CORBA通过引入经过充分验证的有效的框架结构和通信手段,最大限度地简化了网络通信相关应用的设计与开发,使得开发人员可以专注于业务逻辑的实现,而无需关心通信的细节。CORBA被称作“软总线”,

以表明它作为数据传递通道的基本特性。

    现在存在众多CORBA实现,既有商用的ORBacusVisiBroker,也有一些优秀的开源实现,如:TAOomniORBMICO等。由于各实现遵从相同的规范,接口基本一致,所以在熟练应用一种CORBA实现后,转而使用其它实现时,一般不会存在太大的障碍。

 

       TAOThe ACE ORB)是美国华盛顿大学的Douglas C. Schmidt教授领导开发的一个实时CORBA平台,它是一个免费的开放源码项目,用C++语言开发,符合CORBA2.6规范。

    支持语言:       C++

    支持平台:       Win32,常见的各种Unix/Linux,实时操作系统如VxWorks等等。在所有的CORBA实现中,TAO支持的平台是最多的。

    支持的服务:    NamingEventNotificationSecurityTimeSchedulingLoggingLifecycleTradingConcurrencyLifecycleA/V StreamingLoad balancing等。

    这里将以当前最新的ACE-5.5+TAO-1.5+CIAO0.5为例,简要介绍如何应用TAO进行CORBA C++编程,其中部分内容(尤其是编译器配置相关的内容)是Windows平台特有的,但

其它大多数信息在各平台上都是相同或者类似的。

二、基本概念

      这里不打算深入介绍CORBA相关的理论基础(已有很多书籍、文章讨论了这些内容),但在进入下一主题前,为了便于后续问题的讨论,这里简要介绍一下CORBA的基本原理,

并对几个重要的基本概念进行解释,以便在没有相关知识的情况下扫清障。

      下图是CORBA的基本模型:

    图中除上面那根灰线(有点浅,看不清的请慢慢找)以上的两个部分需要开发人员直接介入外,其他部分基本可以由IDL编译器自动生成或由CORBA实现完成。借助CORBA提供的中间件机制,

在进行方法调用时,无需考虑被调用对象所在的具体位置,而是像调用一个本地模块的方法一样“直接”与其通信(因此,有些应用中,CORBA也被用于本地进程间通信,以降低各模块间的耦合

度,同时也便于系统结构的调整)。

上图主要包括以下几个组成部分:

·        Client        即客户程序,Client通过调用服务程序提供的接口实现特定功能。

·        Object       CORBA Object是一个语言无关的虚拟的实体,它可以由ORB定位,并可被客户程序请求调用,它最终由某种语言来具体实现,从而成为应用程序的一部分。

·        Servant     即实例化的ObjectServant是组成服务程序,具体为Client提供服务的某个运行中(且被注册到OA)的C++/Java(或其他语言)对象。ObjectServant是一对多的关系,

                 一个Object可以被实例化多次,注册到一个或多个OA中为一个或多个Client提供服务,各Servant对应不同的IOR多个IOR具有相同的Type信息,但唯一标识不同),并且,

                 每个Servant都可以由IOR唯一确定,对于持久Object,该IOR在两次启动同一系统时不会发生变化,除非服务程序所在主机IP或配置信息等发生改变,而对于非持久Object

                 该IOR在两次启动同一服务程序时,总是变化的(因为其中往往包含一个时间戳)。

·        Stub          即桩,或称存根,Stub负责“假扮”ServantClient提供一个本地化的接口,并负责与ORB进行交互,完成调用请求的列集(marshaling,即打包)与散集(unmarshaling,即解包)。

                 列集的主要作用是按双方ORB可以识别的方式对需要传递的数据进行格式化,而散集则将收到的数据中还原成上层应用可以理解的内存数据形式,对于远端指针,散集时ORB还负责分配相

                 应的内存空间,并将指针的内容复制到本地内存空间以为本地应用提供一个远端指针的镜像,从而保证本地应用对远端指针的“透明”访问。

·        Skeleton    Stub对应,负责调用参数在Server端的解包和调用返回的打包

·        ORB Core   屏蔽底层通信细节的中间件,所有远程访问请求在ClientServer端的ORB间被传递,使得上层应用无需关注平台、语言、网络结构等方面的差异。

·        Object AdapterOA  

                        OAORBServant之间的桥梁,主要负责:

                    1、产生对象引用;

                    2、激活Servant或反之;

                    3、将请求分解后传递给对应的Servant

                    4、Skeleton配合完成对Servant提供方法的调用

                              OAServant也是一对多的关系。

      下面的图形进一步说明了ORBOASkeletonServant之间的关系:

三、编译TAO

    TAO可以从如下地址获得:

   由于TAO是以源码包的形式发布的,因此,获得TAO源码包后,需要在开发人员使用的平台上编译TAO

   下面将单独来介绍如何在Windows平台上编译ACE+TAO+CIAO源码包。


阅读(1599) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~