对象请求代理(ORB,Object Request Broker)是对象之间建立客户端/服务端(Client/Server)关係的中间件。使用ORB,客户可以透明地调用一个服务对象上的方法,这个服务对象可以在本地,也可以在通过网路连线的其他机器上。ORB截获这一调用,同时负责查找实现服务的对象并向其传递参数、调用方法并返回最终结果。客户并不知道服务对象位于什幺地方、它的程式语言和作业系统是什幺,也不知道不属于对象接口的其他系统部分。这样,ORB在异构分布环境下为不同机器上的套用提供了互操作性,并无缝地集成了多种对象系统。
对象请求代理(Object Request Broker)是用户提供与其他分散式网路环境中对象通信的接口,是中间件(Middleware)中主要的一类,它在CORBA(Common Object Request Broker Architecture)规範中处于核心地位,定义异构环境下对象透明地传送请求和接收回响的基本机制,是建立对象之间client/server关係的中间件。它的作用在于提供一个通信框架,透明地在异构的分布计算环境中传递对象请求。CORBA规範包括了ORB的所有标準接口。对象请求代理这个结构不需要作为组件单独实现,它由接口定义。任何提供正确接口的ORB实现都是可被接受的。
基本介绍
- 中文名:对象请求代理
- 外文名:Object Request Broker
- 类型:网路通信
- 相关名词:中 间 件
- 套用学科:通信
定义
对象请求处理是在对象间建立客户/伺服器联繫的一种中间件。
中间件概述
中间件是一种独立的系统软体或服务程式,分散式套用软体藉助这种软体在不同的技术之间共享资源。
中间件位于客户机/ 伺服器的作业系统之上,管理计算资源和网路通讯。是连线两个独立应用程式或独立系统的软体。相连线的系统,即使它们具有不同的接口,但通过中间件相互之间仍能交换信息。执行中间件的一个关键途径是信息传递。通过中间件,应用程式可以工作于多平台或 OS 环境,能满足大量套用的需要运行于多种硬体和OS平台支持分布计算,提供跨网路、硬体和OS平台的透明性的套用或服务的互动支持标準的协定支持标準的接口。
功能
对象请求代理(ORB)是对象汇流排,它在CORBA规範中处于核心地位,定义异构环境下对象透明地传送请求和接收回响的基本机制,是建立对象之间client/server关係的中间件。ORB使得对象可以透明地向其他对象发出请求或接受其他对象的回响,这些对象可以位于本地也可以位于远程机器。ORB拦截请求调用,并负责找到可以实现请求的对象、传送参数、调用相应的方法、返回结果等。client对象并不知道同server对象通讯、激活或存储server对象的机制,也不必知道server对象位于何处、它是用何种语言实现的、使用什幺作业系统或其他不属于对象接口的系统成分。
作用
它的作用在于提供一个通信框架,透明地在异构的分布计算环境中传递对象请求。CORBA规範包括了ORB的所有标準接口。1991年推出的CORBA 1.1 定义了接口描述语言OMG IDL和支持Client/Server对象在具体的ORB上进行互操作的API。CORBA 2.0 规範描述的是不同厂商提供的ORB之间的互操作。值得指出的是client和server角色只是用来协调对象之间的相互作用,根据相应的场合,ORB上的对象可以是client,也可以是server,甚至兼有两者。当对象发出一个请求时,它是处于client角色;当它在接收请求时,它就处于server角色。大部分的对象都是既扮演client角色又扮演server角色。另外由于ORB负责对象请求的传送和server的管理,client和server之间并不直接连线,因此,与RPC所支持的单纯的Client/Server结构相比,ORB可以支持更加複杂的结构。
请求代理体系结构
公共对象请求代理体系结构(Common ObjectRequest Broker Architecture,也称通用对象请求代理体系结构),是由OMG组织制订的一种标準的面向对象套用程 序体系规範。或者说 CORBA体系结构是对象管理组织(OMG)为解决分散式处理环境(DCE)中,硬体和软体系统的互连而提出的一种解决方案;OMG组织是一个国际性的非盈利组织,其职责是为套用开发提供一个公共框架,制订工业指南和对象管理规範,加快对象技术的发展。
OMG组织成立后不久就制订了OMA(Object Management Architecture,对象管理体系结构)参考模型,该模型描述了OMG规範所遵循的概念化的基础结构。OMA由对象请求代理ORB、对象服务、公共设施、域接口和套用接口这几个部分组成,其核心部分是对象请求代理ORB(Object Request Broker)。对象服务是为使用和实现对象而提供的基本服务集合;公共设施是向终端用户应用程式提供的一组共享服务接口;域接口是为套用领域服务而提供的接口;套用接口是由开发商提供的产品,用于它们的接口,不属于OMG标準的内容。ORB提供了一种机制,通过这种机制,对象可以透明的发出请求和接收回响。分布的、可以互操作的对象可以利用ORB构造可以互操作的套用。
CORBA标準由物件管理组织(OMG)设立并进行控制,CORBA定议了一系列API,通信协定,和物件/服务信息模型用于使得异质应用程式能够互相操作,这些应用程式用不同的程式语言编写,运行在不同的平台上。CORBA因此为定义明确的物件提供了平台和位置的透明性,这些物件是分散式计算平台的基础。
通常来说,CORBA把用其他语言开发的程式码和关于该程式码能力和如何调用该程式码的资讯包到一个套装(package)中,包成套装的物件则可以在网路上被其他程式(或CORBA物件)调用。 在这个意义上来讲,CORBA可以被看作是一个机器可读的档案档格式,类似于标头档(header),但是具有相当多的资讯。
CORBA使用一种接口定义语言用于刻画物件将呈现出来的接口。CORBA又规定了从IDL到特定程式语言,如C++或Java,实现的映射。这个映射精确的描述了CORBA资料类型是如何被用户端和伺服器端实现的。标準映射的有Ada、C、C++、Smalltalk、Java、以及Python。 还有一些非标準的映射,为Perl和Tcl的映射由这些语言写的ORB实现。
对象请求代理这个结构不需要作为组件单独实现,它由接口定义。任何提供正确接口的ORB实现都是可被接受的。接口可分为以下几大类:
1.对于所有ORB实现均相同的接口;
2. 指定于特定对象类型的操作;
3. 指定于对象实现的特定形式的操作;
不同的ORB可以採用不同的实现策略,加上IDL编译器,库和不同的对象适配器,这一切提供了一系列对客户的服务和对具有不同属性对象的实现。可以存在多个ORB实现,它们有不同的名称和不同的实现方法与调用方法,对于客户而言,客户可以同时访问由不同ORB实现管理的对象,当几个ORB共同工作时,它们必须能够区别它们各自的对象名(也就是对象参考),客户不管区别只管使用。ORB核心是ORB的一部分,它提供了对象的基本命名和请求通信机制。CORBA设计得可以支持不同的对象机制,它是通过在ORB核心上建立ORB来完成这一点的。
一个对象的客户可以访问此对象参考,并对对象进行操作。客户不清楚对象的内部结构,它只知道对象的接口和执行操作所需要的时间和空间等资源。虽然我们可以把客户想像为一个调用对象的进程,但是我们也不要忘记了对象也可以调用另外对象的服务。客户看到的ORB接口和人观念中的接口有差不多,这就为编程提供了帮助。客户不需要对代码进行改变就可以通过ORB实现功能,对象适配器只能由ORB或对象实现调用。
对象实现提供了对象的表现形式。通常实现由另一对象提供或由相应的软体提供,当然也可以自己编程实现。在某些情况下,对象的主要功能是非对象实体产生作用。在CORBA中可以支持对象的不同实现。通常,对象实现不依赖于ORB或客户请求,对象实现可以通过选择对象适配器选择和ORB相关服务来选择接口。
对象参考是需要在ORB内指定的信息,客户和对象实现相应于语言映射有对象参考的一个透明定义,这样就把实现的表示与参考隔离开了。两个ORB实现可能在选择对象参考表示时是不同的。所有的ORB必须提供相对于对象参考一致的语言映射,这使得程式能够独立于ORB对对象参考进行访问。
概述
在开发传统的Client/Server套用时,开发者使用他们自己设计的或一个公认的标準来定义用于设备之间通信的协定。协定的定义依赖于实现语言、网路传输和许多其他因素,而ORB的出现简化了这一过程。使用ORB时,协定是使用接口定义语言(IDL,InterfaceDefinitionLanguage)定义的,而IDL是独立于语言的。并且ORB提供很强的灵活性,它使程式设计师选择最适合的作业系统、执行环境,甚至系统各个组件也可以採用不同的程式语言实现。更重要的是,它允许现有组件的集成。在一个基于ORB的解决方案中,开发者可以使用与创建新对象一样的IDL,并对遗留系统进行建模,他们创建“包装”代码以在标準化的软体汇流排与遗留系统接口之间传递信息。
ORB的结构
图1所示为一个客户端向对象实现(ObjectImplementation)传送一个请求。客户端是操作对象的一个实体,对象实体是实现对象的代码和数据。ORB负责根据一个请求来定位一个对象,安排对象实现準备接受请求,与请求的数据通信。客户端的接口与对象的位置、实现对象的语言及其他不在对象接口反映出来的方面完全无关。
客户端使用动态调用接口(DynamicInvocationInterface)或接口存根(OMGIDLStub)来发出请求。由于某种原因,客户端也可以直接与ORB联繫。对象实现使用对接口进行接口语言映射生成的框架档案(Skeleton)或动态框架Skeleton的方式接受请求。对象实现也可以调用对象适配器(ObjectAdapter)和ORB。
可以用两种方法来定义对象接口。第一种方法是用对象描述语言(OMGInterfaceDefinitionLanguage)来定义接口。该语言根据可能对对象进行的操作和这些操作使用的参数来定义对象类型。第二种方法是把接口放入接口库服务(InterfaceRepositoryService)中;该服务把接口中的元素描述成一个对象。任何能实现ORB的软体中,接口描述语言(可能根据文档的内容而改变)和接口库具有相同的作用。一个客户端要使用对象引用(ObjectReference)来完成请求,它必须知道对象的类型及具体的操作。

