Welcome

首页 / 软件开发 / C++ / CORBA(通用对象请求代理体系结构)

CORBA(通用对象请求代理体系结构)2010-07-14CORBA(通用对象请求代理体系结构)是在当今快速发展的软件与硬件资源的情况下发展出的一种新技术。它可以让分布的应用程序完成通信,无论这种应用程序是什么厂商生产的,只要符合CORBA标准就可以相互通信。CORBA 1.1于1991年由OMG提出,同时还提出了接口定义语言Interface Definition Language,IDL)以及能够让客户/服务器对象在特定的ORB(对象请求代理)实现中进行通信。而1994年提出并被采纳的CORBA 2.0标准才真正实现了不同生产厂商间的互操作性。

ORB是一个在对象间建立客户/服务器联系的中件。使用ORB,客户可以调用服务器的对象或对象中的应用,被调用的对象不要求在同一台机器上。由ORB负责进行通信,同时ORB也负责寻找适于完成这一工作的对象,并在服务器对象完成后返回结果。客户对象完全可以不关心服务器对象的位置,实现它所采用的具体技术和工作的硬件平台,甚至不必关心服务器对象的与服务无关的接口信息,这就大大简化了客户程序的工作。既然能够这么方便,那ORB就需要提供在不同机器间应用程序间的通信,数据转换,并提供多对象系统的无缝连接。

我们通常编制客户/服务器程序时,常常需要自己定义通信协议,而协议的制定往往与硬件和实现的方法有关,而ORB能够简化这一过程。在ORB下,协议通过IDL语言进行定义,保证了一致性,为了照顾到灵活性,ORB允许程序员选择相应的操作系统,执行环境和编程语言。更重要的是它可以使原来的代码通过一定的方式重用。CORBA是面向对象标准的第一步,有了这个标准,软件的实现与工作环境对用户和开发者不再重要,可以把精力更多地放在本地系统的实现与优化上。

下面我们来看看CORBA的一些具体情况。CORBA被设计用来对不同对象系统进行集成,提供灵活的的对象调用与功能实现。下图是客户对象通过ORB调用服务器对象。

对象请求代理结构的大体工作过程就象上面的工作过程一样。客户将需要完成的工作交给ORB,由ORB决定由哪一个对象实例完成这个请求,然后激活这个对象,将完成请求所需要的参数传送给这个激活的对象。除了客户传送参数的接口外,客户不需要了解其它任何信息,这就大大节省了用户的开发精力。在提出请求时,客户可以使用动态调用接口或者OMG IDL句柄。当然用户也可以直接调用一些ORB内部的功能。对象实现通过OMG IDL产生的框架或通过动态框架接收到调用请求,在处理这些请求时,对象实现可以调用对象适配器和ORB。

对象的接口有两种定义方式,可以使用接口定义语言(称为OMG接口定义语言,OMG IDL)进行静态定义,这种语言根据进行的操作和传送的参数定义对象。另一种方法,可以将接口加入接口库服务中,这种服务代表作为对象的接口的组件,允许在运行时对这些成为组件的接口进行访问,这两种方法是等效的。下图表示的是客户使用句柄或动态调用接口进行访问的情况。

客户知道对象的类型和希望进行的操作(一般客户都知道这个,如果连需要进行什么操作都不知道,那就可笑了)客户可以通过访问一个对象的对象参考提出请求。客户可以通过调用句柄函数初始化调用,也可以动态提出请求。动态发出的请求和通过句柄接口发出的静态请求两者在格式是一样的,请求的接收者不可能知道这种请求是动态发出的还是静态发出的。

ORB定位合适的可以实现这个功能的代码,通过IDL框架或动态框架传向对象实现传送参数,并将控制权交给对象实现。框架是指定于接和对象适配器的,在实现请求的过程中,对象实现可以通过对象适配器获取一些ORB服务。在完成请求时,将控制权和输出数据返回给客户。不要被图给迷惑了,对象实现可以根据自己的需要选择需要的对象适配器使用。

接口可以在OMG IDL或在接口库中实现,这种对接口的定义用于产生客户句柄和对象实现框架。对象实现信息在安装时提供,保存于实现库中,在传送请求时可以使用这个信息库中的内容。