一种DCOM与CORBA集成的应用服务器实用模型研究

1 分布式计算环境与多层结构的发展背景

早在70年代末第一个关系型数据库管理系统出现时,计算机的数据库时代就已悄然开始。那时的观念是由应
用程序与关系型数据库共享统一文件系统,这种数据处理的模式一般称为单层结构(1 -Tier)。 由于这种
结构的数据库程序占用计算机资源较多也不利于多用户环境数据库的访问,于是在80年代中期,数据库应用
开始转向C/S(Client/Server) 结构, 也就是所谓的两层结构(2-Tier)。 这种结构在近十年内不但得到
了广泛的运用, 而且相当成功。 然而,在两层C/S 结构成功的背后却逐渐暴露出其构架上的缺陷。其中最
明显的问题表现在应用程序的伸缩性和维护方面。 例如,一个跨国企业如何把数据库管理系统及其应用程序
分散到十分缓慢的网络上, 如何控制数据的统一性和完整性; 一旦应用程序有任何改动,维护人员就必须
修改每一个客户端上的应用。特别是每一个客户端往往必须配置数据库的客户端服务或ODBC/BDE软件,使得客
户端占用资源很多,配置也很繁琐。
90年代中期后,由于分布式计算技术和Web的迅速发展,数据库应用系统在传统的 C/S 结构的基础上,出现了
两个重要转变:一是在客户层与数据库服务器层之间增加了应用程序服务器层,应用程序服务器包括了统一
的界面、 业务规则的封装和数据处理逻辑的规定等等。这种新的结构就是所谓的3层或多层结构。多层应用
服务技术允许分割应用程序,本地计算机上无须安装一整套数据库客户工具, 就可以在另一台机器上存取
数据。 同时它允许对业务规则和进程进行集中管理,并在整个网络上分发、 实现进程负载的动态调节。 
二是随着Internet/Intranet的流行,越来越多的客户需要数据库的前端能够在浏览器中运行,于是出现了
B/S(Browser/Server)结构。应用服务器的出现使得原来占用资源很多的应用程序客户端(称作肥客户)
转变成占用资源较少的瘦客户,也使得瘦客户可以在浏览器中运行。这两个转变实际上同时发展并且相互
推进,可以认为,CGI Web数据库访问方案是三层结构与B/S结构共同的鼻祖。
在多层分布式计算环境中,目前有两种协议处于主导地位,以下分别阐述。

1.1 DCOM(Distributed Component Object Model)
DCOM是微软,DEC等公司的分布式计算策略。1996年Microsoft提出的DCOM(分布是组件对象模型)是基于以
下一个简单的思想:在DCOM协议的支持下,不同应用程序可以透过网络进行互操作。这样我们可以在一个应用
程序中(或DLL连接库)创建对象,而从驻留在另外一台机器上的程序中通过接口调用此对象的方法。DCOM
基于COM(组件对象模型),而COM正是微软的核心技术OLE与ActiveX的基础,并且已经成为Windows不可缺少
的组成部分。图1显示了DCOM的整体结构:COM运行库向客户和组件提供了面向对象的服务,并且使用RPC和
安全机制产生符合DCOM线路协议标准的标准网络包。
图1 DCOM 架构
COM规范可被视作一种对象的层次结构,正如MFC或是VCL,但COM与MFC或是VCL不同在于COM规范具有开发语
言无关性,故有很多工具可以用来创建COM和DCOM组件-- Visual C++、RAD(Rapid Application 
Development)工具(如Visual Basic、Delphi/CBuilder及PowerBuilder),同时已经有大量的已被建立、
商品化了的ActiveX组件可供使用。尽管DCOM首先适用于Windows环境,它也正在扩展到多种UNIX(如
Solaris)平台。

1.2 CORBA(Common Object Request Broker Architecture)
CORBA 技术规范是OMG(Object Manegement Group)的产品,OMG是一个包含800多个组织的联合协会,
CORBA 技术得到许多著名的计算机公司的支持,Oracle的NCA(Network Conputing Architecture)的核心
技术也在CORBA。CORBA 是一个完全的分布式对象平台。CORBA协议的核心部件称作对象请求代理ORB(Object
Request Broker)。CORBA的对象请求代理(ORB)将客户端程序与它将调用的对象连接起来。客户端通过
事先定义好的接口请求对象服务,接口是通过OMG的接口描述语言(IDL)书写。客户端通过IDL存根(STUB)
或通过DII(Dynamic Invocation Interface)与ORB核心通信,由于IDL存根表示了客户端实现语言与ORB核
心实现语言的对应,故客户端可以用ORB核心支持的任一种语言进行开发。

2 我们的做法--DCOM 与CORBA集成的应用服务器模型的建立

