对象请求代理(ORB)详细说明

互联网 | 编辑: 邹震 2008-09-11 15:30:00转载

ORB是一个中间件(middleware),它可以建立对象之间的client/server关系。通过ORB,一个client可以透明的引用同一台机器上或网络上的一个server对象的方法。ORB解释该调用并负责查找一个实现该请求的对象,找到后,把参数传给该对象,调用它的方法,最后返回结果。client并不清楚该对象的位置,它的编程语言,它的操作系统以及其它不是对象接口的系统信息。 ORB能实现分布环境中位于不同机器上的应用之间的互操作以及多对象系统之间的无缝连接。

在传统的client/server)应用中,开发者使用自己设计的标准或通用标准来定义设备之间的协议。协议定义与实现的语言、网络传输及其它因素有关。ORB简化了这一过程,它使用IDL来定义应用接口之间的协议。ORB允许程序员选择通用操作系统,运行环境和编程语言。更重要的是,它能集成现存元素。

ORB结构
Client是一个想对对象进行操作的一个实体,对象实体是实现对象的代码和数据。ORB负责根据一个请求来定位一个对象,安排对象实现准备接受请求,与请求的数据通讯。Client的接口与对象的位置完全,实现对象的语言及其它不在对象接口反映出来的方面等无关。
Clinet使用Dynamic Invocation interface (与目标对象的接口无关)或OMG IDL stub (与目标对象接口有关的stub)来发出请求。由于某种原因,Client也可以直接与ORB联系。对象实现使用OMG IDL生成的skeleton或动态 skeleton以向上传送(up-call)的方式接受请求。对象实现也可以调用Object Adapter和ORB。可以用两种方式来定义对象接口:一是用OMG Interface Definition Language (OMG IDL)来定义接口。该语言根据可能对对象进行的操作和这些操作使用的参数来定义对象类型。第二种方法是,把接口(interface)放入Interface Repository service中; 该服务把接口中的元素描述成一个对象。任何能实现ORB的软件中,Interface Definition Language (可能根据文档的内容而改变)和Interface Repository具有相同的作用。一个client要使用Object Reference完成请求,它必须知道对象的类型的及具体的操作。Client初始化请求有两种方法,一是通过调用目标对象的stub routines,二是动态的创造请求。
论使用Stub还是Dynamic Invocation Interface来发出请求具有相同的语义,信息的接收者不能分辨出该请求是使用哪种方法来传递的。ORB确定适当的实现代码,传递参数,通过IDL skeleton或dynamic skeleton 把控制传给Object Implementation。每一个接口和object adapter 使用不同的Skeletons。为了完成请求,object implementation 可能通过Object Adapter 使用来自ORB的服务。当完成请求后,控制和输出结果返回给client。
Object Implementation选择使用何种Object Adapter。它是根据Object Implementation 需要服务的种类来确定的。
在安装时把object implementation 信息放入Implementation Repository中,以备请求使用。
ORB结构中的主要构件
1) Object Implementation(对象实现): 它定义了实现一个CORBA IDL接口的操作。它可以用各种语言来写,如C, C++, Java, Smalltalk和Ada。
2) Client(客户): 这是一个程序实体,它调用了某一个对象实现中操作。对调用这来讲,访问远程对象server应该是透明的。它应该和调用对象中的方法一样简单,如,obj->op(args)。
Client只能根据对象的接口了解对象的逻辑结构,虽然,我们一般都把client看作是一个程序或一个进程,但是,知道一个client都是某一个对象有关的。例如,一个对象的实现可能是其他对象的client。

Client通过语言映射(language mapping)来使用对象和ORB 接口。当这种映射关系改变时,不需要改变Client。Client不需要了解对象的实现方式,对象适配器及ORB。

3) Object Request Broker(ORB):

ORB提供了一种机制,能实现client请求与目标对象实现之间的透明通信。它使得client请求就象一个本地过程调用一样。当一个client引用一个操作,ORB负责找到对象实现,如果需要则透明的激活它,然后把该请求递交给该对象,最后返回应答给调用者。实现时,可以把ORB不作为单个成分,但它只能由它的接口来定义。任何ORB实现方式提供的接口都是可以接受的。可以把接口中的操作分为三类:

