GNOME 常见问题解答(FAQ) | ||
---|---|---|
上一页 | Chapter 6. 体系结构 | 下一页 |
Common Object Request Broker Architecture (CORBA), 是Object Management Group制定的标准。如今大量的软件和硬件不断产生更新,CORBA对提高它们彼此间的互操作性提供了一个方法。简单的说,就是 CORBA 允许应用程序间可以彼此通信而不论它们是在何处、由谁发布。OK, enough of that stuff. Here's Todd's explanation:(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.
你可还记得 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 下的代码:
在 CORBA中就是这个样子:
void foo(int bar); void baz(){return(-1);}
The lesson of all of this? CORBA lets one program language-independent, location-transparent object-oriented interfaces between software components. It' s cool.
interface bubba{ void foo(in int bar); void baz() raises (InValidContext); }
可能这些服务中最重要的是命名服务。举例来说,比如你的程序由于某种原因需要拼写检查服务。(如果你的 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)
你大概可以看出 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.
于是项目开始考虑 MICO。MICO 的好处在于有一个 IIOP 兼容的 Object Adaptor,并且它的版权许可是基于 GNU 条款的。然而它只支持 C++ 语言,并且要用的内存之大难以置信。
由于种种不满意,GNOME 项目组决定开发自己的 ORB,就是ORBit。
最重要的,ORBit 的目标是高性能。这意味更少的内存需求和更快的速度。Here, ORBit is taking a lot of cues from Flick. ORBit 项目的推动者 Elliot Lee 认为他能够在不触犯 CORBA 规格的情况下,当请求服务本地执行时,让一个 CORBA 调用的开销接近一个标准库调用的开销。让我们拭目以待。
CORBA 将要使用大量的上下文。"Baboon"是一个包含了各种界面和库例程的集合,它被用来单一化和结合应用程序:
上一页 | 主页面 | Next |
体系结构 | Up | GNOME中的图形 |