贾素来
(无锡商业职业技术学院公共计算机教学部, 江苏 无锡 214153)
传统的客户机/服务器体系结构,随着业务处理对系统提出更高要求,也逐渐暴露出其客户端逐渐庞大和服务器负担过重等缺点。因此计算机科学家提出了三层或多层分布式系统(Multi-storey Distributed System)。随着不断改进和发展,分布式系统逐渐形成了三种具有代表性的主流技术,即 CORBA(Common Object Request Broker Architecture)、COM/DCOM(Distributed Component Object Model)和J2EE(Java2 Platform Enterprise Edition)。
在多层结构当中,业务逻辑从客户端分离出来,移至中间层,系统也就成为客户端表示层、中间业务逻辑层和数据库服务器的三层或多层体系结构,如图1所示[1]。多层体系结构将表示和业务处理分开,缩减了客户端的规模,又将相关业务和资源分开,降低了服务器的负载,避免了服务器的性能缺陷对整个系统性能的影响。这种在多个服务器上分布应用程序处理的多层可变结构比二层体系结构的伸缩性和扩展性有了很大加强。
在分布式环境中,无论是硬件平台还是软件平台都不可能做到统一。大规模的应用系统通常要求软硬件在各不相同的网络环境中运行,为了更好的开发和应用能够运行在这种异构平台上的软件,迫切需要一种基于标准的、独立于计算机软硬件的开发和运行环境,中间件技术也就在这种情况下应运而生了。中间件是一种软件,它位于系统的不同分布式组件之间,独立于计算机软硬件平台,且具有标准的程序接口和协议,使不同硬件和操作系统平台上分布式应用的数据共享和互操作。它作用是为处于自己上层的应用软件提供运行和开发环境,帮助用户灵活、高效的开发和集成复杂的应用软件。OMG的COBRA技术规范、微软的COM/DCOM技术规范、Sun公司的J2EE技术规范是目前三种主流的面向对象中间件技术。
图1 多层分布式体系结构模型
CORBA分布计算技术是OMG组织基于众多开放系统平台厂商提交的分布对象互操作内容的基础上制定的公共对象请求代理体系规范。它是为处理基于对象的分布式计算系统之间的移植和互操作而定义的一套框架性标准和规范。它定义了IDL语言映射、单个ORB体系结构和多个ORB间互操作机制及标准协议( IIOP),有潜力包容现有客户机/服务器中间件的每一种格式,可将现有应用软件都归到对象软件上来,最新的CORBA规范如图2所示[2]。
图2 CORBA规范模型
在CORBA规范中,最底层是对象请求代理ORB,这是分布对象系统中的“软总线”,从而使客户方不必再关心底层的通信,实现了客户程序与服务器程序的完全分离,从而使客户端与服务端可以采用不同的语言和使用不同供应商的ORB。同时CORBA提供了接口定义语言到C、C++、Java、COBOL等语言的映射机制编译器,它可以生成服务器方的框架和客户方存根代码,再通过分别与客户端和服务器端的联编,即可得到服务方和客户方的程序。
COM是一个独立于语言的、基于对象的编程规范,使用COM可以定义一类对象,这类对象可以在不同的进程中调用,从而为开发多层应用系统提供了必要的基础,但 COM本身并不能构造完整的多层应用系统框架,它只能在本地生成组件对象。为了能在网络环境中构建多层应用系统,这就需要进一步使用DCOM。DCOM扩展了COM,它可以支持实现在网络环境中不同计算机之间对象的通信。也就是说,DCOM可以使一个应用系统分布在不同的网络环境中,从而可以更有效地为客户提供服务。
J2EE是一个基于JAVA的适合服务器端组件体系结构的结合了 Java Enterprise API的完整的企业级应用系统开发平台或中间件体系结构,它通过提供一组应用组件和运行时环境来构造可伸缩的企业应用。J2EE技术以核心 Java平台或Java 2平台的标准版J2SE为基础,并且巩固了标准版J2SE中的许多优点,例如“编写一次,到处运行”的特性、JDBC API、CORBA技术以及能够在因特网应用中保护数据的安全模式等。同时J2EE还提供了对EJB、Java Servlets API、JSP以及XML技术的全面支持。
典型的J2EE 结构的应用程序包括四层:客户层、表示逻辑层、业务逻辑层和企业信息系统层,如图3所示[3]。
图3 J2EE 多层体系结构
CORBA、DCOM和J2EE各有其特定的产生背景、技术特点和使用范围。CORBA标准是最早出现的,也是最完美的[4]。与COM/DCOM技术在扩展性方面的局限和Java RMI在实现语言方面的不足相比,CORBA是一种在异构平台下的语言无关的对象互操作模型。
在支持语言方面,CORBA是一个规范,可以用在不同的平台、操作系统和编程语言之上,只要该平台支持ORB的实现,而且有对编程语言的映射就可以。相对而言,DCOM比较适合与 C++紧密集成,对象的实现需要 WIN32 API的支持。J2EE则建立在Java 语言之上,只能使用Java语言和Java RMI进行接口定义和应用开发。虽然Java语言提供了和其它语言的接口,但这种接口使用起来非常复杂。
在平台支持方面,DCOM是基于微软操作系统的,使用RPC和安全机制产生符合 DCOM协议标准的标准网络包,但 DCOM只是简单地把本地跨进程通信用一个网络协议传输来替代。虽然通过使用第三方组件,开发者可以实现其它操作平台上的DCOM组件,但这些实现必须和微软的实现相匹配。J2EE是一种纯Java的解决方案,只要安装有Java虚拟机,就可以实现J2EE,但是它对集成的支持却很脆弱。EJB使用Java远程方法调用接口RMI,RMI使用JRMP作为通信传递协议,但JRMP是一个非标准的协议,不允许使用交叉语言编写的对象之间进行通信,这就要求客户端和服务器都必须是基于Java的。CORBA使用IIOP和GIOP作为通信层协议,两个协议从本质上来讲非常简单,但提供了建立可扩展的 CORBA服务器的能力。
在分布式事务处理方面,DCOM没有提供自动的容错和负载平衡服务,这个工作全是交给MTS来完成的。EJB使用Java事务服务JTS来完成分布式事务处理,应用程序通过JTA使用事务管理功能。CORBA规范中的OTS为分布式CORBA对象提供了事务管理的接口,支持平面事务和嵌套式事务,同时OTS基于X/open DTP标准,所以不是基于CORBA的应用程序也可以与OTS互操作。
CORBA是一个通用的分布式对象规范说明,没有给出具体的实现方案,所以为实现提供了极大的灵活性。IDL反编译工具可以从Java RMI实现类生成IDL文件,根据Java到CORBA的映射规范可以确定CORBA和EJB架构各元素之间的对应关系。目前很多ORB产品都实现了基于IIOP的RMI,如Sun的Java IDL、InPrise的VisiBroker,以及一些开发源码的ORB产品,如OPenORB、JacORB等。
在.NET中,IDL是由开发工具生成的。.NET中涵盖的DCOM技术和CORBA一样,在网络传输层都采用TCP/IP协议和相应的IDL规范,但微软没有公开这个规范。在实施时,CORBA的IDL采用类C++的定义,是公开的规范,但DCOM的IDL的文件是文本形式的。在DCOM中,客户机存根称为代理,而服务器存根称为存根。相反,CORBA中的客户机存根称为存根,而服务器存根称为框架。这样,在DCOM和CORBA之间由于存在数据类型、命名方式、参数值形式等方面的差异性,使得相互通信很困难。
DCOM只支持 Win32,如果系统主要运行微软操作系统,并且其地域分布上不是很广的话,COM/DCOM或许是比较合适的选择。J2EE在Internet环境下集组件模式、跨异构平台、兼具事务处理、数据库连接等许多基础结构服务,开发效率高、简单,缺点是仅限于支持Java语言。相比较而言,CORBA提供了一个多功能的一致的对象模型,具有高度的透明性。同时 CORBA具有良好的跨平台和跨语言的特征,支持客户端应用和服务器对象的特点,并且具有良好的运行效率,成为了大部分分布式系统设计首选[5]。
[1] 潘俊虹.浅析三种主流分布式组件对象模型对比及互操作[J].南平师专学报,2006,25(4):56-59.
[2] 刘建兵.基于CORBA的对象Web研究[J].电脑知识与技术,2009,5(2):308-312.
[3] 闫珅,郭燚.基于Eclipse开发环境的J2EE编程技术[J].唐山职业技术学院学报,2008,6(4):45-46.
[4] 李红宇,王秀珍.分布式对象技术应用探讨[J].现代计算机,2007(251):72-75.
[5] 史永昌,李亚岗.CORBA、DCOM和J2EE技术比较[J].唐山师范学院学报,2007,27(5):98-100.