1. 对于所有的ORB实现都一样的操作
2. 特定类型对象的操作
3. 与对象实现种特定类别有关的操作

不同的ORB有不同的实现方式,但都包括有:IDL 编译器, 仓库(repositories),各种Object Adapters,给client提供各种服务集,具有不同属性的对象实现等。

现在有各种不同的ORB实现。一个client可以同时访问两个由不同ORB实现管理的对象引用(object references)当这两个ORB需要一起工作时,它们能区分出各自的对象引用。Client不需要对此负责。ORB Core是ORB的一个组成部分,它提供对象的基本表示和与请求的通信。

有四种不同类型的ORB:

1.Client- and Implementation-resident ORB
2.Server-based ORB
3.System-based ORB
4.Library-based ORB

ORB Interface:
一个ORB是一个逻辑实体(logical entity),它可以用各种方法实现(如一个或多个过程,或一个libraries集合)。为了减轻编写程序的困难,CORBA规范定义了一个抽象的接口。该接口提供各种帮助函数。

CORBA IDL stubs and skeletons:
它相当于client、server应用程序和ORB之间的“胶水”。由CORBA IDL编译器自动实现CORBA IDL定义与目标编程语言之间的转换。

使用编译器可以减少client stub和server skeletons之间的潜在矛盾。

Dynamic Invocation Interface(DII):
该接口允许client直接调用ORB所提供得最底层的请求机制。应用程序使用DII动态地把请求传给对象而不需要IDL接口(包括特定stub)。与IDL stub(它只允许RPC模式的请求)不同,DII也允许clients使用无块的延迟同步调用(non-blocking deferred synchronous)(发送操作是独立的)和单向调用(send-only)。

Dynamic Skeleton Interface(DSI):
与client端的DII类似的,位于server端的接口。DSI允许ORB把请求发送给对象实现,该对象实现不包含编译时所需要的类型。发出请求的client不知道该实现是使用指定类型的IDL skeletons 还是使用动态的skeletons。

Object Adapter:
它帮助ORB把请求传给对象并激活该对象。更重要的是一个object adapter总是与一个对象实现(object implementations)联系的。Object adapter可以被定义来支持特定的对象实现类型(如OODB object adapters用于持续对象(persistence)而library object adapters 用于非远程对象)。
它的作用有:

(1)产生和解释对象引用
(2)Method调用
(3)相互作用的安全性
(4)对象和激活实现及撤销实现
(5)把对象引用映射到相应的对象实现
(6)注册对象实现
互操作

ORB 的互操作性提供了种易于理解的、方便的途径来支持网络中的对象,这些对象由多样的,不同种类的(与CORBA 兼容的)ORB管理。由于CORBA中的元素能以很多方式结合在一起以满足各种不同的需要,因此取得“interORBability”的方法很方便。

1) 支持互操作的元素

能支持互操作的元素有::
1. ORB 互操作结构
2. Inter-ORB 桥支持(bridge support)
3. General and Internet inter-ORB Protocols (GIOPs and IIOPs)
而且,该结构还支持environment-specific inter-ORB protocols (ESIOP),它能优化特定领域如DCE)

2) ORB 互操作结构

该结构引入了ORB域中immediate and mediated bridging(直接桥接和间接桥接)这两个概念。IIOP是广域网桥接的基础。而inter-ORB 桥接既能用于直接桥接,也能用于“半桥接”,使用半桥接能搭建用于间接桥接。使用这些桥接技术,ORB能互操作,而不需要知道彼此的实现细节,如,使用何种特殊的IPC或协议(如ESIOP)来实现CORBA规范。

使用能用IIOP通讯的“半桥接”, 两个或多个ORB能相互桥接在一起。这种方法既能用于单机ORB,也能用于网络ORB如ESIOP。IIOP也能用于实现ORB中的内部消息机制。

