返回介绍

A.6.1 CORBA 基础

发布于 2024-10-15 23:56:38 字数 2090 浏览 0 评论 0 收藏 0

由 OMG 制订的对象相互操作规范通常称为“对象管理体系”(ObjectManagement Architecture,OMA)。OMA 定义了两个组件:“核心对象模型”(Core Object Model)和“OMA 参考体系”(OMA Reference Model)。OMA 参考体系定义了一套基层服务结构及机制,实现了对象相互间进行操作的能力。OMA 参考体系包括“对象请求代理”(Object Request Broker,ORB)、“对象服务”(Object Services,也称作 CORBAservices)以及一些通用机制。

ORB 是对象间相互请求的一条通信总线。进行请求时,毋需关心对方的物理位置在哪里。这意味着在客户代码中看起来象一次方案调用的过程实际是非常复杂的一次操作。首先,必须存在与服务器对象的一条连接途径。而且为了创建一个连接,ORB 必须知道具体实现服务器的代码存放在哪里。建好连接后,必须对方法自变量进行“汇集”。例如,将它们转换到一个二进制流里,以便通过网络传送。必须传递的其他信息包括服务器的机器名称、服务器进程以及对那个进程内的服务器对象进行标识的信息等等。最后,这些信息通过一种低级线路协议传递,信息在服务器那一端解码,最后正式执行调用。ORB 将所有这些复杂的操作都从程序员眼前隐藏起来了,并使程序员的工作几乎和与调用本地对象的方法一样简单。

并没有硬性规定应如何实现 ORB 核心,但为了在不同开发商的 ORB 之间实现一种基本的兼容,OMG 定义了一系列服务,它们可通过标准接口访问。

1. CORBA 接口定义语言(IDL)

CORBA 是面向语言的透明而设计的:一个客户对象可调用属于不同类的服务器对象方法,无论对方是用何种语言实现的。当然,客户对象事先必须知道由服务器对象揭示的方法名称及签名。这时便要用到 IDL。CORBA IDL 是一种与语言无关的设计方法,可用它指定数据类型、属性、操作、接口以及更多的东西。IDL 的语法类似于 C++或 Java 语法。下面这张表格为大家总结了三种语言一些通用概念,并展示了它们的对应关系。

CORBA IDL Java C++

模块(Module) 包(Package) 命名空间(Namespace)

接口(Interface) 接口(Interface) 纯抽象类(Pure abstract class)

方法(Method) 方法(Method) 成员函数(Member function)

继承概念也获得了支持——就象 C++那样,同样使用冒号运算符。针对需要由服务器和客户实现和使用的属性、方法以及接口,程序员要写出一个 IDL 描述。随后,IDL 会由一个由厂商提供的 IDL/Java 编译器进行编译,后者会读取 IDL 源码,并生成相应的 Java 代码。

IDL 编译器是一个相当有用的工具:它不仅生成与 IDL 等价的 Java 源码,也会生成用于汇集方法自变量的代码,并可发出远程调用。我们将这种代码称为“根干”(Stub and Skeleton)代码,它组织成多个 Java 源文件,而且通常属于同一个 Java 包的一部分。

2. 命名服务

命名服务属于 CORBA 基本服务之一。CORBA 对象是通过一个引用访问的。尽管引用信息用我们的眼睛来看没什么意义,但可为引用分配由程序员定义的字串名。这一操作叫作“引用的字串化”。一个叫作“命名服务”(Naming Service)的 OMA 组件专门用于执行“字串到对象”以及“对象到字串”转换及映射。由于命名服务扮演了服务器和客户都能查询和操作的一个电话本的角色,所以它作为一个独立的进程运行。创建“对象到字串”映射的过程叫作“绑定一个对象”;删除映射关系的过程叫作“取消绑定”;而让对象引用传递一个字串的过程叫作“解析名称”。

比如在启动的时候,服务器应用可创建一个服务器对象,将对象同命名服务绑定起来,然后等候客户发出请求。客户首先获得一个服务器引用,解析出字串名,然后通过引用发出对服务器的调用。

同样地,“命名服务”规范也属于 CORBA 的一部分,但实现它的应用程序是由 ORB 厂商(开发商)提供的。由于厂商不同,我们访问命名服务的方式也可能有所区别。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
    我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
    原文