随着互联网的发展,企业的信息系统和以往相比已发生了很大的变化。企业级的应用已不再满足于单机系统和简单的客户/服务器系统,而是向着三层和多层体系结构的分布式环境不断迈进。所谓三层结构,就是在原有的“两层结构”(客户端和服务器端)之间增加了一层组件,这层组件包括事务处理逻辑应用服务、数据库查询代理/数据库等。随着这层组件的增加,两层结构向三层结构转变后,客户端和服务器端的负载就相应减轻了,跨平台、传输不可靠等问题也得到了解决。增加的这层组件就是我们所说的“中间件”。中间件在三层结构中主要充当中间层,完成数据安全和完整传输,通过负载均衡来调节系统的工作效率,从而弥补两层结构的不足。在分布式环境中,无论硬件平台还是软件平台都不可能做到统一。大规模的应用软件通常要求在软、硬件各不相同的分布式网络上运行。为了更好地开发和应用能够运行在这种异构平台上的软件,迫切需要一种基于标准的、独立于计算机硬件及操作系统的开发和运行环境,中间件技术就应运而生了。 中间件是在计算机硬件和操作系统之上,支持应用软件开发和运行的系统软件,它能够使应用软件相对独立于计算机硬件和操作系统平台,为当今的大型分布式应用搭起一个标准的平台,把大型企业分散的系统技术组合在一起,从而实现大型企业应用软件系统的集成。 中间件具有标准的程序接口和协议,可以实现不同硬件和操作系统平台上的数据共享和应用互操作。在具体实现上,中间件是一个用API定义的分布式软件管理框架,具有强大的通信能力和良好的可扩展性。 中间件是基础软件的一大类,属于可复用软件的范畴。为了直观地把握中间件的基本概念,可以将网络和系统软件之上、应用系统之下的“广袤疆域”都视做中间件领域。中间件被概括地理解为起承上启下作用的应用支撑平台。应用的多态性、系统软件的复杂性,都需要依赖各种类型的中间件在其中运筹、调和。中间件的核心作用是通过管理计算资源和网络通信,为各类分布式应用软件共享资源提供支撑。广义地看,中间件的总体作用是为处于自己上层的应用软件提供运行与开发的环境,帮助用户灵活、高效地开发和集成复杂的应用软件。 ![](https://i-blog.csdnimg.cn/blog_migrate/20f0e99fbcf2c8680b0c683a49bc1a67.png) 中间件的主要功能如下: ◆ 负责客户机和服务器间的联接和通信; ◆ 提供客户机与应用层的高效率通讯机制; ◆ 提供应用层不同服务之间的互操作机制; ◆ 提供应用层与数据库之间的联接和控制机制; ◆ 提供一个三层结构应用开发和运行的平台; ◆ 提供一个应用开发框架,支持模块化的应用开发; ◆ 屏蔽硬件、操作系统、网络和数据库; ◆ 提供交易管理机制,保证交易的一致性; ◆ 提供应用的负载均衡和高可用性; ◆ 提供应用的安全机制与管理功能。 中间件的分类与发展趋势 中间件的分类 中间件产品出现在20世纪70年代,消息通信和事务管理是其最初具有的功能。到了90年代,随着互联网的普及和企业计算的需要,对于中间件的需求也逐渐多样化,从而促使中间件技术进一步细分,产生了不同类别的中间件产品。90年代中间件习惯上分为5大类,分别是消息中间件、数据访问中间件、远程过程调用中间件、对象请求代理中间件和事务处理中间件。从90年代末期开始,随着电子商务的兴起和企业信息化建设的深入,中间件受不同类型需求的刺激而更加丰富起来,中间件的内涵和外延进一步拓展。面向对象的中间件技术成为中间件平台的主流技术,出现了以Sun公司的EJB/J2EE、Microsoft的COM+/DNA和OMG的CORBA/OMA为代表的三个技术分支。其研究热点是建立标准化的对象请求代理,屏蔽网络环境下计算平台、操作系统、编程语言、网络协议的异构性和复杂性,使分布在网络上的应用系统能够协同工作,为网络应用提供通用的高级网络管理服务及与应用领域相关的增值服务。 由于中间件技术的发展和变化,学术界和产业界对中间件技术重新进行了分类,这些类别分别是通信中间件(Communication Middleware)、应用服务器(Application Server)、数据集成中间件(Data Integrator)、应用集成中间件(Application Integrator)、流程集成中间件(Business Process Management)和B2B应用集成中间件(B2B Application Integrator)。其中,仅仅通信中间件一个类别就基本涵盖了传统中间件的所有类别。 从广义上看,商务应用包括三个逻辑层次:表示层逻辑、业务逻辑和基础逻辑。其中,基础逻辑贯穿了通信、事件和应用管理三个方面。换言之,中间件就是从应用中分离出来的、基础逻辑的一种独立标准形式。 从应用类别来看,中间件可以分为三大类: ◆ 数据类(Data Integration) 用于数据的存取、转换和增值,此类中间件用于构建以数据为中心的应用; ◆ 处理类(Process Integration) 把分布在网络结点上的各个应用或处理连接在一起,形成一个统一的分布式应用; ◆ 分布式构件类(Distributed Components)支持构件式应用,是未来应用的发展方向。 从应用层次来看,中间件可以归纳为三种模式(见图2): ![](https://i-blog.csdnimg.cn/blog_migrate/589c7a7b80329b6e2bba4528f70046b1.png) ◆ 消息传输模式 将数据从不同的源发地采集到一起或转发,包括数据标记、加密、队列和审核等; ◆ 事务协调模式 支持应用事件及交易管理; ◆ 应用构件模式 支持构件式应用,是网络化应用的发展趋势。 中间件的发展趋势 中间件作为构筑企业信息系统和电子商务系统的基石和核心技术,向着标准化和构件化方向发展。具体来看,有以下三种发展趋势: 1. 规范化 在中间件的发展过程中,做得最好的一件事情就是规范的制定。对于不同类型的中间件,目前都有一些规范可以遵循,如消息类的JMS,对象类的CORBA和COM/DCOM,交易类的XA、OTS、JTA/JTS,应用服务器类的J2EE,数据访问类的ODBC和JDBC,Web服务有SOAP、WSDL、UDDI等。这些规范的建立极大地促进了中间件技术的发展,同时保证了系统的扩展性、开放性和互操作。 2. 构件化和松耦合 除了已经得到较为普遍应用的CORBA、DCOM等适应Intranet的构件技术外,随着企业业务流程整合和电子商务应用的发展,中间件技术朝着面向Web、松散耦合的方式发展。基于XML和Web服务的中间件技术,使得不同系统之间、不同应用之间的交互建立在非常灵活的基础上。XML是一种可扩展的源标识语言,它提供了一种定义新的标识语言标准。XML技术非常适合于异构系统间的数据交换,因此在国际上已经被普遍采纳为电子商务的数据标准。而Web服务作为基于Web技术的构件,在流程中间件的控制和集成下可以灵活、动态地被组织成为跨企业的商务应用。 3. 平台化 目前,一些大的中间件厂商在已有的中间件产品基础上,都提出了完整的面向互联网的软件平台战略计划和应用解决方案。Sun公司是最早提出“网络就是计算机”的公司,它一直致力于向企业提供受到广泛欢迎的网络软件,对互联网的应用和发展发挥了重要作用。IBM公司提出了面向网络应用的“旧金山计划”,即以WebSphere、DB2、Tivoli、Domino四大品牌组成基础架构平台,提供从中间件、服务器到解决方案的一揽子组合服务。Oracle公司则推出了以Oracle 9i为中心的网络软件平台。微软公司从2000年6月开始大力宣传“.NET”计划,并作为未来的基本战略,目标是在互联网的基础上,实现所有的计算机群、相关设备和服务协同工作,提供广泛而丰富的解决方案。 J2EE中间件技术 J2EE体系 J2EE是应用服务器采用的主要技术体系,与其它的中间件系统相比较,它具有非常显著的特征,这些特征来自于它独特的体系结构。 企业现在需要通过为他们的客户、合作伙伴、雇员和供应商提供更加便捷的服务来扩大它们的市场、降低它们的成本及缩短它们的响应时间。在许多情况下,可以使用的应用程序必须将现有的企业信息系统与可以为更多的客户提供服务的新业务功能结合起来,这些服务需要: ◆ 高可用性,可以适应当今全球商业环境; ◆ 安全性,可以保护客户的隐私和企业数据的完整性; ◆ 可靠性和伸缩性,保证事务处理的准确性和及时性。 由于多种原因,这些服务功能需要构筑成有多个层次组成的分布式系统,包括前端的客户端、后端的数据资源端和一个或多个中间层,这个中间层也是开发工作的重点,它实现了新的服务功能和数据与现有业务管理系统的结合。这个中间层将客户层分离出复杂的企业系统,采用先进的Internet技术,以减少对客户的管理和培训。 Java 2平台企业版(J2EE)降低了开发这些服务功能的成本和复杂性,使服务可以迅速部署,以增强企业回应竞争压力的能力。J2EE通过以下一些元素定义出一个标准: ◆ J2EE平台 一个用于搭建J2EE的多个应用的平台,定义了一组必要的API和策略; ◆ J2EE兼容性测试套装 一套用于测试J2EE平台产品与J2EE标准兼容性的测试; ◆ J2EE参考实现 一组显示J2EE能力的参考实现,也是J2EE平台的选择性定义; ◆ J2EE设计方针 这个设计方针描述了用于开发中间层、瘦客户应用的标准编程模式。 传统的企业信息系统提供者为满足客户的需要,开始将两层的客户/服务器模式转变成更灵活的三层和多层应用模式。新模式将业务逻辑从系统服务功能和用户界面中分离出去,放置在这两层之间的中间层。多层应用简化了企业应用系统的开发、部署和维护。它使开发人员专著于用程序去实现业务逻辑,同时依赖于各种各样的后端服务程序实现基础结构和客户端应用程序,以便用户进行交互操作。一旦开发完成,业务逻辑可以部署到服务器上实现现存组织机构的需求。Sun公司用J2EE技术实现了这一设想。首先,Java Servlet技术允许开发人员创建支持Java平台的、可以在任何Web服务器上运行的、像CGI一样的操作界面。其次,JDBC技术将“写一次,在任何地方运行”的Java编程的功能,与现存数据库管理系统相结合。最后,企业级Java Bean组件结构将完整的一组企业应用逻辑压缩到一个易于配置、可随时重用组件。由于覆盖了这样三个概念:服务端界面用Java编写;可以联接现有的数据库系统;模块化、易于部署的组件,使我们趋向于J2EE标准。 J2EE应用模型 J2EE可以支持传统的企业应用,这些企业应用为客户、雇员、供应商、合作伙伴及其它需要或为企业提供服务的人提供服务。这些应用非常复杂,数据可能从许多地方读取,并且应用分布于各种客户端。J2EE应用模型如图3所示。 ![](https://i-blog.csdnimg.cn/blog_migrate/1ad39115bb6f9743e1d04d1001206c9f.png) 为了更好地控制和管理这些应用,支持各种用户的业务功能被连接到中间层,中间层代表着一个被企业信息技术部门紧密控制着的环境。中间层被指定运行在特定的服务器硬件上,并可以涉及企业所有的服务。 J2EE应用模式定义了用于以多层的方式实现应用的一种结构,它避免了两层结构的局限性,并提供足够的可伸缩性、可接入性和可管理性。 J2EE应用方式将实现多层服务所需要进行的工作分成两个部分,即为J2EE提供标准的系统服务—业务和表示逻辑。由开发人员完成业务和表示逻辑,开发人员可以依靠这个平台提供的开发中间层服务来解决实现硬件层的方案。 J2EE应用模式具有可以执行性和可伸缩性,为多层应用程序提供了“写一次就可在任何地方运行”的优势。在充分选择提供给企业的J2EE服务器和开发工具的情况下,这种标准化的模式将开发和培训的成本降到最低。 J2EE应用模式通过降低建造多层应用复杂性,向应用开发的简单化和可扩展化前进了一大步。 中间层 使用J2EE应用模式的主要优点在于多层应用的中间层。在J2EE平台,中间层业务功能是由企业Java Bean(EJB)组件实现。这些企业Bean让服务开发者将精力集中在业务逻辑,并让EJB服务的处理提供可靠、可伸缩服务的复杂工作。EJB组件将业务逻辑在中间层实现,如下图4所示。 ![](https://i-blog.csdnimg.cn/blog_migrate/4b1c7f09049ec12f62c3ea1ac592f852.png) Java Server Pages(JSP)技术和Servlet是使用Internet模式为客户层表现中间层的功能。JSP技术使用户界面开发工作变得容易,可以为浏览器提供页面的动态生成技术。Servlet给以Java技术为基础的应用程序开发者提供了一种手段,可以用Java语言完整地实现动态表示。 客户层 J2EE平台支持几种类型的客户端。许多J2EE服务被设计成支持Web浏览器的客户端。这些服务通过动态生成的HTML页面和表格与客户端进行交互操作。 更复杂的服务将直接与第一层客户端直接交换数据。这里,JSP和Servlet用于规格化业务数据,以方便J2EE客户端处理。这些客户端既能在一个Web浏览器以Java Applet方式运行,也能用以Java技术为基础的程序方式运行。 企业信息系统 一个服务的中间层的业务模块必须存取和更新在企业应用系统EIS层的信息。下列标准是Java服务的API,它们提供了对企业信息系统的基本存取功能: ◆ JDBC,用于存取数据的Java标准API; ◆ JNDI(Java Naming and Directory Interface),用于从企业的名字和目录服务存取信息的标准API; ◆ JMS(Java Message Service),通过消息中间件发送和接收信息的标准API; ◆ JavaMail,发送电子邮件的标准API; ◆ JavaIDL,调用CORBA服务的标准API。 J2EE应用服务器中间件的体系结构 J2EE应用服务器总体结构 J2EE应用服务器由四个部分组成:Applet容器、应用客户端容器、Web容器和EJB容器,它们之间的关系由图5表示。但是,图5所表示的是各个部件间的逻辑结构,这并不意味着这些部件必须物理地被分布在不同的机器上、不同的处理器上、不同的地址空间中和不同的虚拟机上。 ![](https://i-blog.csdnimg.cn/blog_migrate/943428322952e9cd8679b7e76a6c28b5.png) 容器是应用服务器的运行环境,J2EE为容器中的应用组件提供服务,每种容器根据各自的应用组件不同,提供不同类型的服务。它们涉及到各个方面,为组件的运行提供必要的支持。但是,不同容器中相同的服务为应用组件提供的接口是相同的。图5中的箭头表示了对于应用服务器的其它部分的存取。应用客户端容器通过用于连接数据库系统的Java API、JDBC API与应用服务器要求的数据库相连接。包含有JSP和Servlet的Web容器和EJB容器也使用同样的接口与数据库相连接。容器中的每种组件都由J2SE的运行环境提供支持。 在J2EE应用服务器中,支持以下一些组件的运行: 1.应用客户端可以在台式电脑上执行具有GUI界面的、用Java语言编写的程序。应用客户端提供了与原有的应用程序相似的软件运行形态,并且可以对所有中间层的功能进行存取。 2.Applets可以在Web浏览器上运行具有图形界面的组件。它还可以在各种各样的、支持Applet编程模式的应用系统或设备上运行。 3.Servlets、JSP页面、过滤器和Web事件监听在Web服务器内运行,并对Web客户端的HTTP请求做出应答。Servlet、JSP页面和过滤器用于生成作为应用系统用户界面的HTML页面。它们也可以生成被其它应用组件使用的XML和其它格式的数据。 4.EJB组件在一个支持事务处理的管理环境中执行。它一般包含了一个J2EE应用的业务逻辑。 J2EE应用服务器为应用组件的部署、管理和执行提供了支持。根据对应用服务器的依赖程度,应用组件可以被分成3种类型: 1.在应用服务器中被部署、管理和执行的组件,这样的组件有Web组件和EJB组件。 2.在应用服务器中被部署、管理,但是被下载到一个客户端系统上去执行的组件。 3.不完全按照应用服务器的要求被部署和管理的组件,应用客户端就是这样的组件。 J2EE应用服务器体系结构 J2EE应用服务器由松藕合构件组成,它们协调工作,使多层应用在高性能环境里运行。所有构件都有良好定义的公共接口集和标准实现。这意味着不影响现有应用就可以实现对构件的修改和扩展。为了满足消费者或产品的需要,这种松藕合模型允许开发者修改应用服务器的行为。 ![](https://i-blog.csdnimg.cn/blog_migrate/fad5a87be22afd6307c17da1f462517d.png) 从图6看出,应用服务器的核心是基于微内核的。应用服务器的微内核提供了底层的通信、线程、配置、时间、日志等核心功能。在微内核之上,遵循J2EE标准实现各种服务。应用在这种微内核的设计模式,使上层标准的服务实现与底层的系统资源管理分离,保持了软件模块间松散耦合的优点。同时,应用服务器还提供了专门的服务接口,允许客户不必局限在J2EE的框架中,直接在内核层次上开发针对于具体案例的系统服务,特别适合于有特殊需求的应用系统。 J2EE应用组件 J2EE应用组件是指在应用服务器中运行的软件组件,主要有JSP、EJB和Servlet三种。 ◆ JSP JSP(Java Server Page) 提供了一种在网页中嵌入组件的方式,并且允许生成相应的网页最终发送给客户。JSP网页可以包含HTML、Java代码及JavaBean组件。JSP网页实际上是Servlet编程模型的一个扩充。当用户请求一个JSP网页时,Web容器会把相应的JSP网页编译成一个Servlet。接着此Web容器调用这个Servlet,并且把得到的内容返回给Web浏览器。从JSP网页编译出Servlet之后,Web容器就可以简单地把这个Servlet返回,而不需要每次都重新编译。因此,JSP网页提供了一种功能强大的动态网页装配机制,可以从Java系统平台的许多优点中获益。 与纯Java代码构成的Servlet相比,JSP网页只是基于文本的文档,直到Web容器把它们编译成相应的Servlet为止。这样在应用程序逻辑与表示逻辑之间就有了清楚的分界。这种情况进而使应用程序开发者能够集中注意力于业务细节,而让Web设计者集中注意力于信息的表示。 JSP与Microsoft的ASP技术非常相似。两者都提供在HTML代码中混合某种程序代码、由语言引擎解释执行程序代码的能力。但是,ASP的编程语言是VBScript之类的脚本语言,JSP使用的是Java,这是两者最明显的区别。此外,ASP与JSP还有一个更为本质的区别:两种语言引擎用完全不同的方式处理页面中嵌入的程序代码。在ASP下,VBScript代码被ASP引擎解释执行;在JSP下,代码被编译成Servlet并由Java虚拟机执行。 总之,JSP规范是Web服务器、应用服务器、交易系统及开发工具供应商之间广泛合作的结果,它在多方面加速了动态页面的开发。 ◆ Servlet Servlet是一个以Java技术为基础的Web组件,它被一个容器管理,它能产生动态的内容。像其它以Java为基础的组件一样,Servlet是独立于各种平台的Java类,它能够被编译成平台中立的字节码,然后在可以使用Java的Web服务器上装载和运行。容器有时也被称作Servlet引擎,是Web服务器的扩充,它提供了Servlet的功能。Servlet通过Servlet容器实现的请求/应答机制与Web客户端进行交互。 Servlet容器是服务器或应用服务器的一部分,它提供了网络服务。通过这些网络服务请求和应答对以MIME为基础的请求进行解码,形成以MIME为基础的应答。一个Servlet容器在Servlet的整个生命周期中装载并管理它。 一个Servlet容器能够建立在Web服务器的核心中,也可以通过服务器本身的扩展API作为附加组件安装在一个Web服务器中。Servlet容器还可以嵌入或安装到支持Web的应用服务器中。 所有的Servlet容器必须将HTTP作为请求和应答的规程。另外,以类似HTIPS这样的规程为基础的请求和应答也可以被支持。 一个Servlet可以具有这样一个处理序列: 1.一个客户端连接到一个Web服务器,并发送一个HTTP请求到这个Web服务器。 2.请求被Web服务器接收,并转交给Servlet容器。Servlet容器可以与Web服务器在同一个主机上运行、在同一个主机但不是同一个处理器上运行,或者是不同的主机上运行。 3.Servlet容器在其配置的Servlet中找到调用的Servlet,然后,用代表请求和应答的对象调用它。 4.Servlet使用请求对象找到谁是远端的用户,那些HTTP POST参数可能被作为这个请求的一部分,并找出其它相关参数。Servlet完成已经被编入程序的处理逻辑,然后生成数据返回客户端。在它将数据返回到客户端的时候通过应答对象完成。 5.当Servlet完成了对请求的处理,Servlet容器确认应答已经确实完成,则将控制权返回给Web服务器。 Java Servlet是创建动态的、高性能的电子商务站点的有效工具,它能够改善电子商务应用的操作效能和可伸缩性,并能重复使用各种用于提高应用开发效率的部件。 ◆ EJB EJB (Enterprise JavaBeans)是用于开发安全、可扩展、事务型及多用户组件的一种分布式组件模型。简单地讲,EJB是(理想的)包含业务逻辑的可重用软件单元。正如JSP网页允许把应用程序和表示逻辑分开,EJB允许把应用程序逻辑与系统级服务分开,这样开发者可以集中精力于具体业务问题,而不是系统编程。这些企业小程序(Bean)业务对象具有三种基本形式,同样也没有必要三者都实现,它们分别是会话(Session)Bean、实体(Entity)Bean和消息驱动(Message-driven)Bean。 1. 会话Bean 会话Bean本身有两种类型。一种是说明性会话(Stateful Session)Bean,这是一种用于表示一个客户与系统交互的短暂对象。它执行客户应用程序中的请求、访问数据库等,当客户的操作完成后,它将被删除(也就是它只存在于客户会话中)。这方面的一个示例就是一个应用程序客户发送一系列请求到一个应用程序,从而来执行一个业务处理。在这种情况下,说明性会话Bean可以跟踪客户与应用程序之间的交互状态。另一种形式是无状态(Stateless)会话Bean,不在客户请求之间维护状态信息。一般情况下,此类会话Bean用于实现一种不要求客户状态的特定服务,例如一个简单的数据库更新。 2.实体Bean 实体(Entity)Bean是一种持久性的对象,确定了数据存储的模型。也就是说,它是数据的一个对象包装器。例如,关于一次购买订单的数据可以使用实体Bean PurchaseOrder表示出一个综合的、包含全部相关购买订单数据的视图。与可供任何客户使用的会话Bean相比,实体Bean可以同时由许多客户访问,但是必须通过一个主键来维护—个惟一的标识。实际上,在J2EE容器结构中,我们可以选择由容器管理实体Bean的永久状态,或者在Bean自身中“手工”实现这一点。 3.消息驱动Bean 消息驱动Bean是一类特殊的EJB,它并不是直接客户调用的方式。消息驱动Bean的目的在于处理通过JMS收到的消息。消息驱动Bean通过提供一种在EJB容器内部处理消息的方式来实现JMS的异步属性。当应用程序客户或者一个应用程序通过JMS发送一条消息时,容器调用适当的消息驱动Bean来处理这条消息。 |