图1 通过ORB传递请求
使用桩(Stub)和动态调用接口发出的请求具有相同的语义,信息的接收者不能分辨出该请求是使用哪种方法来传递的。ORB确定适当的实现代码、传递参数,通过接口框架或动态框架把控制传给对象实现,如图2所示。每一个接口和对象适配器使用不同的框架档案。为了完成请求,对象实现可能通过对象适配器使用来自ORB的服务。当完成请求后,控制和输出结果返回给客户端。

图2客户端访问对象实现的过程
公共对象请求代理体系结构(CORBA)
为了解决分散式计算环境(DCE,DistributedComputingEnvironment)中不同硬体设备和软体系统的互联、增强网路间软体的互操作性、解决传统分散式计算模式中的不足等问题,对象管理组织(OMG)提出了公共对象请求代理体系结构(CORBA),以增强软体系统间的互操作能力,使构造灵活的分散式套用系统成为可能。
CORBA规範使得面向对象的软体在分布、异构环境下实现可重用、可移植和互操作。主要包括以下几个方面的特点。
(1)CORBA採用面向对象的软体开发方法,对套用对象实现内部细节的完整封装,保留对象方法的对外接口定义。CORBA使用OMGIDL定义接口,并可以映射到各种程式语言,包括C、C++、Java、python和SmallTalk等。一个接口对应于一个支持继承的类,类的方法在接口中只需声明,不需要说明接口实现方法。以WiMAX为例,OMGIDL的描述如下。所需的接口包括天线控制、加扰、信道编码、交织、数字调製、OFDM、OFDM解调、数字解调、信道解码和解扰。
moduleWiMAX
{
interfaceAntennaControl
{
booleansetRxAntenna(inANTENNAant);
booleansetTxAntenna(inANTENNAant);
};
interfacerandomization
{
…
}
…
…
};
(2)CORBA使用中间件作为事务代理,处理分散式套用中客户端(Client)向服务方的对象访问请求。中间件在CORBA中就是ORB,相当于CORBA中的软汇流排,其结构如图3所示。

