GNOME 常见问题解答(FAQ)
上一页 Chapter 6. 体系结构 下一页

CORBA, ORBit and Baboon

"GNOME"中间的'NO'就是网络对象(Network Objects)的缩写。This is how they work.

什么是 CORBA?

CORBA 是通用对象请求代理(调度)体系(Common Object Request Broker Architecture)的缩写。可以在开放管理组织(Open Management Group,OMG,控制 CORBA 标准的实体)的文档 What is CORBA? 中可以得到对之的如下叙述:
Common Object Request Broker Architecture (CORBA), 是Object Management Group制定的标准。如今大量的软件和硬件不断产生更新,CORBA对提高它们彼此间的互操作性提供了一个方法。简单的说,就是 CORBA 允许应用程序间可以彼此通信而不论它们是在何处、由谁发布。

(ORB) 其实是在对象间建立客户-服务器关系的中间件。通过 ORB,一个客户可以显式的调用一个服务器对象的方法,这个过程可以在单机上也可以跨网络实现。ORB 截取这个调用并负责寻找一个能够响应此需求的的对象,然后传输参数,调用,最后返回结果。客户除了对象界面,没有必要知道这个对象在什么地方、它由什么编写、它的操作系统、以及别的什么方面。通过上述方法,在异类分布式环境和无缝互连多对象系统中,ORB 提供了在不同的机器间应用程序互操作的方法。

在典型的客户机/服务器应用程序里,开发者通过他们自己设计的,或是公用的标准来定义在不同设备间使用的协议。协议的定义依赖于实现程序的语言、网络传输、以及其它多方面的原因。ORBs 把这个过程大大简化了。在 ORB 中,这个协议从应用程序的界面中就可以定义。仅是通过简单的执行一个和语言无关的规范——IDL (Interface Description Language)即可。ORBs 还提供了很大的弹性,它允许程序员选择最合适的操作系统、执行环境甚至编程语言。最重要的是,它允许综合现有的组件。在基于 ORB 的方案中,开发者developers simply model the legacy component using the same IDL they use for creating new objects, then write "wrapper" code that translates between the standardized bus and the legacy interfaces.

OK, enough of that stuff. Here's Todd's explanation:
你可还记得 RPC? 就是那个远程过程调用(Remote Procedure Calls)。Sun 公司用它来实现 NFS 和 NIS 的基本方法。Microsoft 则使用 DCE(Distributed Computing Environment)的 RPC 标准作为 DCOM 的基础。

其实,一个远程过程调用是很简单的。首先,定义一个标准格式的过程,要定义的东西有:过程的名字、调用参数、返回结果等。接下来就是产生客户端,告诉客户如何给过程传递参数以及如何取回返回值。然后就产生服务器端,告诉服务器如何取得参数并返回结果。

使用这种方法就可以做出强劲的系统。把标准的Unix文件系统界面转换成 RPC,and bammo, 就是 NFS。注意这里只要在输入输出的时候始终用标准方法,客户的过程调用和服务器的过程服务可以不用相同的语言编写,可以不在同一台机器上执行,甚至可以不是同一套操作系统同一种机器。这就是 RPC 的最突出特性。

然而,随着 C, Perl 等程序设计语言逐渐被面向对象的程序设计语言 Objective C, Java, C++ 等取代,对 RPC 也需要如下支持对象的特性:产生对象、访问对象数据、访问对象方法、删除对象。这就是 CORBA 所要达到的:可以把 CORBA 想象成下一代支持面向对象程序设计的 RPC。例如在 RPC 下的代码:
 
void foo(int bar); void baz(){return(-1);}
在 CORBA中就是这个样子:
 
interface bubba{ void foo(in int bar); void baz() raises (InValidContext); } 
The lesson of all of this? CORBA lets one program language-independent, location-transparent object-oriented interfaces between software components. It' s cool.

What are some CORBA components?

I would like to include here definitions of some of the more strange CORBA terminology, so that people can easily get into the groove of what CORBA is and have a good "beck-of-the-envelope" understanding of the components involved. Whenever I refer to a non-obvious CORBA term, I intend to define it here.

What are CORBA Services?

Additionally, there are really two parts to CORBA. There is the part which I've already described, which tells you how to do objectified RPC, how to marshal arguments, how to write IDL files, how GIOP works, etc. and then there are the "CORBA Services". These are services built on top of the basic CORBA infrastructure which make distributed object programming easier.

