第4章 CORBA 的概念

如果你是那类只靠实例就能理解得很好的人,请跳过本章、直接去看在下一章的例子。读有关例子的章节可以不用读本章。

本章帮助你理解有关 ORB 和 CORBA 的术语。

CORBA 是由对象管理组织 (Object Management Group,缩写为 OMG)定义的一系列标准(OMG 扮演的角色的作用是提供一个人们认可的 CORBA 框架标准)。OMG 不提供任何实现 CORBA 标准的工作,这就没有了偏袒。多数使用 CORBA  的人只是在他们的头脑中把持这些标准中的一两个而已,所有的标准在 OMG 的 web 站点 http://www.omg.org/。知道这些标准是如何协同提供 CORBA 是很有益处的。

一个工作的客户/服务器的简介

CORBA 的基本机制是从与一个对象分开的程序里一个运行这个对象的一个方法(就是一个函数),(事实上不是必须分开的,但无须为此担心)。从此一端到另一端,这就是需要被定义的。

定义对象 - 用 IDL

对调用者和被调用者都需要提供在什么对象上有什么方法的定义。这用对象的接口定义语言(Interface Definition Languageor - IDL)完成。对象的 IDL 只是使调用者可以调用在一个远端服务器上的对象所要求的信息。其他的任何事由 OMG 定义的其他标准处理。

标识对象

调用程序需要用某种方式标识(identify)对象(可能在远程)。这种方式叫 IOR,被表示为一个字符串,进而被用做程序的参数。

调用方法

调用程序需要以某种方式实际的调用在对象上的方法。这由调用者的编程语言完成,把 IDL 映射到编程语言的途径由 OMG 来标准化。这叫做语言映射,所有不同的 ORB 至少提供一种映射。ORBit 当前提供 C 语言映射。

当然 C 是编译语言,写一个做 ORBit 调用的 C 程序,需要使用 orbit-idl 编译器来编译要访问的对象的 IDL,接着写 C 程序调用由 orbit-idl 编译器定义的函数,把用户写的代码和 orbit-idl 编译器生成的代码一起编译,并且与 orbit 库和网络库连接。

然而对于更动态的语言(例如 Python),更自然的使用 CORBA 的方式是动态的载入 IDL 定义并使用,不需要单独的编译阶段。CORBA 的美在于支持两种机制。

在网络上转移调用

在客户端的函数调用现在由对象请求代理 ORB(Object Request Brokeror)处理并转换成对处理被调用对象的服务器 ORB 的实际上的 TCP/IP 请求。这两个 ORB 之间通信使用标准的叫 IIOP 即 Internet ORB 间协议。这意味着 ORB 可以来自不同的提供者,不用相互测试就能工作。

在服务器端,存在一个客户进程的镜像,把请求从 TCP/IP 分组转换成一个实际上的写服务器所使用的语言的调用。仆从对象由写服务器的人完成,仆从对象提供返回值,接着通过 ORB 发送给客户。

这好象是用大量的工作来完成一件简单的事,搞这么多标准的想法是部分标准可以改变,并且不须变动CORBA 中所有的东西就能适应。通过例子学习 CORBA 通常是很容易的,所以我们将进入下一章,以后再回来。