CORBA,徘徊在门缝外


(来源:http://www.yesky.com)

目前,分布式对象计算CORBA标准正在不断获得大量新用户和销售商的支持,然而,也有许多专家认为CORBA的发展速度还是太慢,并且不够深入。那么,是什么阻碍着CORBA的发展呢?有的人把原因归咎于现在兼容CORBA的开发工具太少,所以让CORBA被工具拖了后腿。那么现在开发工具又发展到什么状况呢?

——这个问题的答案,实际上取决于不同的回答者。当然,众多的答案归根结底都会涉及到一点,那就是CORBA的接口定义语言(IDL)。而造成各种观点的分歧点就在于有的人认为支持IDL的工具已经够好了,不用再做什么,但是另外的人却认为IDL的发展过于缓慢。前一个阵营的人大多数都是C或者C++的使用者,这些人最能适应那种最原始的开发环境,他们做开发的时候几乎不需要借助任何工具;而后一种人通常都是使用一些最先进的开发工具(包括最顶级的建模工具)的程序员。不过,这两种人在开发人员当中大概都会占到相当的比重,所以开发工具的发展状态看来不是CORBA发展的主要障碍。

另外,我们也注意到,不管我们是直接从底层开始往上积累,还是根据建模工具往下扩展,程序设计中最重要的因素仍在于程序员开发分布式程序的开发经验。一个程序员也许认为开发一个系统不难,但他不能保证这个系统开发出来之后,在现实的世界里究竟能不能用。即使现在涌现出来大量的先进开发工具,也不能改变这个事实。

所以也许更根本的问题集中在“分布”和“对象”上面。今天,虽然很多程序员认为面向对象的API设计确实十分困难,但反过来,他们却不会去抱怨CORBA或者开发工具有毛病。因为现有的各种开发工具,再加上程序设计技巧,正是这些软件人员今天成功的秘诀。并且按现在的发展速度来看,更多优秀的工具正在不断地涌现。程序员将能利用更多更好的工具,但最重要的是,程序设计的技巧却是和程序员本人的素质和经验密切相关的。

作为一种明确针对分布式对象环境的开发工具,JAVA是分布式对象开发人员的好帮手——并且JAVA现在也已成为服务器端的通用语言。不过时间证明开发人员的经验是必不可少的,JAVA对于企业来说仍然相对不成熟,并且JAVA的倡导者们还必须依赖于CORBA来填补JAVA功能中的空缺。

CORBA其实毫无神秘之处

Ron Zahavi,曾经在Mitre公司长时期地针对面向对象的系统作过积极的研究,并且和Thomas Mowbray合著了《CORBA精要》一书,他在CORBA方面有着深刻的认识。他告诉我们,CORBA只是一种规格和标准,作为技术规格来讲,CORBA其实毫无神秘之处。而在面向对象的分布式应用开发工作中,无论你是否使用CORBA技术,则仍然是比较困难的。

“很多人仅仅是把CORBA看作一种远程调用机制,他们不了解也不需要了解其中的过程和服务工作原理”,Zahavi说,“开发人员需要学习的就是确定一个CORBA的类型,不管他使用的什么语言,他只需要学会这一点。”

不过,当我们把CORBA标准应用到实际工作中去的时候,事情就变得复杂得多了。Zahavi说,“实际工作中,除了建立商业逻辑外,你怎么处理容错、死锁或者性能问题?这就是复杂之所在!”

“我们应该作一个总的接口还是把总接口细分为多个小接口?是应该有一个面向服务器的接口还是将所有的对象都提供出来?比如说,如果你有一个涉及到银行的程序,你愿意把所有的对象都实例化么?”,Zahavi继续道,“或者,如果你有一百万个用户,你是不是希望实例化一百万个对象,或者你仅需要一个驻于服务器的覆盖数据库的接口?这些都是在使用CORBA进行开发时所碰到的实际问题,这些也正是设计上所碰到的问题。”

所以,在开发程序的过程中,选择一个经过深思熟虑的架构也许比选择开发工具更加重要。一个能处理RPC的开发人员就可以使用CORBA。即使这个程序员没有有多年的开发经验。但是你需要一个良好的程序框架来让这些技术发挥出优势。从设计的角度来看,其他技术和CORBA具有相同的复杂度。

CFT公司使用统一建模语言(UML)来进行对象设计,Zahavi说。虽然这个工具可以生成用CORBA IDL描述的对象,但是它的智能还不能达到完全正确地产生一个我们所需要的对象,所以如果你按下按扭,然后用IDL来产生所有的东西,你会觉得生成的代码基本上没什么用,我们不可能让它来为我们做所有的事情。

Zahavi还认为,很多元素不应该成为对象,他们对于应用程序来讲是内部的,并且不需要提供给IDL接口。如果让程序中的一切都成为分布式对象,那么这个程序的性能将会严重下降。

还是Sun公司副总裁Gosling一语道出个中真谛:对分布式计算的错误理解是CORBA成功的一大障碍,而对网络化计算的错误理解则是JAVA成功的一大障碍。

自上而下地开发前端

俄亥俄州警员退休基金的技术总监Sawczyn认为前台的建模程序是十分有用的。CORBA能够连接各种不同的数据库,并且能将各个模块作为对象来处理。前台建模工具使开发人员将注意力更多地集中到对象的设计而不是IDL的书写上。“我们现在使用的是Rational公司的Rose建模工具,然后使用Secant公司的Extreme来将Rose产生的模型转换为IDL”。Secant的工具能够在数据库数据和对象进行双向的永久映射,并且可以将此编译为标准CORBA。

而在犹他州的3M健康信息系统里,开发人员正利用各种工具,包括建模工具,进行着基于CORBA标准的开发工作。Draper在这个系统里带领着一组程序员,他们建设着系统内的集成化配送网络。Draper说,开发应用程序的技巧似乎显得比开发工具的功能更为重要。

“对象是个不错的玩意,但是一当你面对分布式环境中一个比较微观的部分的时候,对象技术就显得十分模糊”,Draper说,“如果这个系统是一个纯对象的系统,各种有关性能和数据集成的复杂问题就一下子冒出来了。”他认为开发人员应该谨慎地使用UML来产生对象。“只有时间才能让程序员慢慢积累这方面的技巧”,Draper说。

建立Java-CORBA

那么开发者们正在发展的Java-and-CORBA技术前沿又做了些什么呢?今天,更有可能采用Java和CORBA技术的用户应该是一些具有新兴开发平台的新兴公司。比如全球移动系统(GMS)公司,据公司的产品开发部副总裁Pirie声称,公司的最初就计划建立一个无线用户的智能服务网络。根据公司和Sun签定的一系列合约来看,选择Java是一件理所当然的事情。

同时,GMS公司不仅希望快速地开发程序,并且也希望能够让程序在GMS的各个结点上都能良好地运行,所以公司决定采用CORBA作为程序架构。所以公司也继续选择了来自对象空间公司(Object Space)的Voyager平台,此平台是和CORBA兼容的ORB开发和运行平台。

针对Voyager,Pirie认为,“通常一个协议需要较多的管理费用,而Voyager并不需要。它能很好地管理自己,并且不会耗费太多的资源。另外,Voyager的广播功能也被证实是相当有价值的。”

对于Pirie来说,CORBA作为一种运行系统总线正是其卖点所在;而从开发人员的角度来看,Pirie说,开发人员最关心的仅就是Voyager能和“现有的Java环境充分兼容”;而对于产品的表现,GMS是相当满意的。

“Java和CORBA正在努力靠拢。Java 2平台捆绑了CORBA标准”,对象管理集团的CEO,Soley在前段时间Sun宣布了Java 2之后说道,“从现在起,无论何时你看到Java的时候你都能看到CORBA”。

如此看来好象CORBA和Java之间的差别正在缩小?非也,至少这是不完全正确的。“关键在于我们总是努力去支持各种可能的语言,这个方向并没有改变”,这位OMG的CEO说。

的确,Java比其他语言更容易支持CORBA,因为它本身就具有对象模型,他说。但是Java在编程语言历史上并不是前无古人后无来者的,其他语言也可以具有对象模型,“虽然在COBOL语言中没有对象模型,但是我们可以创建它”。

那么Soley针对当前CORBA开发工具的状态又持什么样的观点呢?

“有些东西是那么不尽如人意,比如开发工具基本上帮不了什么忙,而另一些东西你拿他是没办法的,”,Soley说。后者这个“东西”,也就是我们前边提到的分布式计算的开发经验。“我见过很多人自上而下地建立起系统的模型,我也看见过许多人从最底层用C++或Fortran,开发一只只的CORBA组件,最后将这些组件拼接成一个系统”。

“但我却从来没见过一个服务端的IDE”,Soley补充道,“看起来你可以将各种对象组合成一个服务端的进程,现在我们所需要的也许是怎样建立一个服务端的Idea”。

关键是正确而合理的接口!

“我相信从C++到JAVA的变迁是必然的,因为JAVA具有更好的移植能力和回收能力”,Zahavi说。“但是JAVA现在还有待继续发展,例如更好的CORBA服务接口以及针对特殊硬件的虚拟机增强机制。”

因为相对来说JAVA还是一件新事物,并且分布式的商业系统环境也是多样化的,所以CORBA的语言无关特性是一个明显的优势。但是由于传统机制也一样混杂在这个多样的系统环境中,许多遗留的老问题仍然需要花大力气来解决。当前,许多分布式系统在“包装”大型机上的COBOL程序的时候感觉异常艰难。实际上,Concept Five已经花了大量时间来分析许多COBOL程序以找出其最优化的对外接口,并且还将在以后很长一段时间里继续这样的工作,Zahavi说。

“假如我可以产生出IDL”,Zahavi说,“比如,我想对一个传统的COBOL系统进行包装。我可以利用一种工具来帮我产生IDL,但是关键且困难的地方在于寻找一个合适的接口,以便于包装和集成这个传统的系统。”

“是面向批处理?还是一个拥有大量接口和缓存的CICS交易系统?或是直接和数据库对话?我们在这方面可以有多个切入点,但是各个切入点会要求不同的通信机制。”他说。

那么,在CORBA架构的中间层和传统的后台程序之间如何创建一个合理的接口?或是完全抛弃原有系统进入CORBA的全新世界?这就是我们必须作出一个艰难的抉择。

注:IDL(接口定义语言)是一种通用的语言。它能够让用某种语言写成的对象和另外一种语言产生的对象进行通信。在分布式对象技术里,关键的问题在于怎样把一个新建的对象放到另外一种环境中去调用。现在人们普遍用IDL语言写成的ORB(对象请求中介)程序来解决这个问题。