首页 理论教育分布式数据库技术之CORBA

分布式数据库技术之CORBA

【摘要】:自1995年以来,基于CORBA软件的企业级应用发展迅猛。CORBA是OMG随着硬件和软件产品的快速增长,针对互操作性的需要而提出的。CORBA 2.0于1994年12月被提出,它定义了不同供应商的ORB怎样才能实现真正的互操作性。图12.4OMA体系结构OMA体系结构主要包括以下几部分。ORB用于发现与该请求对应的对象实现,对所要求的所有机制做出响应,准备好对象实现以响应请求,并完成请求所需要的数据通信。由图12.5可知,客户端通过ORB向对象实现发送请求。

OMG[2](object management group,对象管理组)是一个非营利性国际组织,OMG所制定的分布式对象计算标准规范包括CORBA/IIOP、对象服务、公共实施和领域接口规范等。遵照这些规范开发出来的分布计算软件环境几乎可以在所有的主流硬件平台和操作系统上运行。自1995年以来,基于CORBA软件的企业级应用发展迅猛。

CORBA是OMG随着硬件和软件产品的快速增长,针对互操作性的需要而提出的。简单来说,CORBA允许自己的应用程序与对方的应用程序交流,不管对方在哪儿或由谁设计。CORBA 1.1于1991年由OMG推荐提出,并且定义了它的接口定义语言(IDL)和应用程序编程接口(API),使客户/服务器对象在一个对象请求代理(object request broker,ORB)的特定实现范围内可以交互。CORBA 2.0于1994年12月被提出,它定义了不同供应商的ORB怎样才能实现真正的互操作性。

ORB是在客户/服务器之间建立对象关系的中间件(middleware)。使用ORB,用户能透明地在服务器对象上调用一种方法,这个对象既能坐落在调用它的同一台机器上,也可以跨越一个网络。ORB会拦截调用,并且寻找能实现请求的某一个对象,传递参数给它,调用它的方法,最后返回结果。用户不必知道对象究竟被定位在哪儿、使用哪种程序语言、使用哪个操作系统,或如非对象接口等其他系统方面的任何东西。这样,ORB提供在不同的机器上由不同或相同种类组成的分布式环境应用上的互操作性和无缝互联。

在使用典型的客户/服务器应用程序的时候,开发者们使用自己设计的或者公认的标准来定义设备之间互用的协议。这类协议的定义取决于其实现语言、网络传输和其他一系列因素。而使用ORB则简化了这个过程。在ORB中,协议由一个与实现语言无关的规格说明(IDL)的应用程序接口来定义。ORB提供灵活性,让程序员选择最适当的操作系统、执行环境,甚至是程序语言可用于构造系统的每个部件。更重要的是,ORB允许现存部件的集成化。在基于ORB的解决方案中,开发者可以使用与原来一样的IDL来模型化遗留部件,用于创建新的代码,然后写“约束(wrapper)”代码,实现标准化总线和遗留接口之间的翻译。

使用CORBA,用户可以透明地进行信息的存取,不必知道它们在什么软件或硬件平台上工作,或在哪一家企业的网络上。

1990年底,OMG首次推出对象管理结构(object management architecture,OMA),给出了OMG所定义的组件的分类,其体系结构如图12.4所示。

图12.4 OMA体系结构

OMA体系结构主要包括以下几部分。

●对象请求代理(object request broker,ORB):图12.4中的中间部分,某种程度上可以把它看成是一根软件总线,是实现交换和互操作的核心。

●应用接口(application interfaces)。

●域接口(domain interfaces)。

●公共设施(common facilities):定义可直接为业务对象服务的水平与垂直应用框架

●对象服务(object service):定义对象框架。(www.chuimin.cn)

由图12.4可知,对象请求代理结构形成了交互和通信的核心,所以把它称为软总线。

下面来看看对象请求代理的结构。图12.5表明客户端如何将请求发送给对象。这里,客户端是一个实体,它的目的就是在对象上施行操作。而对象操作则包括实现对象的代码和数据。ORB用于发现与该请求对应的对象实现,对所要求的所有机制做出响应,准备好对象实现以响应请求,并完成请求所需要的数据通信。对客户而言,对象在哪、对象究竟是用什么程序设计语言实现的,或者还有哪些特征没有在对象接口处反映都无关紧要。

由图12.5可知,客户端通过ORB向对象实现(object implementation)发送请求。那么,有哪些方式可给客户端发送请求呢?

如图12.6所示,要发送出请求,客户可以使用动态调用接口(dynamic invocation interface,独立于目标对象接口的接口)或者OMG IDL桩(和目标对象接口有依赖关系的特定接口)。当然,客户端也可以直接与ORB交互以获得其他功能。

图12.5 客户端如何将请求发送给对象

图12.6 对象请求代理接口的结构

对象实现作为向上调用(up-call)的接口接收客户的请求,这可以通过OMG IDL生成的梗概(OMG IDL generated skeleton)或者通过一个动态梗概(dynamic skeleton)来完成。对象实现可以在处理请求时(或者以后某个时候)调用对象适配器(object adapter)和ORB。

可从以下两个方面来实现对象接口的定义:一是采用接口定义语言(IDL)进行静态方式的定义。IDL按照可以施加在对象上的操作和这些操作上的参数来定义对象的类型。此外,接口上也可以添加接口库(interface repository)服务,这种服务像对象一样,表示接口的成分,允许对这些成分动态访问。在任意一个ORB实现中,ODL和接口库都有相同的表达能力。二是客户端通过访问对象引用(object reference)和了解对象类型及所希望施行的操作类型来完成请求。客户端通过调用指定该对象的桩例程(stub routines)或者动态构造请求来启动请求。

动态调用请求和使用桩接口都满足相同的请求语义,而信息的接收方不被告知请求是如何调用的。

ORB会找出合适的安装启用代码、传输参数,然后通过IDL梗概将控制传递给对象实现。对于接口和对象适配器而言,梗概是特定的。当施行请求时,对象实现可以通过对象适配器从ORB获得某些服务。请求完成时,控制并将输出值返回给客户端。

对象实现可以采用与对象适配器相同的方式。