可能这些服务中最重要的是命名服务。举例来说,比如你的程序由于某种原因需要拼写检查服务。(如果你的 CORBA 实现得非常好) 那么它唤起你的 ORB 然后告诉它"Hey!我需要一个拼写检查服务,帮我找一下。" ORB 于是利用命名服务来查找哪个注册的对象提供了拼写检查服务。然后它唤醒你的程序告诉它 "你可以在 #867-5309 处找到这个拼写检查服务。" 程序就调用 867-5309 处的拼写检查程序。它也许是一个共享库,映射到你的地址空间后就可以直接调用这个功能;它也许是一个在蒙古的 FreeBSD 用户组提供的internet 上的拼写检查公共服务,基于 IIOP 协议。在整个过程中你根本感觉不出,也不用关心它要进行什么复杂的行为,除了程序稍微有些停滞。

命名服务,允许对象注册它们的用途。当然还有其它的 CORBA 服务,包括传输服务,安全服务,时间服务,关系服务(你可能想象到,也可能想象不到它是干什么的)等等。我的关于 CORBA服务文档是从1997三月列表得到的。

可以从这个URLhttp://www.omg.org/corba/csindx.htm(OMG站点)得到关于CORBA服务规范的文档,如果你对它们中任意之一有兴趣,我可以肯定 ORBit 开发者会很高兴和你交流。(请参考 ORBit)

GNOME 用的是 CORBA 的 哪一个版本?

OMG 正在开发 CORBA 3.0 版,但目前 GNOME 使用 CORBA 2.2 版,这是目前的标准。还不清楚等 3.0 版出台后 GNOME 会有什么相应改动。

从哪里可以得到关于 CORBA 的更多信息?

一个关于 CORBA 很好的站点是 Linas Vepstas 的,URL是http://linas.org/linux/corba.html

你大概可以看出 CORBA 和 COM 之间的差异很值得注意,我建议可以参考下面这个 URL 里面的文档: http://www.research.att.com/~ymwang/papers/HTML/DCOMnCORBA/S.html,它渐进的比较了 DCOM 和 CORBA。

Finally, the TAO project at Washington University in St. Louis has their own ORB, TAO. That group is led by Dr. Douglas Schmidt. You can find a lot of good information on his CORBA page: http://siesta.cs.wustl.edu/~schmidt/corba.html. Be sure to look around at the ACE and TAO pages while you're there; they are very good.

在 GNOME 中 CORBA所扮演的角色是什么?

CORBA 为 GNOME 提供了一个组件结构。就象 COM/DCOM 为 win32 作的那样。

在 GNOME 中 CORBA 是怎样具体实现的?

最初是计划使用 ILU。使用 ILU 有很多好处,最重要的一点就是支持多种语言。尽管 ILU 非常不错,但是施乐公司对 ILU 的态度不是十分明确,最重要的是许可条款的问题:ILU 不是一个自由软件,GNOME开发组也无法让施乐公司修改它的条款。GNOME 项目不可能采用一个非自由软件,所以无法采用 ILU。

于是项目开始考虑 MICO。MICO 的好处在于有一个 IIOP 兼容的 Object Adaptor,并且它的版权许可是基于 GNU 条款的。然而它只支持 C++ 语言,并且要用的内存之大难以置信。

由于种种不满意,GNOME 项目组决定开发自己的 ORB,就是ORBit。

What is ORBit?

ORBit 被设计成能用多种语言;ILU 证明这个可能的。目前为止它只支持 C,但是未来它会支持其它的语言。(因为它是最新的一个项目,所以目前只实现了支持 C)。它也支持 GIOP/IIOP,OMG 的 CORBA 协议允许不同的 ORB 之间能互相通信。

最重要的,ORBit 的目标是高性能。这意味更少的内存需求和更快的速度。Here, ORBit is taking a lot of cues from Flick. ORBit 项目的推动者 Elliot Lee 认为他能够在不触犯 CORBA 规格的情况下,当请求服务本地执行时,让一个 CORBA 调用的开销接近一个标准库调用的开销。让我们拭目以待。

Why has GNOME not made more use of CORBA?

The big reason is that MICO was just unworkable. it took too much memory, it was C++ only, etc. ad naus. With the recent release of the GNOME ORBit, we can start deploying CORBA in the GNOME.

GNOME 中 CORBA 是如何使用的,或者这样问:BABOON 是什么?

(这一节逐字的采用了 Miguel de Icaza 的原话,他是GNOME 项目组的灵魂人物)

CORBA 将要使用大量的上下文。"Baboon"是一个包含了各种界面和库例程的集合,它被用来单一化和结合应用程序:

BABOON stands for: Baboon Allows Baboon Objects Over Networks.

上一页 主页面 Next
体系结构 Up GNOME中的图形