3) Inter-ORB Bridge Support

互操作结构明确指出ORB中不同域的作用,这些域包括对象引用域(object reference domain),类型域(type domain),安全域(safety domain)(如the scope of a Principal identifier), 事物域(transaction domain)等等。

当两个ORB位于同一个域中,它们能直接通讯,多数情况下,这是一个很好的方法。但由于各个机构需要建造各自控制域,因此,这种方法不常使用。当需要的信息离开它的域时,就必须使用桥接来传递信息。桥接的作用是确保信息能完整的从一个ORB映射到另一个ORB。inter-ORB 桥接支持也能提供与非CORBA系统(如Microsoft’s Component Object Model (COM))之间的互操作。

4) General Inter-ORB Protocol (GIOP)

General Inter-ORB Protocol (GIOP) 元件提供了一个标准传输语法(低层数据表示方法)和ORB之间通信的信息格式集。GIOP只能用在ORB与ORB之间,而且,只能在符合理想条件的面向连接传输协议中使用。它不需要使用更高一层的RPC机制。这个协议是简单的(尽可能简单,但不是简单化),可升级的,使用方便。它被设计为可移动的、高效能的表现、较少依靠其它的低层传输协议。当然,由于不同传输使用不同版本的GIOP,它们可能不能直接协作工作,但它能很容易的连接网络域。

5) Internet Inter-ORB Protocol (IIOP)

Internet Inter-ORB Protocol (IIOP) 元件指出如何通过TCP/IP连接交换GIOP信息。IIOP为Internet提供了一个标准的协作工作协议,它使兼容的ORB能基于现在流行的协议和产品进行“out of the box”方式的协作工作。它也能被用于两个半桥(half-bridges )之间的协议。该协议能用于任何ORB与IP(Internet Protocol)域之间的协作工作,除非ORB选择了特殊的协议。这时,它是TCP/IP环境下基本的inter-ORB 协议,最普遍的传输层。

IIOP与GIOP的关系就象特特殊语言与OMG IDL之间的关系;GIOP能被映射到不同层,它能指定协议。就象IDL不能见招完整的程序一样,GIOP 本身也不能提供完整的协作工作。IIOP和不同传输层上的其它相似映射,实现抽象的GIOP定义。
) Environment-Specific Inter-ORB Protocols (ESIOPs)

它为使用Environment-Specific Inter-ORB Protocols (ESIOPs)的条件提出了解决方案。Such protocols would be used for “out of the box” interoperation at user sites where a particular networking or distributing computing infrastructure is already in general use. Because of the opportunity to leverage and build on facilities provided by the specific environment, ESIOPs might support specialized capabilities such as those relating to security and administration. While ESIOPs may be optimized for particular environments, all ESIOP specifications will be expected to conform to the general ORB interoperability architecture conventions to enable easy bridging. The inter-ORB bridge support enables bridges to be built between ORB domains that use the IIOP and ORB domains that use a particular ESIOP.

7) Domain(域)

域把一个系统中的元素按照某种特征分成几个部分。在本结构中,域是一个范围,一个对象的集合,对象是域的成员,这些成员有共同的特征。可以把域看作是一个对象,它本生也可能是其它域的一个成员。
CORBA中的域分为以下几个部分:

Referencing domain – 对象引用范围
Representation domain – 信息传输语法和协议范围
Network addressing domain –网络地址范围
Network connectivity domain – 可能的网络信息范围
Security domain – 特殊安全策略
Type domain – 特殊标识符范围
Transaction domain –特定事物服务范围

有两种方式使用域:一是嵌入,一个域包括在另一个域中;二是联合,两个域联合起来使用。当两个域的边界上发生交互作用时,就需要使用一种映射机制(如桥接)在边界处传递相关元素。这里有两种方法,一是间接桥接(mediated bridging),一是直接桥接(immediate bridging)。


 

相关阅读

每日精选

点击查看更多

首页 手机 数码相机 笔记本 游戏 DIY硬件 硬件外设 办公中心 数字家电 平板电脑