随着分布式计算对于企业应用拥有越来越重要的作用,各种标准之争越来越火热,最为明显的就是DCOM
与CORBA。但由于在目前的形势下,无论是CORBA还是DCOM均还不是事实上的标准,故目前企业开发的应用最
好能兼顾这两种标准,实现DCOM与CORBA的集成。目前比较流行是COM-CORBA桥或利用COM和CORBA兼容的API
技术方案,目前有一些公司已提供成熟的商业产品,但这种方案会造成缓慢的程序运行效率,也不利于系
统的扩展,并且随着COM+标准的来临,很多COM兼容性问题都将过时。
所以本系统模型采用了一种全新的解决方法,我们在应用服务器中直接对两种标准提供支持(当然也可只支
持其中一种)。只有这种方案才能保证分布是程序的运行效率,特别是在于需要大量数据进行处理的系统相
连上尤为明显。这种方法思想为:在一个应用服务器中同时提供DCOM与CORBA接口,同时支持DCOM客户与
CORBA客户。实现上可以考虑Microsoft 的VC或Borland的Delphi/Cbuilder,我们对此的实现方案应用了
Inprise的Midas技术。
我们在开发CIMS-MRPII的成本管理系统中,构造了一个能同时支持DCOM/CORBA标准的应用服务器模型,由于本
系统涉及大量复杂的对树状BOM表的查询与更改,有很多算法需要占用大量的CPU资源,我们采用放置在较高性
能多CPU处理器上的应用服务器集中处理与数据库的连接与查询,客户端将SQL查询和修改语句动态传给应用
服务器,再由应用服务器集中与数据库交易。当计算的每一阶段完成后,应用服务器将中间结果传给客户端,
客户端可根据此中间结果再构造算法所需的另外的SQL查询和修改语句,由于客户端不与数据库直接连接,
顾客户端无需附加配置诸如ODBC/BDE等动态连接库,故客户端是真正的瘦客户。为使应用服务器实现DCOM与
CORBA 的双重支持,就必须使应用服务器同时具有DCOM和CORBA接口,我们的做法如下:
首先,在Delphi4/Cbuilder4利用Remote Data Module先构造一个DCOM应用服务器,通过Tprovider提供SQL接
口。特别是DCOM应用服务器同时作为OLE自动化服务器,可以被客户端透明激活。
然后再使此应用服务器的类型库同时提供CORBA支持。
最后,可以使用Type Library工具,提供 CORBA IDL 接口描述语言和微软MIDL接口描述语言,以便今后可以
使用合适的工具重新编译应用服务器。
由于本应用服务器同时提供DCOM与CORBA 接口,以下具体就这两种不同协议下客户端的建立和他们怎么与应
用服务器通信尤其是从Internet上作一讨论。

2.1 基于CORBA 的客户端与应用服务器的互操作
由于CORBA 对象之间可以达到完全的互操作,CORBA对象的通信基于IIOP(Internet Inter-ORB Protocol)
协议。我们通过带Javabean的浏览器客户端程序,与支持CORBA的应用服务器通信,从而实现Java与CORBA的
互操作。客户端的程序通过本机的ORB请求得到其他CORBA对象的服务,通过IIOP协议,客户端的ORB 可以穿
过网络寻找其他系统的ORB及可以提供服务的服务器对象。一旦ORB找到可以提供服务的服务器对象,客户端
对象就可以与服务器对象进行通行,仍然基于IIOP协议。
由于当今各种流行的Unix平台(如Linux,Solaris)普遍拥有Netscape浏览器,从而我们可以很容易的
从Unix客户端访问CORBA服务器。正是由于这种CORBA与Java的互操作,使得我们的企业应用跳出Windows平
台限制,实现了企业信息集成中需要的平台无关性。

2.2 基于DCOM客户端与应用服务器的通信
对于无需相互作用的,文本的或者简单的图形信息,HTML页面可以为用户访问所需信息提供一个著名而有效
的方式。对于更加复杂、结构化和相互作用的信息来说,如分布式多层应用系统,我们可以用ActiveX组件
来扩展HTML页面,使其以一种用户友好、安全和有效的方式真正的分布式任务。可以在客户端应用一些简单
的事务规则来为用户提供迅速的反馈。更加复杂的事务规则能够透明地激活DCOM上应用服务器的组件,特别
可以采用Active Form技术直接将Vcl控件转为ActiveX控件嵌入HTML页面。不过需要强调的是,因为DCOM的
语言独立性,这些ActiveX组件可以用任何一种编程语言来完成,其中包括C++、Delphi,Powerbuilder,
Java、Visual Basic或者Cobol。现存的组件(ActiveX控件)能够被结合到客户端或者用Visual Basic 
Script或Java Script写的服务器端顾客组件上。以下为原理图

图2 ActiveX Dcom 访问示意图

值得注意的是,由于DCOM主要实用与Window NT/95/98环境,平台的专有性无疑是其最大的缺陷。另外,
采用本模型可以拥有分布计算的公文包的支持, 随着企业的发展,企业内有很多职员的工作地点不是固定的,
越来越多的人拥有了笔记本电脑,为适应这种潮流,我们的应用服务器支持一种称作公文包的移动计算工作方
式。公文包模式是数据库缓存更新的发展,我们所熟悉的Office软件中也有这样一个公文包,可以预期随着移
动用户的增加,公文包模式的支持将是企业应用服务器不可少的功能之一。为采用此种方式,只需如下操作即
可: 
(1) 笔记本电脑在公司的局域网内与应用服务器相连并且从应用服务器上获得数据,然后将缓存在本地的数据
即进行文件存盘,存盘后即可断线。
(2) 在断线后, 拥有笔记本电脑的职员就可以在任何地点,如飞机上,从存盘过的文件中读出数据,并可对数据
进行各种离线处理和分析。
(3) 当拥有笔记本电脑的职员回到公司并和公司内应用服务器重新连接后,可以一次新的将离线所作的处理更
新到数据库服务器中.

3 总结

通过本模型应用服务器的建立,可以非常快速地开发出企业环境下所需的分布式应用,而其可行的要点
在于DCOM,CORBA这两种竞争的分布式计算标准在原理和功能上出奇的接近,而采用本模型又恰能使这两种模
型的优势互为补充,并为下一代即将流行的操作系统平台Windows2000(内置com+)作好扩充的准备。

参考文献
1 Best practices in distributed object application development Tom Albertson 1998
2 Borland Delphi Developer Guide Inprise Corporation 1998

作者简介
李刚: 东南大学计算机科学与工程系硕士研究生。目前研究方向分布计算,数据库技术。
王茜: 东南大学计算机科学与工程系教授。 

原文地址:https://www.cnblogs.com/jjkv3/p/2539998.html