分类: LINUX
2007-10-13 17:24:26
本文对CORBA、DCOM和Java等三种典型的构件模型做出了比较分析
软件构件模型是关于开发可重用软件构件和构件之间相互通信的一组标准的描述。通过重用已有的软构件,使用构件对象模型的软件开发者可以像搭积木一样快速构造应用程序。这样不仅可以节省时间和经费,提高工作效率,而且可以产生更加规范、更加可靠的应用软件。
----软件构件应该具备以下几个特征:
----·自描述构件必须能够识别其属性、存取方法和事件,这些信息可以使开发环境将第三方软件构件无缝地结合起来;
----·可定制提供一个典型的图形方式环境,软件构件的属性只能通过控制面板来设置;
----·可集成构件必须可以被编程语言直接控制。构件也可以和脚本语言连接或者与从代码级访问构件的环境连接,这个特性使得软件构件可以在非可视化开发项目中使用;
----·连接机制构件必须能产生事件或者具有让程序员从语义上实现相互连接的其他机制。这意味着程序员可以很容易地向按钮添加代码,使点中按钮就可以影响其他构件的动作。
----构件模型是为开发者定义软件构件而建立的体系结构和API集,使开发者可通过软件构件的动态组合来建立应用系统。构件模型由构件与容器两种主要成份构成。构件是具有可重用特性的基本软件部件。容器用于存放和安排构件,实现构件间的交互。容器也可以作为另一个容器的构件使用。
----本文对CORBA、DCOM和Java等三种典型的构件模型做出了比较分析。
----CORBA构件模型的底层结构为ORB。一个CORBA构件采用IDL进行描述。CORBA提供了IDL到C、C++、Java、COBOL等语言的映射机制--IDL编译器。IDL编译器可以生成Server方的Skelton和Client方的Stub代码,通过分别与客户端和服务端程序的联编,即可得到相应的Server和Client程序。
----CORBA同时提供了一系列的公共服务规范--COSS,其中包括名字服务、永久对象服务、生命周期服务、事务处理服务、对象事件服务和安全服务等,它们相当于一类用于企业级计算的公共构件。此外,CORBA还针对电信、石油等典型的应用行业提供了一系列的公共设施。
----CORBA是一种语言中性的软件构件模型,可以跨越不同的网络、不同的机器和不同的操作系统,实现分布对象之间的互操作。
----DCOM是Microsoft与其他业界厂商合作提出的一种分布构件对象模型(DistributedComponentObjectModel),其发展经历了一个相当曲折的过程。DCOM起源于动态数据交换(DDE)技术,通过剪切/粘贴(Cut/Paste)实现两个应用程序之间共享数据的动态交换。对象连接与嵌入OLE就是从DDE引伸而来的。
----随后,Microsoft引入了构件对象模型COM,形成了COM对象之间实现互操作的二进制标准。COM规定了对象模型和编程要求,使COM对象可以与其他对象相互操作。这些对象可以用不同的语言实现,其结构也可以不同。基于COM,微软进一步将OLE技术发展到OLE2。其中,COM实现了OLE对象之间的底层通信工作,其作用类似于CORBA/ORB。不过此时的COM只能作用在单机Wintel平台上。在OLE2中,也出现了我们今天熟知的拖-放技术以及OLE自动化。
----同时,微软在VB中引入了可以嵌入任何可视构件的通用模型VBX。VBX的主要局限在于它并不是一个开放的结构,也没有为第三方软件开发商提供VBX集成的标准。最后,微软将上述思想集中在一起,以COM作为构件通信框架。VBX也发展为OLE控件OCX的形式。DCOM是COM在分布计算方面的自然延续,它为分布在网络不同节点的两个COM构件提供了互操作的基础结构,而所有以OLE为标志的技术如今也已挂上了ActiveX标志。
----从CORBA的观点来看,我们可以粗略地说,ActiveX控件与DCOM的关系相当于CORBA构件与ORB的关系。当然,按照微软一贯的产品开发逻辑,微妙的思想都退到了幕后,而提供给开发者的是一个以Wizard方式生成各种应用的可视化开发环境。在公共服务方面,微软提出了自己的事务服务器MTS(MicrosoftTransactionServer)和消息队列服务器MSMQ(MicrosoftMessageQueueServer)。前者与CORBA对象事务服务目标类似,后者则是为了保证应用之间进行可靠的消息通讯和管理。此外,微软在网络安全方面也有一整套实用的解决方案。
----按照Sun和Javasoft对Java的界定,Java是一个应用程序开发平台,它按照高性能、可移植、可解释的原则,提供面向对象的编程语言和运行环境。Java计算的本质就是利用分布在网络中的各类对象共同完成相应的任务。例如JavaApplet可按用户的需求从服务器上动态地下载到客户机的浏览器上,完成HTML页面的动态变化。
----Java对于软件构件的观点与CORBA中的构件观点存在一定的区别。在CORBA中,CORBA/ORB相当于一根软总线,构件可以即插即用。也就是说,从CORBA的观点看来,所有构件的地位相当,完全是一种平行的关系。而在Java中,软件构件是能够进行可视化操作的可重用软件,它满足一定的特征要求,并可以根据需要进行定制和组装。
----Java的软件构件称为JavaBean,或者简称Bean。按照Javasoft给出的定义,Bean是能够在构造工具中进行可视化操作的可重用软件。JavaBean的组件模型包含组件和容器两个基本要素,这一思想在ActiveX/DCOM技术中同样存在。作为一种典型的组件模型,JavaBean具有属性、方法、事件、自我检查、定制和永久性等6个方面的特征。其中前3种特征(属性、方法、事件)是面向对象的组件必须满足的基本要求,属性和方法保证Bean成为一个对象,而事件可以描述组件之间的相互作用以及组件与容器之间相互感兴趣的事情。通过事件的生成、传播和处理,构件相互之间关联在一起,共同完成复杂的任务。后三种特征(自我检查、定制和永久性)主要侧重于对JavaBeans组件性质的刻画。内省用于暴露与发现构件接口。使用内省机制,可以使构件的使用者了解到构件的属性、方法和事件。由于一个构件通常是具有一定性质和行为的对象的抽象,它往往有很大的通用性。为了在一个具体的应用环境中使用构件,必须对构件进行定制。JavaBean的定制通常在一个可视化生成工具中进行,通过构件的内省机制,发现构件的属性、方法和事件,然后利用生成工具提供的属性编辑器实现定制。永久性是将构件的状态保存在永久存储器中并能够一致恢复的机制。Java通过序列化(Serialize)实现定制构件的永久性存储,通过反序列化可以实现构件状态的恢复。
----JavaBean构件的本地活动是在与其容器相同的地址空间内进行的。在网络上,JavaBean构件可以以三种方式进行活动:
图1Java三种网络访问机制
----远程方法调用机制RMI是构成Java分布对象模型的基础结构。RMI系统包括桩/框架层、远程引用层和传输层。目前,RMI的传输层是基于TCP实现的,将来的RMI体系结构建立在IIOP协议之上,可以实现Java技术与CORBA技术的深层融合。应用层建立在RMI系统之上。图2给出了各层之间的关系。
图2RMI系统中各层之间的关系
----最近两年,Java又提出了企业JavaBean(EJB)的思想,其结构完全采用基于软件构件模型的分布对象计算体系,如图3所示。
图3企业JavaBeans结构
----企业JavaBean各组成部分的含义为:
----用CORBA的观点来看,企业JavaBean中包括了分布构件的基础结构,也包括了各类公共服务构件。并且由于Java与生俱来的跨平台性和语言的一致性,使其成为软件构件模型的一个有力的竞争者。
----下面,我们从企业计算的角度出发,对CORBA、DCOM和Java三种构件模型进行分析比较。按照企业计算的要求,构件模型的比较分析应该依据以下原则:
----·集成性集成性主要反映在基础平台对应用程序互操作能力的支持上。它要求分布在不同机器平台和操作系统上、采用不同的语言或者开发工具生成的各类商业应用必须能集成在一起,构成一个统一的企业计算框架。这一集成框架必须建立在网络的基础之上,并且具备对于遗留应用的集成能力;
----·可用性要求所采用的软件构件技术必须是成熟的技术,相应的产品也必须是成熟的产品,在至关重要的企业应用中能够稳定、安全、可靠地运行。另外,由于数据库在企业计算中扮演着重要角色,软件构件技术应能与数据库技术紧密集成;
----·可扩展性集成框架必须是可扩展的,能够协调不同的设计模式和实现策略,可以根据企业计算的需求进行裁剪,并能迅速反应市场的变化和技术的发展趋势。通过保证当前应用的可重用性,最大程度地保护企业的投资。
----这些观点实质上反映了将软件构件技术看作一个黑箱时给予企业IT经理们的重要观感。
----表1进一步细化了每种原则要求,并给出了三种软件构件技术的比较结果。这些数据完全来自经验,并不代表深入细致的调查结果。
----Java提供了一个概念清晰、结构紧凑的分布计算模型和构件互操作的方法,为构件应用开发提供了相当的灵活性。但由于它还处于发展时期,因此其形态很难界定。CORBA是一种集成技术,而不是编程技术。它提供了对各种功能模块进行构件化处理并将它们捆绑在一起的粘合剂。Java和CORBA在很大的程度上可以看作是互补的。为了适应WEB应用的发展要求,许多软件厂商都急于促成CORBA和Java技术的结合,将来的RMI可能建立在IIOP之上。CORBA不只是对象请求代理ORB,也是一个非常完整的分布式对象平台。CORBA可以扩展Java在网络、语言、组件边界、操作系统中的各种应用。其次,Java也不仅仅是与CORBA捆绑的语言,它还是一个易变的对象系统,也是一个运行对象的便携式OS,而且允许CORBA对象在主机、网络计算机和蜂窝电话等应用上运行。Java还简化了大型CORBA系统中的代码分配,其中内置的多线程和垃圾收集使编写可靠的网络对象更为方便。此外,Java能创建可移动对象并将它们分发出去,而采用CORBA可以将它们连接在一起,并与计算环境中的数据库、遗留系统、其他语言编写的对象和应用相互集成。
----CORAB与Java的基础结构也可以很好地互补。CORBA处理网络透明性,Java处理实现透明性。CORBA提供了Java便携应用环境与对象间的连接。由此看来CORAB/Java技术紧密结合的趋势是势不可挡的。而且二者的结合将成为ObjectWeb技术的主要形态。