关键词: Web 分布式对象 CORBA IDL PDMS
1 引言
Internet/Intranet 的飞速发展使得 World Wide Web 应用日益广泛,从而引发了一场 Web 技术的革命。目前,各种新型的 Web 应用,如电子出版,电子商务等层出不穷,许多应用系统也纷纷集成了 Web 浏览器和服务器, Web 技术正以日新月异的速度变化着。 Web 已不再仅仅是超媒体信息的浏览工具,它正逐步成为人们事务处理的通用前端。在分布式环境中,异构性是一个十分明显的特点,一个典型的分布环境包括有大型主机、 UNIX 工作站和 PC 机,各种机器所采用的操作系统和网络通信协议也是千差万别。在这样的异构环境下实现信息和软件资源的共享将十分困难,而一个健壮的分布式计算框架将为分布式应用软件的开发带来巨大的好处。由于分布式对象技术,特别是 CORBA 技术对于提高 Web 的网络计算能力有着无可比拟的巨大作用,它已开始进入 Web 领域并投入应用。
2 分布式对象技术
分布式对象技术主要是在分布式异构环境下建立应用系统框架和对象构件,在应用系统框架的支撑下,开发者可以将软件功能包装为更易管理和使用的对象,这些对象可以跨越不同的软硬件平台进行互操作。目前主要的分布式互操作标准有 Microsoft 的 OLE/COM/DCOM 标准、 Sun 公司的 Java RMI 标准和 OMG 组织的 CORBA 标准。下面以 CORBA 为代表论述分布式对象技术的体系结构,并对三种标准加以比较。
2.1 CORBA 体系结构
CORBA 的体系结构如图 1 所示。在该体系结构中主要描述了以下内容:
(1) 接口与 IDL 语言
接口是 CORBA 系统中一个非常重要的概念,因为它代表了对象的服务能力,为客户提供了操作对象的唯一方法。简单的说,接口就是一组相关函数的集合,接口中每一个函数都给出了详细的说明,包括函数名、参数个数、参数类型、返回类型以及可能抛出的异常。必须指出的是接口只定义了函数的原型,并没有给出具体的实现,这就留给开发者足够的灵活性来提供他们自己的函数实现。接口是通过一种中性的接口描述语言( IDL , Interface Description Language )来定义的。虽然 IDL 语言只提供了被 ORB 操作的对象的概念框架,但是 ORB 在运行时并不需要 IDL 的源代码。只要桩例程或运行状态下接口库中的等价信息是可用的, ORB 就能通过特定的方式完成其功能。
(2) 桩和构架
桩( Stub )可以看成是实际对象在客户进程中的映像,其中的接口必须是预先定义好的,因此它为客户提供了一种静态的调用方式。与桩相对应的构架( Skeleton )为服务器提供了一种静态的实现方式。 IDL 编译器翻译描述对象接口的 IDL 文件,生成对应具体编程语言的 IDL 桩和 IDL 构架。桩负责将客户请求进行编码,发送到对象实现端,并对收到的结果进行解释,然后把结果或异常返回给客户。与此相反,构架对客户的请求进行解码,定位目标对象和请求执行的对象方法,激活该方法,然后把结果或异常信息编码返回给客户端。
(3) 动态调用接口和动态构架接口
与桩和构架不同,动态调用接口( DII , Dynamic Invocation Interface )和动态构架接口( DSI , Dynamic Skeleton Interface )提供了动态调用的方式和动态实现的方式,它们使得用户可以在事先不知道对象接口信息的情况下通过查询接口库或采取其它手段动态地获得对象接口信息,然后使用 ORB 核心接口中的 DII 动态调用方法构造客户请求并发送到对象实现。在对象实现方可以使用 DSI 的动态分发机制处理客户方的请求。与静态方式相比,动态方式提供了很大的灵活性,但是它的工作效率没有静态方式高。另外,实现系统的接口大多可以预先确定,所以大部分情况下都是采用静态方式。
客户方与服务器方所采用的方式并不一定要一一对应,也就是说,客户方支持静态和动态两种调用方式,服务器方也支持静态和动态两种实现方式,经过组合得到的四种方式都可能出现,例如,客户方使用静态调用方式,而服务器方使用动态构架接口是允许的,反之亦然。
(4) ORB 核心和对象适配器
与 Unix 的实现机制相类似, CORBA 规范将那些相对固定的、单一的功能提取出来交由 ORB 内核实现以保证它的可靠性、高效性与可重用性。作为整个 CORBA 系统的基础, ORB 内核通过屏蔽诸如服务器位置、实现方式、通信协议等具体细节为客户方与服务器方之间的通信提供了透明的传输机制。当前的应用系统存在着各种不同的对象实现方式,例如可执行程序、面向对象的数据库等,他们有不同的定位对象、解释对象、激活对象的方法。因此,如果将现存的所有对象实现的解决方案都包含在 ORB 内核中,它必将非常庞大、冗余并且难以移植。为了确保 ORB 内核的高效与可移植性,一个称为对象适配器( OMA )的中间层加入到 ORB 与对象实现之间。定位目标对象的任务从 ORB 内核中分离出来交给对象适配器来完成。
2 .2 CORBA 与 RMI 和 DCOM 的比较
RMI 直接把分布式对象模型嵌入到 Java 语言内部,使得 Java 程序员可以自然地编写分布式程序,不必离开 Java 环境,或者涉及 CORBA IDL 以及 Java 到 CORBA 的类型转换。然而 RMI 不遵守 CORBA 标准,基本上是 Java-to-Java 技术,它需要客户方程序和服务方程序都用 Java 编写,难以实现与其它语言编写的对象之间的互操作。
DCOM 则是从 COM 改造过来的。 Microsoft 把 DCOM 作为开发 Internet 和组件的基础,目前已搭载到 Windows NT 4.0 以上版本和 Windows 98 中。 COM 这一技术部分是作为规范,它定义对象实现的二进制标准,用于单机上应用之间的通信,对象实现与使用的语言无关。 DCOM 是 COM 的分布式扩展,在 DCE RPC 之上构造对象的远程过程调用层支持对远程对象的访问。一个 DCOM 对象(又称为 ActiveX 对象)是支持一个或多个界面的组件, DCOM 界面指预先规定的一组相关函数。 DCOM 类实现一个或多个界面,由一个又一个 128-bit 类 ID 唯一标识。客户程序通过获得指向 DCOM 对象的界面的指针与该对象交互,通过指针调用其操作。客户程序从不直接访问对象。 DCOM 对象不支持对象 ID ,因此,客户程序不能与某个特定的对象发生联系。
3. 分布式对象技术与 Web 技术 的集成
Web 的发展已经历了两个发展阶段。 ①静态的信息发布阶段。服务器只提供信息的存储和发布功能,用户通过 浏览器被动地获取信息,功能单一,缺乏交互性。 ②动态的信息发布阶段。用户可以通过 CGI 或 JDBC 等多种手段与 Web 服务器,甚至后端数据库直接交互,极大地增强了客户方的可操作性。但是, HTTP 协议是一种无状态的协议,很难支持联机处理和系统集成。分布式对象技术与 Web 之间并不存在着内在的必然联系,但是这两者相结合后,却产生了诱人的技术魅力。
第一,它可以消除 CGI 的瓶颈,使客户端能直接调用服务器上的方法。客户端可以利用预编译过的桩( Stub )传递参数或利用 CORBA 的动态调度服务在运行中产生参数,服务器通过一个预编译的程序直接接受调用。与 HTTP/CGI 比较起来,客户 / 服务器的开销非常小。在 CGI 中,一个 Applet 每次调用服务器上的方法必须要启动一个新的进程请求,而 CORBA 不需要, CGI 不能维护客户端调用间的状态, CORBA 则可以做到。
第二, CORBA 可以提供可伸缩的服务器到服务器的基础结构,对象也可以利用 CORBA ORB 进行通信。这样,为了均衡来自客户机上的请求负荷, ORB 可以让这些对象运行在多个服务器上,而且, ORB 还可以根据各个服务器的负荷情况进行调度。而 CGI 面对要响应的成百上千个请求,无法将负载分散到多个进程或多个服务器上,这就是 CGI 运用的瓶颈。
第三, CORBA 可以采用分布式对象结构扩充 Java ,目前, Java Applet 还不能利用远程方法调用进行跨地址空间的通信,而 CORBA 可以使 Java Applet 能够和用不同语言编写的其它对象进行跨地址空间及网络的通信,同时还可以提供强大的分布式对象服务。
CORBA 和 Web 相结合产生了面向对象的 Web 体系结构,如图 2 所示,它由客户层( Web 浏览器)、应用层( Web 服务器和应用服务器)和资源层(数据库服务器)三层构成。客户层通过 HTTP 协议访问 Web 服务器,从 Web 服务器下载 HTML 页面,页面中内嵌的 Java Applet 通过 CORBA 内部通信机制( IIOP )访问应用层的对象和服务。应用层由 Web 服务器和应用服务器构成,主要提供安全管理,事务处理和各种访问服务。 Web 服务器提供常规的页面访问请求。应用服务器利用对象通信协议在 Web 浏览器和资源层之间提供事务处理和数据库访问的功能。资源层中主要包括数据库服务器和数据库。数据库服务器由会话管理、公共语言组件、数据存储和访问组件构成。会话管理处理来自应用层的请求。公共语言组件解释来自客户端的请求,并将它们转换成一种适于传递到数据存储的形式。数据访问和存储执行请求包括访问数据库和进行事务处理。
4 基于 CORBA 的 Web 计算模式实例分析
受国家 863 计划 CIMS 专家组的委托,由东南大学和同创集团软件事业部联合开发研制的“基于 CORBA/Web 技术的企业级和部门级产品数据管理系统”,此项目得到八六三计划专家委员会的高度重视,被列为八六三重大目标产品项目。
产品数据管理系统( PDMS , Product Data Management System )以产品为中心,通过计算机网络和数据库技术,把企业生产过程中所有与产品相关的信息和过程集成起来,统一管理,使产品数据在其生命周期内保持一致、最新和安全,实现整个企业信息的集成,为工程技术人员提供一个协同工作的环境,从而缩短产品研发周期、降低成本、提高质量,为企业赢得竞争优势。
下面简要介绍基于 CORBA/Web 技术的 PDMS 的研制开发步骤:
( 1 )通过对应用需求的分析,归纳得到 PDMS 的服务功能及其描述。在功能模块上, OMG 组织提出了“ PDM 使能器”规范,将 PDM 的功能通过八个使能器(工程活动需求、工程变更、制造实现、文档管理、产品结构定义、配置管理和测试维护等)封装起来。使它们能够支持企业制造过程模型中的产品开发过程。本系统的开发参照“ PDM 使能器”规范,保证了与其它 PDMS 的交互性和通用性。
( 2 )根据得到的服务功能描述,使用标准的 IDL 语言进行描述,从而得到应用系统服务功能的 IDL 文件。 IDL 文件中包括了 PDMS 服务的数据类型和服务接口,服务接口又可以分为属性和操作。 IDL 语言是 CORBA 规范中定义的一种中性语言,它用来描述对象的接口,而不涉及对象的具体实现。通过 CORBA 软件总线系统提供的 IDL 编译器工具对 PDMS 服务的 IDL 描述文件进行转换,得到客户端桩文件和服务器端构架文件。在 CORBA 中定义了 IDL 语言到 C 、 C++ 、和 Java 等语言的映射。本系统中服务器端的构架文件采用 C++ 的映射形式,以充分利用 C++ 语言在对象实现方面的优势;客户端的桩文件采用 Java 的映射形式,以充分利用 Java Applet 在 Web 上的独特功能。
( 3 )完成服务器端方主程序的编写,通过将服务器端功能实现代码与所生成的服务端构架代码联合编译得到实现相应系统服务功能的软构件,随后使用对象管理工具将该软构件注册到 CORBA 软件总线支持环境中,以供其它应用调用和访问。
( 4 )完成客户方 Java Applet 的编写,该 Applet 根据用户的需求向服务器方发出请求,并把请求结果返回给用户。由于绝大多数的浏览器对从网上下载的 Java Applet 采取一种称为“ Sand-Box ”的安全模型,使得 Java Applet 既不能与宿主机以外的计算机建立网络连接,也不能访问本地文件系统、本地设备。而 CORBA 系统的特点是服务对象的分布性和远程对象定位的透明性。本系统通过 CORBA 系统提供的 IIOP 代理( Gatekeeper )来解决安全限制的约束,它负责接受 Applet 发来的 IIOP 报文,分析报文内容,将其转发给位于其他主机上的 Applet 无法直接调用的 CORBA 服务对象实现,并将服务对象实现返回的 IIOP 报文送交 Applet 。
( 5 )将客户方程序( Java Applet )与前面生成的客户端桩代码联合编译。编写客户方的 Web 网页并在其中嵌入 Java Applet 。网页制作工具采用 FrontPage2000 ,利用 VbScript 实现与用户及 PDMS 对象实现的交互。
( 6 )发布制作好的网页至 Web 服务器上,即可以通过 Web 浏览器使用该 PDMS 。
5 结束语
分布式对象技术与 Web 的结合,大大地方便了 Web 应用的开发、发布和维护,有助于在 Web 上建立分布式对象环境,推动 Web 进入动态的应用发布阶段,从而极大的提高了 Web 的分布计算能力。
参考文献
[1]Object Management Group. Common Object Request Broker: Architecture and Specification (Revision 2.2), 1998
[2]Microsoft Corporation InfoView [M]. 微软公司, 1997.
[3]Randy Otte, Paul Patrick, Mark Roy. Understanding CORBA. prentice Hall, 1996
[4]OMG CORBA/IIOP 2.2 Specification.http:\\www.omg.org, 1998.2
[5] 汪芸 .CORBA 技术及其应用 [M]. 南京 : 东南大学出版社 , 1999