解读COM与CORBA(上)
技术解析
(作者:施晓军编译 2001年04月13日 13:53)
COM (Common Object Model)有时被称为公共对象模型,微软官方则称之为组件对象模型(Component Object Model)。DCOM用于分布式计算,是微软开发设计的,作为对COM的一个扩展。CORBA (Common Object Request Broker Architecture)表示公共对象请求代理体系结构,是由对象管理工作组(OMG)开发的。COM/DCOM和CORBA都是用面向对象的方法,进行软件组件的开发和应用。它们是客户/服务器世界中,进行应用系统开发时的两个竞争对手。这些体系结构都支持分布式计算,并且提供对交互操作性和有限的可移植性的支持。在创建可扩展的客户/服务器系统时,分布式计算技术是必须的。由于这些分布式对象里面封装了数据和商业规则,因此,它们能存在于系统的任何部分。现在异构系统越来越普遍,这就导致分布式对象也变得越来越流行,并且,它们在连接异构系统时确实做得非常好。
CORBA和DCOM都是被设计用于分布式对象的客户/服务器模式的通信。在这两种技术中,都是一个客户调用一个请求,该请求则由远方的一个对象来实现,远方的对象充当服务器的角色。提供服务的对象都有一个界面(interface,接口),该界面是通过界面定义语言(IDL)来定义的。由于界面的存在,使对象的实现过程对于客户是隐蔽的。CORBA 和COM都是通过RPC和引用远程对象的方法来实现的。这两种技术中,对数据类型的支持都局限于几种数据类型,这些数据类型被映射到多种程序设计语言中。
起源 ●COM/DCOM
COM/DCOM的前身OLE(Object Linking and Embedding,对象链接和嵌入)是用于在微软的WIN 3.1操作系统中链接文档。开发COM是为了在一个单一的地址空间中,动态地集成组件。COM为在一个单一的应用程序中复杂客户二元组件的动态使用提供支持。组件交互是基于 OLE2界面和协议的。虽然COM使用OLE2界面和协议,但我们也必须知道COM不是OLE。DCOM是COM的扩展,支持基于网络的交互,允许通过网络进行进程处理。
●CORBA
公共对象请求代理体系结构是由对象管理工作组(OMG)开发的。OMG是由成千上百个公司组成的组织,他们致力于构建分布式对象计算的标准体系结构。CORBA基于对象管理体系结构,对象管理体系结构由OMG在1991年发布。CORBA为厂商提供一个标准框架,使他们使用不同的语言、操作系统、和硬件开发出来的应用系统,仍然具有可移植性和互操作性。
技术观点 ●COM/DCOM
COM允许客户调用服务,服务是由COM兼容的组件通过定义一个二元兼容规范和实现过程来提供的。COM兼容组件(COM对象)提供了一系列的界面,允许客户通过这些界面来调用相关的对象。
COM定义了客户和对象之间的二元结构,并且作为用不同程序语言书写的组件之间的相互操作的基础,只要该语言的编译器支持微软的二元结构。
COM对象可以具有复杂的界面,但是每一个类必须具有它自己唯一的类标识符(CLSID),并且它的界面必须具有全球唯一的标识符(GUID),以避免名字冲突。对象和界面是通过使用微软的IDL(界面定义语言)来定义的。COM体系结构不允许轻易地对界面作修改,这种方法有助于防止潜在的版本不兼容性。COM开发者,为了给对象提供新的功能,必须努力为对象创建新的界面。COM对象是在服务器内运行的,服务器为客户访问COM对象提供了三种方法。
在服务器中处理(In-process server):客户和服务器在相同的内存处理进程中运行,并且通过使用功能调用的方法彼此通信。
本地对象代理(Local Object Proxy):允许客户使用内部进程通信方法访问服务器,而服务器运行于同一物理机器的一个不同的进程中。这种内部进程通信方法也称为廋远程过程调用。
远程代理对象(Remote Proxy Object):允许客户访问在另外机器上运行的远程服务器。客户和服务器的通信使用分布式计算环境RPC。 远程对象支持这种方法,被称为DCOM服务器。
COM的两个主要的扩展:MTS 和MSMQ是由DCOM提供的。DCOM服务器对象支持多线程。MTS(Microsoft Transaction Server )运行于Windows NT Server,提供事务导向的进程,并且是基于DTC(Distributed Transaction Coordinator,分布式事务协调)的。MTS作为一个实时中间环境被包含于DCOM中,提供对MSMQ 的异步应用操作,以及针对RPC(Remote Procedure Call)的同步操作。DCOM中还内建了远程垃圾收集的功能,使之成为一个健壮的系统。
●CORBA
CORBA被设计和架构为服务于用不同程序语言书写、运行于不同平台上的对象系统。CORBA依赖于ORB中间件在服务器和客户之间进行通信。ORB扮演一个透明地连接远程对象的对象。每个CORBA对象提供一界面,并且有一系列的方法与之相联。ORB负责为请求发现相应的实现,并且把请求传递给CORBA服务器。ORB为客户提供透明服务,客户永远都不需要知道远程对象的位置以及用何种语言实现的。
CORBA是基于对象管理体系结构的(Object Management Architecture,即OMA),OMA为构建分布式应用定义了非常广泛的服务。OMA服务为划分为三层,分别称为CORBAServices, CORBAFacilities, 和 ApplicationObjects 。当应用程序需访问这些服务时,就需要ORB通信框架。这些服务在OMA中实际上是不同种类的对象的定义,并且为了支持分布式应用,定义了很广泛的功能。
CORBAServices(CORBA服务):是开发分布式应用所必需的模块。这些服务提供异步事件管理,事务、持续、并发、名字、关系和生存周期的管理。
CORBAFacilities(CORBA工具):对于开发分布式应用不是必须的,但是在某些情况下是有用的。这些工具提供信息管理、系统管理、任务管理和用户界面。
ApplicationObjects(应用对象):主要为某一类应用或一个特定的应用提供服务。它们可以是基本服务、公共支持工具或特定应用服务。
CORBA界面和数据类型是用OMG界面定义语言定义的。每个界面方法也是用OMG IDL定义的。IDL是CORBA体系结构的关键部分,它为CORBA和特定程序设计语言的数据类型之间提供映射。IDL也允许对原有代码实行封装。IDL是一个面向对象的界面定义语言,具有和C++相类似的语法。由于所有的界面都是通过IDL定义的,CORBA规范允许客户和对象用不同的程序设计语言书写,彼此的细节都是透明的。CORBA在不同对象请求代理之间使用IIOP(Internet Inter-ORB Protocol)进行通信,使用TCP作为网络通信协议。
CORBA组件包括ORB核心,ORB界面,IDL存根,DLL(Dynamic Invocation Interface,动态调用界面),对象适配器,IDL骨架,DSI(Dynamic Skeleton Interface,动态骨架界面)。 CORBA运行结构(ORB核心)是由特定开发商决定的,不是由CORBA定义的。不管怎样,ORB界面是一个标准的功能界面,是由所有的CORBA兼容ORB提供的。IDL处理器为每个界面产生存根。这就屏蔽了低层次的通信,提供了较高层次的对象类型的特定API。DLL是相对于IDL存根的另一种方法,它为运行时构建请求提供了一个通用的方法。对象适配器,为把可选的对象技术集成进OMA提供支持。IDL骨架类似于IDL存根,但是,它们是工作于服务器端的(对象实现)。对象适配器发送请求给IDL骨架,然后,IDL骨架就为之调用合适的对象实现中的方法。
本文地址:http://com.8s8s.com/it/it3199.htm