一、 CORBA及 TAO简介
CORBA是 一个为简化跨平台应用而提出的规范,它独立于网络协议、编程语言和软硬件平台,支持异构的分布式计算环境和不同编程语言间的对象重用。 CORBA可以作为不同平台应用间信息传递的中间件, CORBA通过引入经过充分验证的有效的框架结构和通信手段,最大限度地简化了网络通信相关应用的设计与开发, 使得开发人员可以专注于业务逻辑的实现,而无需关心通信的细节。 CORBA被 称作“软总线”,
以表明它作为数据传 递通道的基本特性。
现在存在众多 CORBA实现,既有商用的 ORBacus、 VisiBroker,也有一些优秀的开源实现,如: TAO、 omniORB、 MICO等。由 于各实现遵从相同的规范,接口基本一致,所以在熟练应用一种 CORBA实 现后,转而使用其它实现时,一般不会存在太大的障碍。
TAO ( The ACE ORB)是美国华盛顿大学的 Douglas C. Schmidt教 授领导开发的一个实时 CORBA平台,它是一个免费的开放源码项目,用 C++语言开发,符合 CORBA2.6规范。
支持语言 : C++
支持平台 : Win32,常见的各种 Unix/Linux,实时操作系统如 VxWorks等等。在所有的 CORBA实现中, TAO支持的平台是最多的。
支持的服务 : Naming、 Event、 Notification、 Security、 Time、 Scheduling、 Logging、 Lifecycle、 Trading、 Concurrency、 Lifecycle、 A/V Streaming、 Load 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 即实例化的 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 端的解包和调用返回的打包 。
· ORB Core 屏蔽底层通信细节的中间件,所有远程访问请求在 Client 和 Server 端的 ORB 间被传递, 使 得上层应用无需关注平台、语言、网络结构等方面的差异。
· Object Adapter ( OA )
OA 是 ORB 与 Servant 之间的桥梁 ,主要负责:
1、 产生对象引用;
2、激活 Servant或反之;
3、将请求分解后传递给对应的 Servant;
4、 与 Skeleton 配合完成对 Servant 提供方法的调用 。
OA与 Servant也 是一对多的关系。
下面的图形进一步说明了 ORB、 OA、 Skeleton、 Servant之间的关系:
三、编译 TAO
TAO可以 从如下地址获得:
http://download.ociweb.com/TAO-1.5a/ACE+TAO-1.5a_with_latest_patches.zip
由于 TAO是以源码包的形式发布的,因此,获得 TAO源码包后,需要在开发人员使用的平台上编译 TAO。
下面将单独来介绍如何在 Windows平台上编译 ACE+TAO+CIAO源码包。