CORBA Programming with TAO - 1.Start(基本概念)
摘要:
简要介绍CORBA的基本原理,并解释POA、stub、skeleton、servant等重要概念。
一、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的基本模型:
<shapetype id="_x0000_t75" stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600"><stroke joinstyle="miter"></stroke><formulas><f eqn="if lineDrawn pixelLineWidth 0"></f><f eqn="sum @0 1 0"></f><f eqn="sum 0 0 @1"></f><f eqn="prod @2 1 2"></f><f eqn="prod @3 21600 pixelWidth"></f><f eqn="prod @3 21600 pixelHeight"></f><f eqn="sum @0 0 1"></f><f eqn="prod @6 1 2"></f><f eqn="prod @7 21600 pixelWidth"></f><f eqn="sum @8 21600 0"></f><f eqn="prod @7 21600 pixelHeight"></f><f eqn="sum @10 21600 0"></f></formulas><path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></path><lock aspectratio="t" v:ext="edit"></lock></shapetype>图中除上面那根灰线(有点浅,看不清的请慢慢找,^_^)以上的两个部分需要我们直接介入外,其他部分基本可以由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之间的关系:
关于OA的更为详细的信息,详见参考1。
三、编译TAO
TAO可以从如下地址获得:
http://deuce.doc.wustl.edu/Download.html
由于TAO是以源码包的形式发布的,因此,获得TAO源码包后,需要自行在所使用的平台上编译TAO。由于下一系列《体验CORBA对象模型CCM》同样涉及CIAO的编译问题,因此下面将单独用一节内容来介绍如何在Windows平台上编译ACE+TAO+CIAO源码包。
参考:
1、Irfan Pyarali, Douglas C. Schmidt. An Overview of the CORBA Portable Object Adapter. http://www.cs.wustl.edu/~schmidt/PDF/POA.pdf
2、Michi Henning, Steve Vinoski. Advanced CORBA Programming with C++. Addison-Wesley, 1999.
3、Mentoya. TAO使用指南. http://www.huihoo.com/ace_tao/tao_guide.html
相关推荐
CORBA Programming with TAO,整理自“大卫的思维空间”,内容简洁,快速入门。格式制作为CHM,方便阅读。
《CORBA Programming with TAO》是一篇专门为CORBA编程初学者准备的文章,它详细介绍了如何使用TAO(The ACE ORB)这一实现CORBA标准的开源ORB(对象请求代理)。TAO是ACE(Adaptive Communication Environment)...
8. **JEP 320: Remove the Java EE and CORBA Modules**:移除了不再维护的Java EE和CORBA模块,使JDK更加精简。 9. **其他改进**:还包括性能优化、错误修复、新的API添加等。 Red Hat是一个知名的Linux发行版和...
《Glassfish-CORBA-Source-3.1.0-b021与Fedora数据传输对象解析》 Glassfish-CORBA-Source-3.1.0-b021.zip是一个压缩包,其中包含了Glassfish服务器的一个特定版本的CORBA(Common Object Request Broker ...
8. **JEP 320:移除Java EE和Corba模块**:为了简化JDK,不再包含Java EE和Corba相关的模块,但这并不意味着Java不再支持企业级开发,而是鼓励使用更现代的微服务架构。 9. **JEP 321:HTTP/2和TLS的HTTP/2客户端**...
axis2-corba-1.5.4.jar axis2-fastinfoset-1.5.4.jar axis2-java2wsdl-1.5.4.jar axis2-jaxbri-1.5.4.jar axis2-jaxws-1.5.4.jar axis2-jibx-1.5.4.jar axis2-json-1.5.4.jar axis2-kernel-1.5.4.jar axis2-metadata...
./configure --prefix=/path/to/install --with-tao --with-log-support ``` 2. 编译: 使用`make`命令开始编译过程,这可能会花费一些时间: ```bash make -j 4 ``` `-j 4`参数表示使用4个线程并行编译,...
axis2-corba-1.5.4.jar axis2-fastinfoset-1.5.4.jar axis2-java2wsdl-1.5.4.jar axis2-jaxbri-1.5.4.jar axis2-jaxws-1.5.4.jar axis2-jibx-1.5.4.jar axis2-json-1.5.4.jar axis2-kernel-1.5.4.jar axis2-metadata...
1. **模块系统(Project Jigsaw)**: JDK 11引入了JEP 261,实现了Java平台模块系统(JPMS)。该系统通过模块化Java的类路径,增强了可读性、可维护性和安全性。 2. **HTTP客户端API(JEP 321)**: JDK 11包含了新...
axis2-corba-1.7.4.jar axis2-fastinfoset-1.7.4.jar axis2-java2wsdl-1.7.4.jar axis2-jaxbri-1.7.4.jar axis2-jaxws-1.7.4.jar axis2-jibx-1.7.4.jar axis2-json-1.7.4.jar axis2-kernel-1.7.4.jar axis2-metadata...
8. **JEP 320:移除Java EE和Corba模块**:这些模块不再包含在JDK中,以减少JDK的体积并提高性能。 9. **JEP 318:缩短GPL Class-Path Exception**:Oracle JDK的GPL Class-Path Exception的期限被缩短,意味着使用...
1. **Java版本**: JDK 11.0.22是Oracle公司发布的Java 11的一个更新版本,Java 11是长期支持(LTS)版本,意味着它将获得更长时间的安全性和性能更新。此版本修复了一些已知问题,提升了整体稳定性和安全性。 2. **...
Ice,全称是“Instantiation's Corba eXtension”,是由Instantiation公司开发的一种轻量级、高性能的分布式对象计算框架,它提供了类似CORBA的功能,但更简单易用且效率更高。 在压缩包内的文件名称列表中,我们...
6. **删除Java EE和Corba模块(JEP 320)**:移除了不再维护的Java EE和Corba相关模块,简化了JDK的体积和维护负担。 7. **其他改进**:包括对JVM的优化,如增强G1垃圾收集器的性能,以及对Java内存模型和并发API的...
在“CORBA-sample-of-java.rar_corba”这个压缩包中,包含了一个基于Java实现的CORBA实例,以及一个名为“基于Java的CORBA实验参考.mht”的文档,用于指导如何编译和运行这个程序。 **CORBA的核心概念** 1. **ORB...
JacORB,全称为 Java Object Request Broker,是一个开源的、完全符合CORBA(Common Object Request Broker Architecture)规范的Java ORB(Object Request Broker)。它允许不同计算机上的对象相互通信,仿佛它们都...
1. **Ant的基本概念** - **构建工具**:Ant是一个基于Java的构建工具,与Make类似,但设计更为灵活,适合Java项目。 - **XML配置**:Ant通过XML文件定义构建过程,其中包含了一系列的任务(tasks)和目标(targets...
官方版本,亲测可用
《Advanced CORBA Programming with C++》是一本专为高级CORBA编程者设计的书籍,由Addison-Wesley出版社出版。这本书深入探讨了CORBA(Common Object Request Broker Architecture,公共对象请求代理架构)的高级...
Advanced CORBA® Programming with C++ provides designers and developers with the tools required to understand CORBA technology at the architectural, design, and source code levels. This book offers ...