第二章CORBA 的核心
2.1基本概念:
1、ORB(Object Request Broker)对象请求代理:它作为一个“软件总线”来连接网络上的不同对象,提供对象的定位和方法调用,它是CORBA实现的关键。
2、OA(Object Adapter)对象适配器:用于构造对象实现与ORB之间的接口。它给框架发送方法,调用并且支持服务器对象的生命周期(如:对象的创建和删除)。
3、BOA(Basic Object Adapter)基本对象适配器:负责激活对象,即当客户请求对象的服务时,激活对象实现的能力。
4、POA(Portable Object Adapter)可移植对象适配器:是BOA的替代方式,提供大量可扩展的接口,来处理一些对于BOA来说不合理的要求。特性:
(1) 支持透明激活对象。
(2) 允许单个服务者支持很多对象标识。
(3) 允许一个服务者上有多个POA,每个都有自己的一套管理策略。
(4) 将对不存在服务者的请求委托给默认服务者,或者向服务者的管理器请求一个合适的服务者。
5、DII(Dynamic Invocation Interface)动态调用接口:位于客户端,发送客户端的调用请求。
6、DSI(Dynamic Skeleton Interface)动态框架接口,位于服务器端,传送客户端的调用请求。
7、IDL(Interface Definition Language)接口定义语言:定义客户和服务器之间的静态接口,通过编译器生成客户存根、服务器框架,以及根据支持的语言映射,自动生成来自一个CORBA IDL的代码。
目前支持的语言映射包括:Java,C++,Ada,SmallTalk和COBOL等。 CORBA IDL是由对象管理组织(Object Management Group)为定义所有的CORBA界面而制定的。这里提供一个IDL的浏览,让你能够建立IDL文件定义大多数的对象。最新的IDL完整定义见OMG的Web站点(info@omg.org)。
你可以用IDL定义types(类型),constans(常量)和interfaces(界面)。这与C++中定义类型、常量和类相似。IDL是定义界面和类型的语言,它没有供你编写实现部分的元素。界面定义在IDL文件中的对象必须实现在分离的实现单元中。
IDL文件的标识符包括英文字母、数字和下划线,但不可以用下划线开头。IDL是大小写敏感的。然而,避免使用下划线通常是个好主意,因为将IDL翻译到不支持下划线的语言时会出问题。类似的,仅用大小写区标识符也不好,这在大小写不敏感的语言中会引起问题。
8、SII(Static Invocation Interface)静态调用接口:位于客户端,客户与ORB之间的静态接口。
9、SSI(Static Skeleton Interface)静态框架接口:位于服务器端,ORB与服务器之间的静态接口。
10、stub 存根:位于客户端,由IDL编译器编译IDL文件生成,其功能类似一个客户代理。
11、skeleton 框架:位于服务器端,由IDL编译器编译IDL文件生成,其功能是负责发送一个操作调用给能实现此操作的服务。
12、IR(Interface Repository)接口存储库:存储运行时所需要的IDL规范。
13、IMR(Implementation Repository)实现存储库:存储对象实现(一个服务器)的详细信息(即一个执行程序需要被放置在哪一个服务器上)。
14、GIOP(General Inter-ORB Protocol)通用ORB之间的协议:定义了一个不同ORB之间的接口。 GIOP 是 CORBA 方法调用的核心部分。GIOP 不基于任何特别的网络协议,如 IPX 或 TCP/IP。为了确保互操作性,OMG 必须将 GIOP 定义在所有供应商都支持的特定传输之上。如果有详细和简洁的消息规范,则不会提供互操作性,因为所有供应商使用不同的传送机制来实现这个互操作性。
15、IIOP(Internet Inter-ORB Protocol)因特网ORB之间的协议:IIOP把GIOP消息数据映射为TCP/IP连接行为和输入/输出流读/写。OMG 在最广泛使用的通信传输平台 -- TCP/IP 上标准化 GIOP。GIOP 加 TCP/IP 等于 IIOP!就这么简单。
注意:IIOP不是完全从GIOP分离出来的协议,它更像是GIOP的一个实例。
16、IOR(Interoperable Object Reference)可操作对象引用:它包括所有客户与服务器联系所需的各种信息(包括CORBA服务器对象进程的IP地址和TCP端口等),ORB将通过它产生在网络上唯一标识那个将被分布对象的消息。
17、ORBAservices CORBA服务:在ORB级别之上,定义了大多数分布式企业对象利用的公共服务。
如:
命名服务
交易对象服务
关系服务
生命周期服务
外表化服务
持久性服务
查询服务
对象集合服务
属性服务
事件服务
许可证服务
时间服务
事务服务
并发控制服务
安全服务
18、CORBA Facilities CORBA工厂:位于CORBA Services之上,定义了更高层次的分布式服务与框架。如:打印、电子邮件、文档管理等。
下图是CORBA的一张框架图:
图2-1 CORBA框架图
2.2 CORBA体系结构概述
CORBA规范充分利用了现今软件技术发展的最新成果,在基于网络的分布式应用环境下实现应用软件的集成,使得面向对象的软件在分布、异构环境下实现可重用、可移植和互操作。其特点可以总结为如下几个方面:
CORBA的核心是一套标准的语言、接口和协议,以支持异构分布应用程序间的互操作性及独立于平台和编程语言的对象重用。
引入中间件(Middleware)作为事务代理,完成客户机(Client)向服务对象方(Server)提出的业务请求(引入中间件概念后分布计算模式如图2-2所示);
图2-2 引入中间件后客户机与服务器之间的关系2. 实现客户与服务对象的完全分离,客户不再需要了解服务对象的实现过程以及具体位置(参见图2所示的CORBA系统体系结构图);
3. 提供软总线机制,使得在任何环境下、采用任何语言开发的软件只要符合接口规范的定义,均能够集成到分布式系统中;
4. CORBA规范软件系统采用面向对象的软件实现方法开发应用系统,实现对象内部细节的完整封装,保留对象方法的对外接口定义。
在以上特点中,最突出的是中间件的引入, 在CORBA系统中称为对象请求代理(ORB,Object Request Broker)和采用面向对象的开发模式。
对象模型是应用开发人员对客观事物属性和功能的具体抽象。由于CORBA使用了对象模型,将CORBA系统中所有的应用看成是对象及相关操作的集合,因此通过对象请求代理(ORB),使CORBA系统中分布在网络中应用对象的获取只取决于网络的畅通性和服务对象特征获取的准确程度,而与对象的位置以及对象所处的设备环境无关。
图2-3 CORBA系统体系结构图CORBA体系的主要内容包括以下几部分:
(1) 对象请求代理ORB(Object Request Broker):负责对象在分布环境中透明地收发请求和响应,它是构建分布对象应用、在异构或同构环境下实现应用间互操作的基础。
(2) 对象服务(Object Services):为使用和实现对象而提供的基本对象集合,这些服务应独立于应用领域。主要的CORBA服务有:名录服务(Naming Service)、事件服务(Event Service)、生命周期服务(Life Cycle Service)、关系服务(Relationship Service)、事务服务(Transaction Service)等。这些服务几乎包括分布系统和面向对象系统的各个方面,每个组成部分都非常复杂。
(3) 公共设施(Common Facilitites):向终端用户提供一组共享服务接口,例如系统管理、组合文档和电子邮件等。
(4) 应用接口(Application Interfaces):由销售商提供的可控制其接口的产品,相应于传统的应用层表示,处于参考模型的最高层。
(5) 领域接口(Domain Interfaces):为应用领域服务而提供的接口。如OMG组织为PDM系统制定的规范。
CORBA的产生有其特定的背景,它是在面向对象的技术兴起,客户/服务器模式普遍得到应用的前提下,为屏蔽通信和实现细节的需求,继承已有系统,消除“孤岛”现象而产生的。他弥补了传统分布处理系统的不足(如RPC等),具有很多新的特色:
(1) 引入代理(Broker)概念。代理起到如下作用:完成对客户方提出的抽象服务请求的映射;自动发现和找到服务器;自动设定路由,实现服务方程序的执行。
(2) 客户方程序与服务方程序完全分离。用传统的客户/服务器方式有很大的不同,客户将不再与服务方发生直接的联系,而仅需要与代理发生联系,客户与服务器方都可方便升级。
(3) 提供“软件总线”机制。任何应用系统只要提供符合CORBA系统定义的一组接口规范,就可以方便的集成到CORBA系统中,这个接口规范独立于任何实现语言和环境。如此,客户应用于服务对象之间可以透明地交互运行,实现应用软件在“软件总线”上的“即插即用”。
(4) 分层的设计原则和实现方式。CORBA系统的底层核心是一个精练的系统,各种复杂系统和应用可以由核心扩展和延伸。
CORBA技术是先进技术发展的结果,它将面向对象的概念揉合到分布计算中,使得CORBA规范成为开放的、基于客户/服务器模式的、面向对象的分布计算的工业标准。