关键词 中间件;分布式系统;组件 ; EJB
1 引言
分布式系统的信息处理分布在许多计算机上而不是局限在单一机器上。目前一般类型的分布式系统体系结构可以分为两种。一种是客户机 / 服务器( C/S )体系结构,它由客户端提供用户界面、运行逻辑处理应用,而服务器接受客户端 SQL 语句并对数据库进行查询,然后返回查询结果。 C/S 结构曾给人们带来许多便利,但随着业务处理对系统提出更高要求以后,它也逐渐暴露出其客户端逐渐庞大和服务器负担过重的缺点,如灵活可扩展的工作流定制、保证数据在网络传输的稳定性和准确性、应付峰值数据的高负荷处理和平衡负载等诸如此类的要求, C/S 结构就难以满足。
2 多层分布式体系结构
为了解决两层 C/S 分布式体系结构存在的不足,提出了三层或多层分布式对象体系结构,在这种情况下,业务逻辑从客户端分离出来,移动到中间层。于是,在服务器和客户机之间增加了业务逻辑层或其它应用服务层。系统就成为了具有客户端的表示层、中间的业务逻辑层和数据库服务器的三层或多层体系结构,如图 1 所示:多层分布式系统体系结构的一般模型。多层体系结构将客户和资源分开,降低了服务器的负载,避免了服务器的性能缺陷对整个系统性能的影响,在多个服务器上分布应用程序处理的多层可变结构比二层的体系结构的伸缩性和扩展性更强。
在多层分布式系统中,不同的组件可能用不同的语言来实现,且这些组件可能运行在不同类型处理器上。数据模型、信息表示法以及通信协议可能都不一样。因此,多层分布式系统就需要某种软件来管理这些不同部分,确保它们能通信和交换数据。中间件就是这样一种软件,它位于系统的不同分布式组件之间。
中间件能够使应用系统相对独立于计算机软硬件平台,为大型分布式应用搭起一个标准的平台,把企业分散的系统技术组合在一起,从而实现企业应用软件系统的集成。中间件具有标准的程序接口和协议,使不同硬件和操作系统平台上分布式应用的数据共享和互操作。中间件在操作系统、网络和数据库之上,应用软件之下,总的作用是为处于自己上层的应用软件提供运行和开发环境,帮助用户灵活、高效的开发和集成复杂的应用软件。
随着分布式技术和面向对象技术的结合,产生了大量基于分布式对象中间件的模型。目前主要的分布式系统中间件技术标准有: Microsoft 的 COM/DCOM 技术、 SUN 的 EJB 技术和 OMG (对象管理集团)的 CORBA (公共对象请求代理体系结构)技术为代表的三种基于中间件技术的分布式模型框架。
3 EJB 技术规范
EJB ( Enterprise Java Beans )是 J2EE 的核心技术之一,它是建立基于 Java 的服务器端组件的标准。 EJB 是以部件为基础框架,其中每个部件都是分布式对象,可以扩展,也可以适配在不同应用中使用,大大方便了企业应用开发。 EJB 不局限于一种特定的操作系统,也不局限于任何一种特别的机构、服务器解决方案、中间件或者通信协议,是一种可重用的具有高度可移植性的组件。 EJB 组件模型包含了 EJB 服务器、容器、 Home 接口、 Remote 接口等。
EJB 服务器是管理 EJB 容器的高端进程或应用程序,并提供对系统服务的访问。 EJB 服务器实际是各种支持 EJB 安装的服务的集合,这些服务包括分布式事务管理、分布式对象管理和这些对象的分布式调用以及低层次的系统服务。
EJB 容器是管理一个或多个 EJB 类和实例的抽象。它通过规范定义的接口使 EJB 类访问所需的服务。 EJB 容器管理 Enterprise Bean 对象的生命周期,协调分布式事务和实现对象安全性。
远程接口( Remote Interface )列出了 EJB 类中的商业方法。 EJBObject 实现远程接口,并且客户通过它访问 EJB 实例的方法。 EJB 类开发者定义远程接口,容器开发商提供产生相应的 EJBObject 的方法。客户端不能得到 EJB 实例的引用,只能得到它的 EJBObject 实例的引用。当客户端调用一个方法, EJBObject 接收请求,把它传给 EJB 实例,同时提供进程中必要的包装功能。客户端应用程序通过 Home 对象来定位、创建、删除 EJB 类的实例,通过 EJBObject 来调用实例中的商业方法。
Home 接口列出了所定为、创建、删除 EJB 类实例的方法。 Home 对象是 Home 接口的实现。 EJB 类开发者必须定义 Home 接口。容器厂商应该提供从 Home 接口中产生 Home 对象的实现方法。
EJB2.0 规范定义了三种不同的企业 Bean ,分别是会话 Bean 、实体 Bean 和消息驱动 Bean 。会话 Bean 主要负责模拟商业过程,实现商业逻辑,处理商业规则和工作流。会话 Bean 又分为两个子类,无状态会话 Bean 和有状态会话 Bean 。实体 Bean 表示持久数据,为商业数据建模。按持久性划分,实体 Bean 又可以分为自管理的持久性实体 Bean 和容器管理的持久性实体 Bean 。消息驱动 Bean 和会话 Bean 相似,也执行一些商务逻辑,其区别在于只能够通过给这些 Bean 发送消息来调用它们,且实现了异步处理机制。从分布式计算的角度看, EJB 即提供了分布式技术的基础,又提供了对象之间的通信手段。
EJB 技术的特点: ① 可移植性。由于 EJB 规范颁布了一组明确的 EJB 容器和 EJB 组件之间的契约,这保证了 EJB 组件在不同 EJB 服务器上可移植性。 ② 平台独立性。 EJB 体系结构完全独立于任何特定的平台、协议和中间件等基础设施。一个平台上开发的应用程序不做修改就可以移植到另一平台,完全实现了“一次编写,处处运行”的目的。 ③ 简化了分布式对象的开发、部署和访问。 EJB 分布式对象的开发人员只要按照 Enterprise Java Bean 建立的契约和协议实现对象。这使整个开发和管理变得简单,大大降低系统建设成本、减小开发周期。
4 CORBA 技术规范
CORBA 是 OMG 组织在 1991 年提出的公用对象请求代理程序结构技术规范。 CORBA 有很广泛的应用,它易于集成各厂商的不同计算机,从大型机一直到微型内嵌式系统的终端桌面,是针对大中企业应用的优秀体系结构。
CORBA 的底层结构是基于面向对象模型的,由 OMG 接口描述语言( OMG Interface Definition Language, OMG IDL )、对象请求代理( Object Request Broker, ORB )和 IIOP 标准协议( Internet Inter-ORB Protocol )3个关键模块组成。
使用接口描述语言编写的对象接口,使得与语言无关的独立性成为可能。 IDL 使得所有 CORBA 对象以一种方式被描述,仅仅需要一个由语言( C/C++ 、 CORBA 或 Java )到 IDL 的“桥梁”。 CORBA 对象的互通要以对象请求代理为中介,这种互通信可以在多种流行通信协议之上实现。在 TCP/IP 上,来自于不同开发商的 ORB 用 IIOP 标准协议进行通讯。
为了保持 CORBA 的商业中立性和语言中立性,必须有一个中介,存在于像 C++ CORBA 服务器代码和 Java CORBA 客户机这样的实体中间,这就是 IDL 。一个底层对象的若干相关方法和属性被 IDL 集入一个单一接口。一旦 IDL 接口定义完成,它可以以 Sub 码或框架代码的形势编译成所选用的语言。在所有的 ORB 中都有 IDL 编译器。 IDL 不同于其它的面向对象程序设计语言,我们不能用它指定所定义的类或方法的具体实现。 IDL 是一种描述性语言而不是编程语言,用它定义底层对象接口,使得接口定义与对象实现分开。 IDL 编译器编译 IDL 代码,生成相应语言的头文件及客户代理和服务器代理对象。
CORBA 技术规范利用了当今软件技术发展的最新成果,在基于网络的分布式应用环境下实现应用软件的集成,使得面向对象的软件在分布、异构环境下实现重用、可移植和互操作。其特点如下: ① 在 CORBA 规范中引入了代理( Broker )的概念,一个代理至少可以完成对客户方提出的抽象服务请求的映射;自动发现和寻找服务器;自动设定路由,实现到服务器方的执行。 ② 实现客户与服务对象的完全分开,客户不需要了解服务对象的实现过程以及具体位置。 ③ 应用程序间的统一接口。 CORBA 提供软总线机制,这是系统定义的一组接口规范,使得在任何环境下,采用任何语言开发的软件只要符合接口规范的定义,均能集成到 CORBA 系统中。 ④ CORBA 采用面向对象的软件实现方法开发应用系统,实现对象内部细节的完整封装,保留对象方法的对外接口定义。 ⑤ 分层的设计原则和实现方式。 CORBA 规范只是针对 OMA 体系结构中的 ORB 制定的工业标准,而面向对象定义则可以在 OMA 的应用对象或应用开发环境中逐步分层定义和实现。
5 COM/DCOM 技术规范
COM ( Component Object Model ,组件对象模型)是 Microsoft 软件组件标准,是构造二进制兼容软件组件的规范。 COM 的体系结构包括统一数据传输、持久存储和智能命名、 COM 核心等。其中 COM 核心包括服务控制管理、接口代理、接口基和 COM 库。 COM 核心定义了 COM 对象与使用者如何通过二进制标准接口进行交换的规格说明。持久存储通过 Istorage 和 Istream 接口提供一个“文件系统”。智能命名通过对象实现接口,使用户可以在以后重新连接一个指定的对象实例,并且使对象实例仍保持原来的状态,另外还提供保存它们名字和其它持久信息的机制。 COM 库提供对所有客户及组件都非常有用的组件管理服务。
DCOM 是 COM 的分布式扩展, Microsoft 把 DCOM 作为开发 Internet 和组件的基础。当客户和组件位于不同机器时, DCOM 用 TCP/IP 协议等取代 COM 中的本地进程间通信 LRPC ,从而对位于 Internet 不同机器上的组件对象之间的相互通讯提供了透明的支持。
COM/DCOM 技术具有以下特点: ① 语言无关性。 COM 规范的定义不依赖于特定语言,它采用的是一种二进制代码级的标准,而不是源代码级的标准。 ② 可重用性。 COM 重用性是建立在组件对象的行为方式上的,它指示了 COM 对象如何重用已有的 COM 对象功能。有两种途径:包容和聚合可实现 COM 重用性。 ③ 位置透明性。组件从一台计算机转移到另一台计算机仅涉及到重新配置的问题,不涉及到一个大的开发项目。
6 结论
中间件的目标就是掩盖底层的异构性,方便编程。因此理想的中间件应该提供对多种程序设计语言的支持,有良好的跨平台能力,同时还具有网络透明性、位置透明性和访问透明性等特点。
支持跨平台能力是 CORBA 的一大特色。基于 CORBA 开发的应用,完全避免了底层平台的不一致所带来的问题,它支持 Unix 、 OS/2 等众多平台。 EJB 是依赖于 Java 语言的技术,由于 Java 的平台无关性,使得 EJB 可以运行在不同的开发平台上。 COM/DCOM 仅实现了 32 位 Windows 操作系统平台,这使得跨平台支持带来了困难。
在语言支持方面, CORBA 一开始就设计了 IDL 转换标准语言,所以对于大多数面向对象的语言 CORBA 都支持。 COM/DCOM 也具有语言无关性,只有 EJB 是基于 Java 语言的,但由于 Java 的广泛使用, EJB 技术也得到越来越多开发者的喜爱。
总之, 3 种中间件技术都有其优势, Java 由于平台无关性的优势显著,成为理想的 Internet 技术;而 Windows 平台的广泛使用也使 COM/DCOM 具有深厚的基础; OMG 组织在 10 几年来一直在为自己的组件软件建立标准,而且已被很多组织和公司采用。对于异构环境下的企业应用开发, CORBA 和 EJB 有着明显的优势,并且 CORBA 和 EJB 所依赖 Java 技术可以很好的互补。 CORBA 处理网络透明性, EJB 处理实现透明性。由此看来, CORBA 和 EJB 技术紧密结合是今后多层分布式系统发展的一大趋势。
参考文献:
1 童恒庆 ,聂会琴,李锡喆.CORBA/COM/EJB三种组件模型的分析与比较[ J ]. 计算机应用研究,2004,4;66-67.
2 萨默维尔 .软件工程[ M ]. 北京: 机械工业出版社,2003.1.
3 李纪云 ,董小社,童瑞.分布式对象中间件技术研究[J].计算机工程与设计,2004,2;170-173.
4 邱岩 .组件技术及其分析比较[J]. 计算机工程与设计,2003,7;13-17.
5 巴姆巴拉 .J2EE技术内幕[ M ]. 北京: 机械工业出版社,2002.