GOAD, GNOME 对象活动目录

现在是真正的正在成长中(hairy:毛茸茸的)材料。你可能已经看到,手动的启动服务器实际上是笨拙的,剪切并粘贴 IOR 字符串,假定传递给客户程序的参数向量中有 IOR 字符串,接下来最大的问题是:我怎么知道客户程序想要请求哪个服务器、以及服务器的 IOR 如何传递给客户程序? 为了克服这个困难使用了 GOAD。本节解释如何使用 GOAD,它如何工作并且把计算器的例子扩展成自动的启动它的服务器。

如何通过服务器的名字找到一个服务器

主要的问题是,在只知道一个可被人阅读的服务器的名字的时候,如何找到一个 CORBA 服务器。这对 Internet 来说已经是个简单的问题了,当你必须找到一个主机的 IP 地址的时候,只须给出它的主机名和域名。在 Internet 中使用 DNS,在 CORBA 中使用命名服务器。DNS 独自工作,因为它是有层次的(hierarchical)并且和一些顶层服务器之间有协定,拥有关于主域中顶层服务器的知识(.com, .edu, .org, .net 和所有的国家或地区代码)。每个 DNS 服务器都有一个配置文件,这个文件被手动维护,其中列出了所有的这些顶层服务器。在 CORBA 中没有这些事情。这里用命名服务器,它被用一个 CORBA 服务器来实现,它可以在你的工作站上运行(或者不在),但你不知道这个命名服务器的 IOR。

对于所有的 Gnome 客户,幸运的是这里有一件事是知道的,那就是他们运行所在的 X11 显示器。在 X11 中所有的窗口都有一种机制叫做属性(Property),它可以包含与一个名字连接在一起的任意的数据。所以我们可以做的就是把命名服务器的 IOR 与这样的一个属性联合在一起,这样所有的客户和服务器都可以通过简单的向 X 服务器查询这个属性来得到 IOR。事情就是这样实际工作的。

这里有一个函数 CORBA_Object gnome_name_service_get(void)。如果你调用这个函数,你将得到(get back)一个 CORBA_Object,它表示(represent)一个 NamingContext(命名上下文)。使用了这个 NamingContext ,就可以通过在命名服务器中的名字存储(store)对象,或者如果你知道一个对象的名字的话就可以检索(retrieve)一个对象。因为 CORBA 的名字空间也是有层次的,Gnome 对象存储在 GNOME/Servers 之下。这个函数在你的 X 服务器的根窗口中查寻 CORBA_NAME_SERVICE 属性。如果这个属性存在,则检查服务器是否实际上在运行。如果服务器死掉了(崩溃了),就启动一个新的服务器并把它的 IOR 登记在这个属性中。如果没有这个属性,就启动一个新的服务器。