图3 ORB软汇流排
客户与服务对象的完全分开,客户不需要了解服务对象的实现过程以及具体位置,只需要传递参数通过ORB调用服务端程式,并通过ORB获得服务端返回值。
CORBA在软体无线电系统中的作用
软体无线电不仅需要硬体模组化,也需要软体模组化。由于缺乏标準的套用级的软体到软体的套用编程接口(API),缺乏对存储器、快取空间与处理资源的量化,软体重用度低,花费大,研製周期长,因而需要把软体按功能分成模组,各模组功能与接口有清楚的定义。软体无线电论坛根据API来进行区分各个模组,採用CORBA来构建整个系统。CORBA技术能够无缝地共享套用数据,它提供了一种软汇流排。利用接口定义语言(Java语言是一个子集),每一个软体包被提供一个信息传输接口到ORB,对象用CORBA接口来实现插拔。
在软体无线电中使用CORBA到底有什幺好处呢?这是一个很有意思的话题,事实上,构建一个软体无线电的体系架构现在有很多种方法,但是这并不意味着对于如何构建软体无线电的体系架构的研究已经很完善。恰恰相反,所有的这些方法或者理论都没有给出一个一般意义上的软体无线电系统的构建方法。比如,现在有的公司已经开发了软体无线电接收机,但是人们很难或者几乎不可能把它所构建的系统搬到另一个软体无线电系统上去(即使最简单的开发一个与之对应的软体发射机),因为系统构建更多是基于处理过程的。而CORBA的引入正是力图解决这个问题,它并不是为了解决某一个具体的问题而提出的,而是一开始就被赋予了构建一般意义上的抽象的软体无线电系统的使命。而研究认为,CORBA能够完成这样的一个使命。首先,CORBA是开放式的、独立于厂商、用于网路上计算机套用的底层结构。任何厂家、计算机、作业系统、程式语言及网路环境下的基于CORBA的套用均使用IIOP标準协定,所以任何基于CORBA的套用均能协同工作。其次,在小型的Client/Server模式的套用系统中使用CORBA,能给系统提供可靠的、标準的底层结构,可以使用CORBA来构建、运行在不同平台上的、用不同程式语言实现的客户端及伺服器端的应用程式。此外,由于CORBA的容错机制的存在,使用CORBA来製作基于对象模型的伺服器端的套用系统时,使每一个对象同时在两个或多个伺服器上运行,当其中的一个出现故障时,系统能自动切换到另一个伺服器。这样既能保证伺服器会拥有很高的稳定性,又能实现系统的负载均衡。考虑到当前的负载及以后可能达到的负载情况,可以选择ORB,它可以在多个伺服器之间实现负载均衡。它是基于OMG可移动对象适配器的,当系统负载较重时(比如运行基于Web的套用),可以更充分地利用系统的硬体资源。