分布式对象标准介绍 企业要构建多层分布式系统,必须遵循分布式标准,基于什么样的标准将直接影响到企业应用系统的开放性和可扩展性。目前业界分布式对象技术主要有三种架构标准: Microsoft的COM/DCOM/COM+ OMG组织的 CORBA。 Sun Microsystems的Enterprise Java Beans / RMI
COM/DCOM/COM+ COM/DCOM/COM+是Windows环境专属的分布式对象架构,虽有协作厂商移植至少数 UNIX 平台,但与Windows平台上的版本仍有相当程度的差异性,为部门级(Department Level)分布式运算的主要架构,支持平台种类有限,无法满足企业级的需求。 我们的经验表明: 即使在纯windows平台下,COM/DCOM/COM+对多种语言编程的支持也是比较差的,基本上可以认为是一个“Windows平台上的分布式C++”。 在Windows下使用C++开发COM应用,可以无限制的应用任何COM的功能。 Visual Basic语言对COM自动化之外的COM功能几乎不支持。 Visual Java语言,众所周知,Microsoft和Sun为此进行了一场诉讼大战,现在已经是一个不再发展的语言了,当前版本对JAVA/COM集成的支持很有限。 Delphi语言,据说支持得不错;但是接触不多,不敢断言。
CORBA 公用对象请求代理 CORBA 标准是由800多个大型软、硬件公司参与的OMG(Object Management Group) 组织所制定,获得IBM、Sun Microsystems、Oracle、Sybase、Borland、Novell、Netscape等大型IT厂商的支持。CORBA规范是众多厂商平台上软件对象间沟通的桥梁,遵循CORBA标准能够有效保障用户的技术投资。CORBA 的对象管理架构 OMA如下页图所示,包含下列几个重要部分: 对象请求代理(Object Request Broker,简称ORB) 公共对象服务(Common Object Services) 公共设施(Common Facilities) 应用程序对象(Application Objects)
CORBAA体系架构
CORBAA体系架构概述 对象请求代理(ORB) 整个CORBA应用的骨干,负责从客户端对象接受请求、将请求发送给服务端对象,并将服务端对象的响应反馈到客户端对象。软件厂商只要遵循应用对象与ORB间沟通的接口定义语言(Interface Definition Language,IDL),便能够以对象的型态提供服务或享用服务,ORB如同一个软件的总线(Software bus),结合应用程序对象,让开发人员完全不需考虑异构平台、异构通讯协议或不同程序语言间的差异。因此,CORBA标准具有操作系统的中立性及开发语言的中立性特点。也就是说,CORBA对象并不局限于某一特定系统平台(Windows NT或Unix),CORBA的开发也不局限于某一特定的开发语言(开发人员可以使用C/C++、Java、Object Pascal或Smalltalk)。 公共对象服务(Common Object Services) 以对象型态提供许多公用的服务,例如:事件传递管理、交易管理、对象命名、安全管理、数据交换等. 公共设施(Common Facilities) 提供资源管理、网络管理等多种服务。
Enterprise JavaBean(EJB) RMI与Enterprise JavaBean(EJB)是以Java程序语言为主体的分布式对象架构,新版本的EJB规范与OMG的CORBA规范也逐渐集成。 对于EJB体系架构我们未曾应用,所以也不敢多讲了。 但是就JAVA语言来说,根据我们的测试表明,某些对实时性要求较高的应用不应采用JAVA,因为JAVA应用有一个最大的缺点就是它的运行时效率是不确定的,例如:根据我们的测试,JAVA虚拟机的内存垃圾收集过程(何时启动此过程是应用不可控制的)有时可以持续1-2秒的时间,而在此时间内,所有此应用的工作均被停止。这可能对我们系统中的某些应用是不可接受的。
不同框架之间的互操作 COM & CORBA 尽管CORBA制订了COM/CORBA互操作规范,但是目前的实现并不理想。 COM&JAVA 不用说EJB,仅仅是JAVA语言和COM的集成就有很大的问题。 CORBA&EJB 新版本的EJB规范与OMG的CORBA规范逐渐集成: 编程语言层面上的IDL/JAVA语言的双向映射 协议级的基于IIOP(ORB使用)的 RMI(EJB使用)规范。
一些基本的CORBA术语 对象(Object) 一个可识别的、被封装的实体,它可以提供一个或多个能够被客户请求的服务。 对象引用(Object reference) 一个能够确定的表示一特定对象的一个值。特别是在某种时间和空间的实际限制下,对象引用在每次请求中都表示同一个对象。一个对象可以被多个不同的对象引用所表示。 对象实现(Object Implementation) 简称实现,是定义了创建一个对象和允许一个对象参与提供一套合适的服务所需的信息。实现通常包括对对象状态进行操作的方法的定义,同时也包括对象的预期类型信息。 客户(Client) 任何能请求服务的应用实体。