﻿<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" xmlns:wfw="http://wellformedweb.org/CommentAPI/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/"><channel><title>BlogJava-J2EE探寻-文章分类-中间件</title><link>http://www.blogjava.net/debut/category/21289.html</link><description>我的兴趣，我作主</description><language>zh-cn</language><lastBuildDate>Thu, 05 Apr 2007 12:28:33 GMT</lastBuildDate><pubDate>Thu, 05 Apr 2007 12:28:33 GMT</pubDate><ttl>60</ttl><item><title>中间件</title><link>http://www.blogjava.net/debut/articles/108742.html</link><dc:creator>debut</dc:creator><author>debut</author><pubDate>Thu, 05 Apr 2007 09:12:00 GMT</pubDate><guid>http://www.blogjava.net/debut/articles/108742.html</guid><wfw:comment>http://www.blogjava.net/debut/comments/108742.html</wfw:comment><comments>http://www.blogjava.net/debut/articles/108742.html#Feedback</comments><slash:comments>0</slash:comments><wfw:commentRss>http://www.blogjava.net/debut/comments/commentRss/108742.html</wfw:commentRss><trackback:ping>http://www.blogjava.net/debut/services/trackbacks/108742.html</trackback:ping><description><![CDATA[&nbsp;转载<a href="http://www.itisedu.com/phrase/200604241155005.html">http://www.itisedu.com/phrase/200604241155005.html</a>
<p><span>中间件（</span><span>middleware</span><span>）是一种独立的系统软件或服务程序，分布式应用软件借助这种软件在不同的技术之间共享资源，中间件位于客户机服务器的操作系统之上，管理计算资源和网络通信。中间件（</span><span>middleware</span><span>）是基础软件的一大类，属于可复用软件的范畴。顾名思义，中间件处于操作系统软件与用户的应用软件的中间。中间件在操作系统、网络和数据库之上，应用软件的下层，总的作用是为处于自己上层的应用软件提供运行与开发的环境，帮助用户灵活、高效地开发和集成复杂的应用软件。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>在中间件产生以前，应用软件直接使用操作系统、网络协议和数据库等开发，这些都是计算机最底层的东西，越底层越复杂，开发者不得不面临许多很棘手的问题，如操作系统的多样性，繁杂的网络程序设计、管理，复杂多变的网络环境，数据分散处理带来的不一致性问题、性能和效率、安全，等等。这些与用户的业务没有直接关系，但又必须解决，耗费了大量有限的时间和精力。于是，有人提出能不能将应用软件所要面临的共性问题进行提炼、抽象，在操作系统之上再形成一个可复用的部分，供成千上万的应用软件重复使用。这一技术思想最终构成了中间件这类的软件。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>为解决分布异构问题，人们提出了中间件</span><span>(middleware)</span><span>的概念。中间件是位于平台</span><span>(</span><span>硬件和操作系统</span><span>)</span><span>和应用之间的通用服务，如图</span><span>1</span><span>所示，这些服务具有标准的程序接口和协议。针对不同的操作系统和硬件平台，它们可以有符合接口和协议规范的多种实现。</span>&nbsp;</p>
<p align=center></p>
<p align=center><span lang=EN-US style="FONT-SIZE: 10.5pt; FONT-FAMILY: Verdana; mso-bidi-font-size: 12.0pt; mso-fareast-font-family: 宋体; mso-font-kerning: 1.0pt; mso-bidi-font-family: 'Times New Roman'; mso-ansi-language: EN-US; mso-fareast-language: ZH-CN; mso-bidi-language: AR-SA"><v:shapetype id=_x0000_t75 stroked="f" filled="f" path="m@4@5l@4@11@9@11@9@5xe" o:preferrelative="t" o:spt="75" coordsize="21600,21600">&nbsp;<img height=233 alt="" src="http://www.blogjava.net/images/blogjava_net/debut/J2EE/middleware/Middleware-01.jpg" width=293 border=0><v:stroke joinstyle="miter"></v:stroke><v:formulas><v:f eqn="if lineDrawn pixelLineWidth 0"></v:f><v:f eqn="sum @0 1 0"></v:f><v:f eqn="sum 0 0 @1"></v:f><v:f eqn="prod @2 1 2"></v:f><v:f eqn="prod @3 21600 pixelWidth"></v:f><v:f eqn="prod @3 21600 pixelHeight"></v:f><v:f eqn="sum @0 0 1"></v:f><v:f eqn="prod @6 1 2"></v:f><v:f eqn="prod @7 21600 pixelWidth"></v:f><v:f eqn="sum @8 21600 0"></v:f><v:f eqn="prod @7 21600 pixelHeight"></v:f><v:f eqn="sum @10 21600 0"></v:f></v:formulas><v:path o:connecttype="rect" gradientshapeok="t" o:extrusionok="f"></v:path><o:lock aspectratio="t" v:ext="edit"></o:lock></v:shapetype></span><span><br>&nbsp;<br>&nbsp;</span><span>图</span><span>1 </span><span>中间件</span></p>
<span>
<p><br>&nbsp;&nbsp;&nbsp; </span><span>也许很难给中间件一个严格的定义，但中间件应具有如下的一些特点：</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>满足大量应用的需要</span><span><br>&nbsp;&nbsp;&nbsp; </span><span>运行于多种硬件和</span><span>OS</span><span>平台</span><span><br>&nbsp;&nbsp;&nbsp; </span><span>支持分布计算，提供跨网络、硬件和</span><span>OS</span><span>平台的透明性的应用或服务的交互</span><span><br>&nbsp;&nbsp;&nbsp; </span><span>支持标准的协议</span><span><br>&nbsp;&nbsp;&nbsp; </span><span>支持标准的接口</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>由于标准接口对于可移植性和标准协议对于互操作性的重要性，中间件已成为许多标准化工作的主要部分。对于应用软件开发，中间件远比操作系统和网络服务更为重要，中间件提供的程序接口定义了一个相对稳定的高层应用环境，不管底层的计算机硬件和系统软件怎样更新换代，只要将中间件升级更新，并保持中间件对外的接口定义不变，应用软件几乎不需任何修改，从而保护了企业在应用软件开发和维护中的重大投资。</span></p>
<p><strong><span>一、中间件的历史</span></strong></p>
<p><span>最早具有中间件技术思想及功能的软件是</span><span>IBM</span><span>的</span><span>CICS</span><span>，但由于</span><span>CICS</span><span>不是分布式环境的产物，因此人们一般把</span><span>Tuxedo</span><span>作为第一个严格意义上的中间件产品。</span><span>Tuxedo</span><span>是</span><span>1984</span><span>年在当时属于</span><span>AT&amp;AMp;&amp;T</span><span>的贝尔实验室开发完成的，但由于分布式处理当时并没有在商业应用上获得像今天一样的成功，</span><span>Tuxedo</span><span>在很长一段时期里只是实验室产品，后来被</span><span>Novell</span><span>收购，在经过</span><span>Novell</span><span>并不成功的商业推广之后，</span><span>1995</span><span>年被现在的</span><span>BEA</span><span>公司收购。尽管中间件的概念很早就已经产生，但中间件技术的广泛运用却是在最近</span><span>10</span><span>年之中。</span><span>BEA</span><span>公司</span><span>1995</span><span>年成立后收购</span><span>Tuxedo</span><span>才成为一个真正的中间件厂商，</span><span>IBM</span><span>的中间件</span><span>MQSeriES</span><span>也是</span><span>90</span><span>年代的产品，其它许多中间件产品也都是最近几年才成熟起来。</span></p>
<p><strong><span>二、为什么要中间件</span></strong></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>计算机技术迅速发展。从硬件技术看，</span><span>CPU</span><span>速度越来越高，处理能力越来越强；从软件技术看，应用程序的规模不断扩大，特别是</span><span>Internet</span><span>及</span><span>WWW</span><span>的出现，使计算机的应用范围更为广阔，许多应用程序需在网络环境的异构平台上运行。这一切都对新一代的软件开发提出了新的需求。在这种分布异构环境中，通常存在多种硬件系统平台</span><span>(</span><span>如</span><span>PC</span><span>，工作站，小型机等</span><span>)</span><span>，在这些硬件平台上又存在各种各样的系统软件</span><span>(</span><span>如不同的操作系统、数据库、语言编译器等</span><span>)</span><span>，以及多种风格各异的用户界面，这些硬件系统平台还可能采用不同的网络协议和网络体系结构连接。如何把这些系统集成起来并开发新的应用是一个非常现实而困难的问题。</span><span><br>&nbsp;<br></span><strong><span>三、主要中间件的分类</span></strong></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>中间件分类（</span><span>IDC</span><span>的分类）：大致可分为六类</span><span>:</span><span>终端仿真</span><span>/</span><span>屏幕转换中间件、数据访问中间件、远程过程调用中间件、消息中间件、交易中间件、对象中间件。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>中间件所包括的范围十分广泛，针对不同的应用需求涌现出多种各具特色的中间件产品。但至今中间件还没有一个比较精确的定义，因此，在不同的角度或不同的层次上，对中间件的分类也会有所不同。由于中间件需要屏蔽分布环境中异构的操作系统和网络协议，它必须能够提供分布环境下的通讯服务，我们将这种通讯服务称之为平台。基于目的和实现机制的不同，我们将平台分为以下主要几类：</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>远程过程调用中间件（</span><span>Remote Procedure Call</span><span>）</span><span><br>&nbsp;&nbsp;&nbsp; </span><span>面向消息的中间件（</span><span>MesSAge-Oriented Middleware</span><span>）</span><span><br>&nbsp;&nbsp;&nbsp; </span><span>对象请求代理中间件（</span><span>object RequeST Brokers</span><span>）</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>它们可向上提供不同形式的通讯服务，包括同步、排队、订阅发布、广播等等，在这些基本的通讯平台之上，可构筑各种框架，为应用程序提供不同领域内的服务，如事务处理监控器、分布数据访问、对象事务管理器</span><span>OTM</span><span>等。平台为上层应用屏蔽了异构平台的差异，而其上的框架又定义了相应领域内的应用的系统结构、标准的服务组件等，用户只需告诉框架所关心的事件，然后提供处理这些事件的代码。当事件发生时，框架则会调用用户的代码。用户代码不用调用框架，用户程序也不必关心框架结构、执行流程、对系统级</span><span>API</span><span>的调用等，所有这些由框架负责完成。因此，基于中间件开发的应用具有良好的可扩充性、易管理性、高可用性和可移植性。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>下面，针对几类主要的中间件分别加以简要的介绍。</span></p>
<p><span>1</span><span>、远程过程调用</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>远程过程调用是一种广泛使用的分布式应用程序处理方法。一个应用程序使用</span><span>RPC</span><span>来</span><span>&#8220;</span><span>远程</span><span>&#8221;</span><span>执行一个位于不同地址空间里的过程，并且从效果上看和执行本地调用相同。事实上，一个</span><span>RPC</span><span>应用分为两个部分：</span><span>server</span><span>和</span><span>Client</span><span>。</span><span>server</span><span>提供一个或多个远程过程；</span><span>client</span><span>向</span><span>server</span><span>发出远程调用。</span><span>server</span><span>和</span><span>client</span><span>可以位于同一台计算机，也可以位于不同的计算机，甚至运行在不同的操作系统之上。它们通过网络进行通讯。相应的</span><span>stub</span><span>和运行支持提供数据转换和通讯服务，从而屏蔽不同的操作系统和网络协议。在这里</span><span>RPC</span><span>通讯是同步的。采用线程可以进行异步调用。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>在</span><span>RPC</span><span>模型中，</span><span>client</span><span>和</span><span>server</span><span>只要具备了相应的</span><span>RPC</span><span>接口，并且具有</span><span>RPC</span><span>运行支持，就可以完成相应的互操作，而不必限制于特定的</span><span>server</span><span>。因此，</span><span>RPC</span><span>为</span><span>client/server</span><span>分布式计算提供了有力的支持。同时，远程过程调用</span><span>RPC</span><span>所提供的是基于过程的服务访问，</span><span>client</span><span>与</span><span>server</span><span>进行直接连接，没有中间机构来处理请求，因此也具有一定的局限性。比如，</span><span>RPC</span><span>通常需要一些网络细节以定位</span><span>server</span><span>；在</span><span>client</span><span>发出请求的同时，要求</span><span>server</span><span>必须是活动的等等。</span></p>
<p><span>2</span><span>、面向消息的中间件</span></p>
<p><span>&nbsp;&nbsp;&nbsp; MOM</span><span>指的是利用高效可靠的消息传递机制进行平台无关的数据交流，并基于数据通信来进行分布式系统的集成。通过提供消息传递和消息排队模型，它可在分布环境下扩展进程间的通信，并支持多通讯协议、语言、应用程序、硬件和软件平台。目前流行的</span><span>MOM</span><span>中间件产品有</span><span>IBM</span><span>的</span><span>MQSeries</span><span>、</span><span>BEA</span><span>的</span><span>MessageQ</span><span>等。消息传递和排队技术有以下三个</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>主要特点：</span><span><br>&nbsp;&nbsp;&nbsp; </span><span>通讯程序可在不同的时间运行</span><span> </span><span>程序不在网络上直接相互通话，而是间接地将消息放入消息队列，因为程序间没有直接的联系。所以它们不必同时运行。消息放入适当的队列时，目标程序甚至根本不需要正在运行；即使目标程序在运行，也不意味着要立即处理该消息。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>对应用程序的结构没有约束</span><span> </span><span>在复杂的应用场合中，通讯程序之间不仅可以是一对一的关系，还可以进行一对多和多对一方式，甚至是上述多种方式的组合。多种通讯方式的构造并没有增加应用程序的复杂性。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>程序与网络复杂性相隔离</span><span><br>&nbsp;&nbsp;&nbsp; </span><span>程序将消息放入消息队列或从消息队列中取出消息来进行通讯，与此关联的全部活动，比如维护消息队列、维护程序和队列之间的关系、处理网络的重新启动和在网络中移动消息等是</span><span>MOM</span><span>的任务，程序不直接与其它程序通话，并且它们不涉及网络通讯的复杂性。</span></p>
<p><span>3</span><span>、对象请求代理</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>随着对象技术与分布式计算技术的发展，两者相互结合形成了分布对象计算，并发展为当今软件技术的主流方向。</span><span>1990</span><span>年底，对象管理集团</span><span>OMG</span><span>首次推出对象管理结构</span><span>OMA(ObjECt Management Architecture)</span><span>，对象请求代理（</span><span>Object Request Broker</span><span>）是这个模型的核心组件。它的作用在于提供一个通信框架，透明地在异构的分布计算环境中传递对象请求。</span><span>CORBA</span><span>规范包括了</span><span>ORB</span><span>的所有标准接口。</span><span>1991</span><span>年推出的</span><span>CORBA 1.1 </span><span>定义了接口描述语言</span><span>OMG IDL</span><span>和支持</span><span>Client/Server</span><span>对象在具体的</span><span>ORB</span><span>上进行互操作的</span><span>API</span><span>。</span><span>CORBA 2.0 </span><span>规范描述的是不同厂商提供的</span><span>ORB</span><span>之间的互操作。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>对象请求代理</span><span>(ORB)</span><span>是对象总线，它在</span><span>CORBA</span><span>规范中处于核心地位，定义异构环境下对象透明地发送请求和接收响应的基本机制，是建立对象之间</span><span>client/server</span><span>关系的中间件。</span><span>ORB</span><span>使得对象可以透明地向其他对象发出请求或接受其他对象的响应，这些对象可以位于本地也可以位于远程机器。</span><span>ORB</span><span>拦截请求调用，并负责找到可以实现请求的对象、传送参数、调用相应的方法、返回结果等。</span><span>client</span><span>对象并不知道同</span><span>server</span><span>对象通讯、激活或存储</span><span>server</span><span>对象的机制，也不必知道</span><span>server</span><span>对象位于何处、它是用何种语言实现的、使用什么操作系统或其他不属于对象接口的系统成分。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>值得指出的是</span><span>client</span><span>和</span><span>server</span><span>角色只是用来协调对象之间的相互作用，根据相应的场合，</span><span>ORB</span><span>上的对象可以是</span><span>client</span><span>，也可以是</span><span>server</span><span>，甚至兼有两者。当对象发出一个请求时，它是处于</span><span>client</span><span>角色；当它在接收请求时，它就处于</span><span>server</span><span>角色。大部分的对象都是既扮演</span><span>client</span><span>角色又扮演</span><span>server</span><span>角色。另外由于</span><span>ORB</span><span>负责对象请求的传送和</span><span>server</span><span>的管理，</span><span>client</span><span>和</span><span>server</span><span>之间并不直接连接，因此，与</span><span>RPC</span><span>所支持的单纯的</span><span>Client/Server</span><span>结构相比，</span><span>ORB</span><span>可以支持更加复杂的结构。</span></p>
<p><span>4</span><span>、事务处理监控</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>事务处理监控（</span><span>Transaction processing monitors</span><span>）最早出现在大型机上，为其提供支持大规模事务处理的可靠运行环境。随着分布计算技术的发展，分布应用系统对大规模的事务处理提出了需求，比如商业活动中大量的关键事务处理。事务处理监控界于</span><span>client</span><span>和</span><span>server</span><span>之间，进行事务管理与协调、负载平衡、失败恢复等，以提高系统的整体性能。它可以被看作是事务处理应用程序的</span><span>&#8220;</span><span>操作系统</span><span>&#8221;</span><span>。总体上来说，事务处理监控有以下功能：</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>进程管理，包括启动</span><span>server</span><span>进程、为其分配任务、监控其执行并对负载进行平衡。</span><span><br>&nbsp;&nbsp;&nbsp; </span><span>事务管理，即保证在其监控下的事务处理的原子性、一致性、独立性和持久性。</span><span><br>&nbsp;&nbsp;&nbsp; </span><span>通讯管理，为</span><span>client</span><span>和</span><span>server</span><span>之间提供了多种通讯机制，包括请求响应、会话、排队、订阅发布和广播等。</span><span><br>&nbsp;&nbsp;&nbsp; </span><span>事务处理监控能够为大量的</span><span>client</span><span>提供服务，比如飞机定票系统。如果</span><span>server</span><span>为每一个</span><span>client</span><span>都分配其所需要的资源的话，那</span><span>server</span><span>将不堪重负（如图</span><span>2</span><span>所示）。但实际上，在同一时刻并不是所有的</span><span>client</span><span>都需要请求服务，而一旦某个</span><span>client</span><span>请求了服务，它希望得到快速的响应。事务处理监控在操作系统之上提供一组服务，对</span><span>client</span><span>请求进行管理并为其分配相应的服务进程，使</span><span>server</span><span>在有限的系统资源下能够高效地为大规模的客户提供服务。</span><span>&nbsp;<br>&nbsp;</span></p>
<p align=center><img height=308 alt="" src="http://www.blogjava.net/images/blogjava_net/debut/J2EE/middleware/Middleware-02.jpg" width=478 border=0></p>
<p align=center><span>图</span><span>2 </span><span>事务处理监控</span></p>
<p><strong><span>四、面临的一些问题</span></strong></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>中间件能够屏蔽操作系统和网络协议的差异，为应用程序提供多种通讯机制；并提供相应的平台以满足不同领域的需要。因此，中间件为应用程序了一个相对稳定的高层应用环境。然而，中间件服务也并非</span><span>&#8220;</span><span>万能药</span><span>&#8221;</span><span>。中间件所应遵循的一些原则离实际还有很大距离。多数流行的中间件服务使用专有的</span><span>API</span><span>和专有的协议，使得应用建立于单一厂家的产品，来自不同厂家的实现很难互操作。有些中间件服务只提供一些平台的实现，从而限制了应用在异构系统之间的移植。应用开发者在这些中间件服务之上建立自己的应用还要承担相当大的风险，随着技术的发展他们往往还需重写他们的系统。尽管中间件服务提高了分布计算的抽象化程度，但应用开发者还需面临许多艰难的设计选择，例如，开发者还需决定分布应用在</span><span>client</span><span>方和</span><span>server</span><span>方的功能分配。通常将表示服务放在</span><span>client</span><span>以方便使用显示设备，将数据服务放在</span><span>server</span><span>以靠近数据库，但也并非总是如此，何况其它应用功能如何分配也是不容易确定的。</span></p>
<p><strong><span>五、中间件的现状与发展趋势</span></strong></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; </span><span>伴随着互联网技术的发展和全球经济一体化时代的来临，企业应用开始从局部自治的单业务种类、部门级应用向企业级应用转变，并促进了企业应用集成、企业间动态电子商务等网络信息系统技术的发展。网络信息系统的目标就是把分布在各处的多个局部自治的异构信息系统通过网络集成在一起，以实现信息资源的广泛共享、集约化管理和协调工作，其中需要解决的一个关键问题就是如何将各局部自治的系统联合成为能够发挥综合效能并能够不断成长的大系统，为此，出现了对构建网络信息系统基础支撑平台的强烈需求。中间件的概念在这样的背景下形成和发展。</span></p>
<p><span>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;</span><span>为了直观地把握中间件（</span><span>middleware</span><span>）的基本概念，可以将网络和系统软件之上、应用系统之下的广袤疆域都视做中间件的领地，中间件被概括地理解为起承上启下作用的应用支撑平台。应用的</span><span>&#8220;</span><span>多态性</span><span>&#8221;</span><span>、系统软件的复杂性，都需要依赖各种类型的中间件在其中运筹、调和。中间件的核心作用是通过管理计算资源和网络通信，为各类分布式应用软件共享资源提供支撑。广义地看，中间件的总体作用是为处于自己上层的应用软件提供运行与开发的环境，帮助用户灵活、高效地开发和集成复杂的应用软件。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>本文从技术、产品和市场等角度对</span><span>2004</span><span>年我国中间件发展现状进行了回顾和分析，通过总结目前网络应用中出现的一些新趋势，提出了中间件技术下一步发展的一些挑战性问题，并总结了中间件产品和市场的一些新特点。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; 1. </span><span>发展现状</span></p>
<p><span>&nbsp;&nbsp;&nbsp; 1.1. </span><span>技术现状</span><span><br>&nbsp;&nbsp;&nbsp; </span><span>中间件技术是在克服复杂网络应用的共性问题中不断发展和壮大起来的，这些问题可以归纳为四个方面：</span></p>
<p><span>&nbsp;&nbsp;&nbsp; 1</span><span>、从计算环境来看：中间件面对的是一个复杂、不断变化的计算环境，要求中间件技术具有足够的灵活性和可成长性；</span></p>
<p><span>&nbsp;&nbsp;&nbsp; 2</span><span>、从资源管理的角度来看：操作系统和数据库管理系统管理的是有限资源，资源种类有限，资源量也有限，而中间件需要管理的资源类型（数据、服务、应用）更丰富，且资源扩展的边界是发散的；</span></p>
<p><span>&nbsp;&nbsp;&nbsp; 3</span><span>、从应用支撑角度来看：中间件需要提供分布应用开发、集成、部署和运行管理的整个生命周期的总体运行模型；</span></p>
<p><span>&nbsp;&nbsp;&nbsp; 4</span><span>、从应用的角度来看：利用中间件完成的往往是复杂、大范围的企业级应用，其关系错综复杂，流程交织。例如客户关系管理系统需要集成多个企业内部应用，而供应链管理则涉及企业之间的应用集成。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>因此，由于网络应用的复杂性，特别是分布、异构和自治等特点，决定了中间件技术和产品的形态多样性。目前的中间件技术已经形成一个丰富的谱系（图</span><span>1</span><span>），并正在向上（应用框架和普适服务）和向下（融合操作系统、数据库管理系统的功能）两个方向不断延伸，并在向更宽广的应用领域拓展。</span></p>
<p align=center><img height=526 alt="" src="http://www.blogjava.net/images/blogjava_net/debut/J2EE/middleware/Middleware-03.jpg" width=400 border=0></p>
<p align=center><span>&nbsp;&nbsp;&nbsp; </span><span>图</span><span> 1 </span><span>中间件技术谱系</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>在国内，国防科技大学、北京大学、北航、中科院软件所、东南大学等大学和院所很早就投入到中间件技术的研究中，并形成了一系列的成果。在国家发改委、信息产业部电子发展基金和国家科技部</span><span>863</span><span>计划和政府其他基金资助下，通过各项目研究单位和国内骨干软件企业多年的不懈努力，国内在基础中间件领域已经形成丰富的技术积累，并在</span><span>CORBA</span><span>技术（国防科技大学与中创软件）、消息中间件技术（中科院软件所）、</span><span>J2EE</span><span>应用服务器（北京大学）、</span><span>Web Service</span><span>（北航）等方面在技术上基本与国外保持同步发展的水平。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>以</span><span>CORBA</span><span>技术为例，国防科技大学与中创软件以对象管理组织发布的</span><span>CORBA</span><span>及</span><span>MDA</span><span>标准体系为依据，并结合</span><span>J2EE</span><span>、</span><span>XML</span><span>、</span><span>Web Service</span><span>等标准，对</span><span>ORB</span><span>、</span><span>CORBA </span><span>构件模型及其运行支撑技术、企业协同框架（</span><span>CCA</span><span>）、</span><span>EAI Profile</span><span>等进行了深入的研究，近</span><span>3</span><span>年在国内一级刊物和国际会议上发表</span><span>50</span><span>多篇文章，向对象管理组织（</span><span>OMG</span><span>）提交</span><span>9</span><span>项标准提案，已经从标准跟从阶段进入参与阶段，研究论文和成果在国际上得到广泛引用，国防科技大学</span><span>CORBA</span><span>研究成果</span><span>StarBus</span><span>并获得国家科技进步二等奖。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; 1.2. </span><span>产品与市场现状</span><span><br>&nbsp;&nbsp;&nbsp; </span><span>中间件作为基础软件的重要组成，业已与操作系统、数据库齐头并进，在世界范围内呈现出迅猛发展的势头，已经形成一个巨大的产业。目前，中间件在国内整个软件行业中应该是发展速度最快的市场之一。中国软件产业经过</span><span>20</span><span>年的发展，很多部门的信息化建设都走过了关键业务应用和部门级应用的阶段，现在开始向企业级应用转变。所谓企业级应用，最为人们所重视的就是各类信息资源之间如何关联、整合、协同、互动和按需服务，这些都是中间件能够发挥巨大作用的空间所在。当然，中国软件产业整体上还比较弱，整个社会信息化的程度无论在广度、深度方面都还不够，这些自然也限制了国内软件产业及中间件的市场规模。随着国家信息化建设的不断深入，社会对应用软件，特别是对网络应用起支撑作用的中间件产品的巨大需求是不争的事实，国内中间件的市场才刚刚开始启动，存在巨大的发展机会和空间。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>目前，网络应用中间件逐渐在基础中间件、应用中间件、应用框架等三个层面形成激烈的产品竞争和市场竞争格局。从三个方面的产品来分析，国外厂商仍然占主导地位，主流厂商包括</span><span>IBM</span><span>，</span><span>BEA</span><span>，</span><span>ORACLE</span><span>，</span><span>HP</span><span>，</span><span>Iona</span><span>等，而一些新型的中间件公司，如</span><span>Tibco</span><span>，</span><span>webMethod</span><span>，</span><span>Vitria</span><span>也开始携其应用集成中间件或业务流程管理中间件进入中国市场。而国内一些规模较大的软件公司也开始进入此领域，形成了包括中创软件商用中间件、金蝶</span><span>Apusic</span><span>、东方通科技、中关村科技、中和威等在内的一批中间件专业厂商，东软、用友、信雅达等应用集成商也大量投入中间件产品的研发，国产中间件已经形成了比较完整产品体系，例如，中创软件、中和威推出了基于</span><span>CORBA</span><span>标准的通信中间件产品；中创软件、金蝶软件、东方通科技等公司分别推出了遵循</span><span>J2EE</span><span>规范的应用服务器产品；中创软件、中科院软件所、东方通科技推出了消息中间件产品；中创软件推出了符合</span><span>OMG</span><span>标准的企业应用集成套件</span><span>InforEAI</span><span>；此外，还有大量的公司投入到中间件开发平台和构件库的建设中。国产中间件已经广泛成功应用于我国政府、交通、金融、证券、保险、税务、电信、移动、教育、军事等行业或领域的信息化建设，并成为大型应用系统建设不可缺少的一环。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>同国外厂商比较，国内中间件厂商的整体实力还存在很大的差距。如果仅仅从产品的功能上看，我们似乎并不比别人缺什么，但围绕中间件产品从研发到成功应用的全周期来看，我们还缺很多东西，暂时也很难对国外产品形成真正的竞争威胁。应该说国内中间件产品的成熟度应该是没有问题的，但要市场普遍接受国产中间件产品，却还有一个相当长的过程。以中创软件</span><span>Infor</span><span>系列中间件为例，我们提供的产品可在各类主流操作系统平台和主流数据库上稳定可靠地运行，并可与通行的各种开发工具紧密融合，产品都具备丰富的系统管理功能，并已经在大量行业中获得了成功应用经验，即使如此，要真正形成具有号召力的中间件品牌，还有艰巨的路需要一步步去走。同国外优秀中间件产品相比，我们还有大量需要借鉴和学习的地方，例如在产品的发展方向把握、持续开发能力、产品化工作、市场运作等方面，我们都还要继续加强，不断完善。当然，国内中间件厂商及其产品也具有非常明显的优势，我们贴近国家信息化的现实需求，已经积累了丰富的领域问题和中间件应用经验，我们的中间件产品可以在实用性和易用性方面更加贴近本地化市场需求，在技术支持和服务方面也具有相当的优势。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; 1.3. </span><span>现状分析</span><span><br>&nbsp;&nbsp;&nbsp; </span><span>综合产业界的发展情况，我国中间件产业在</span><span>2004</span><span>年呈现出如下发展特点：</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>技术多样化：中间件已经成为网络应用系统开发、集成、部署、运行和管理必不可少的工具。由于中间件技术涉及网络应用的各个层面，涵盖从基础通讯、数据访问、业务流程集成到应用展现等众多的环节，因此，中间件技术呈现出多样化的发展特点。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>产品平台化：由于传统的中间件技术门槛较高，学习周期较长，已经不能适应信息化建设对中间件的广泛应用需求。为此，中间件产品从解决网络计算中的关键问题开始向一体化平台方向发展，以提高中间件产品的使用便利性，更全面地满足各种网络应用软件所要求的可靠性、可伸缩性和安全性的需要。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>应用普及化：中间件技术已经是成熟的技术。我国大型信息化建设项目采纳中间件已经成为一种自然、例行的举措。中间件的广泛使用，也进一步促进了应用框架技术的丰富和发展，并为建立企业信息化业务基础架构奠定了基础。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; 2. </span><span>应用需求的新特点与中间件技术走向</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>由于网络世界是开放的、可成长的和多变的，分布性、自治性、异构性已经成为信息系统的固有特征。实现信息系统的综合集成，已经成为国家信息化建设的普遍需求，并直接反映了整个国家信息化建设的水平，中间件通过网络互连、数据集成、应用整合、流程衔接、用户互动等形式，已经成为大型网络应用系统开发、集成、部署、运行与管理的关键支撑软件。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>随着中间件在我国信息化建设中的广泛应用，中间件应用需求也表现出一些新的特点：</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>可成长性：</span><span>Internet</span><span>是无边界的，中间件必须支持建立在</span><span>Internet</span><span>之上的网络应用系统的生长与代谢，维护相对稳定的应用视图</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>适应性：环境和应用需求不断变化，应用系统需要不断演进，作为企业计算的基础设施，中间件需要感知、适应变化，提供对下列环境的支持：</span><span><br>&nbsp;&nbsp;&nbsp; </span><span>■</span><span> </span><span>支持移动、无线环境下的分布应用，适应多样性的设备特性以及不断变化的网络环境</span><span><br>&nbsp;&nbsp;&nbsp; </span><span>■</span><span> </span><span>支持流媒体应用，适应不断变化的访问流量和带宽约束</span><span><br>&nbsp;&nbsp;&nbsp; </span><span>■</span><span> </span><span>在</span><span>DRE(DIstributed Real-time Enbeded)</span><span>环境下，适应强</span><span>QoS</span><span>的分布应用的软硬件约束</span><span><br>&nbsp;&nbsp;&nbsp; </span><span>■</span><span> </span><span>能适应未来还未确定的应用要求</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>可管理性：领域问题越来越复杂、</span><span>IT</span><span>应用系统越来越庞大，其自身管理维护则变得越来越复杂，中间件必须具有自主管理能力，简化系统管理成本。</span><span><br>&nbsp;&nbsp;&nbsp; </span><span>■</span><span> </span><span>面对新的应用目标和变化的环境，支持复杂应用系统的自主再配置</span><span><br>&nbsp;&nbsp;&nbsp; </span><span>■</span><span> </span><span>支持复杂应用系统的自我诊断和恢复</span><span><br>&nbsp;&nbsp;&nbsp; </span><span>■</span><span> </span><span>支持复杂应用系统的自主优化</span><span><br>&nbsp;&nbsp;&nbsp; </span><span>■</span><span> </span><span>支持复杂应用系统的自主防护</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>高可信性：提供安全、可信任的信息服务</span><span><br>&nbsp;&nbsp;&nbsp; </span><span>■</span><span> </span><span>支持大规模的并发客户访问</span><span><br>&nbsp;&nbsp;&nbsp; </span><span>■</span><span> </span><span>提供</span><span>99.99</span><span>％以上的系统可用性</span><span><br>&nbsp;&nbsp;&nbsp; </span><span>■</span><span> </span><span>提供安全、可信任的信息服务</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>这些新的应用特点对中间件技术的发展提出了新的挑战，也决定了中间件技术未来几年的发展方向，为了解决上述问题，中间件技术呈现出丰富多彩的格局，图</span><span>2</span><span>给出了解决各类问题的一些新的中间件技术。</span></p>
<p align=center><img height=250 alt="" src="http://www.blogjava.net/images/blogjava_net/debut/J2EE/middleware/Middleware-04.jpg" width=450 border=0></p>
<p align=center><span>&nbsp;&nbsp;&nbsp; </span><span>图</span><span> 2 </span><span>中间件技术应对应用需求的挑战</span></p>
<p><span>&nbsp;&nbsp;&nbsp; 3. </span><span>中间件产品与市场走向</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>由于应用复杂性及需求广泛性，用户需求多样化导致中间件产品进一步细分，中间件产品在未来</span><span>3</span><span>－</span><span>5</span><span>年时间仍将呈现多元化发展格局，中间件产品整体走向将表现出如下特点：</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>集成化中间件产品将大行其道：覆盖企业级应用设计、开发、集成、部署、运行和管理的集成化中间件产品（</span><span>Killer App</span><span>）将会出现。目前，</span><span>MDA</span><span>技术已经为中间件设计开发平台与运行平台的整合准备了方法学基础，</span><span>IBM</span><span>和</span><span>BOrland</span><span>等公司已经开始在其中间件产品中开始集成</span><span>MDA</span><span>工具，从而中间件将为信息系统的资源层、业务逻辑层、展现层提供全面的支持，同时，中间件也将演变成网络应用全生命周期支持工具。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>基于构件的软件开发将成为主流：随着中间件作为网络应用开发环境和运行环境双重支撑平台地位的确立，中间件产品研发重点将从运行平台逐渐向开发平台转移的，软件构件库管理平台将受到进一步关注。各个层面的构件资源将得到极大地丰富和发展，独立的构件交易商将会出现，</span><span>CBSD</span><span>将成为软件开发主流。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>在底层，中间件产品将进一步融合操作系统、数据库管理系统和其它资源管理平台（如元数据管理、目录管理、内容管理）的功能，形成一层厚实的基础软件；在上层，基于中间件的应用框架产品将得到极大丰富，例如面向金融的数据中心平台、电信业务运行支撑平台、电子政务信息交换平台、电子商务供应链管理平台等应用框架型领域中间件将不断丰富完善。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>应用集成和流程集成将成为中间件应用热点，对中间件产品的关注将慢慢从技术层面转换到业务层面。目前，包括</span><span>CORBA</span><span>、</span><span>J2EE</span><span>等中间件技术平台已经逐渐成熟，中间件厂商又开始了新型中间件的研制，其目的无非是使中间件产品不断逼近网络应用系统需求，为应用系统的建设沉淀更丰富的共享平台，不断降低应用系统建设的复杂性。目前的一些技术，如</span><span>MDA</span><span>、</span><span>EAI</span><span>、</span><span>BPM</span><span>、</span><span>XML</span><span>、</span><span>Web Service</span><span>等，都是从技术平台向业务领域内更大范围的数据集成、应用集成、流程集成、服务集成等转移的产物，而面向服务、以业务流程为中心、业务模型集成技术正逐渐成为中间件产品和市场下一步关注的焦点。</span></p>
<p><span>&nbsp;&nbsp;&nbsp; </span><span>随着应用集成和数据集成的应用推广，企业将沉淀更多可用的信息资产，在此基础上，商业智能产品将有一个新的回归热潮。商业智能技术、人工智能技术、元数据管理技术、信息可视化技术和</span><span>XML</span><span>、</span><span>CWM</span><span>等标准进行融合，将有可能在商业智能领域出现新型的中间件产品，其主要作用是对大量信息资产进行有效的定位检索和维护管理，并挖掘信息资产的价值。</span></p>
<p>&nbsp;</p>
<img src ="http://www.blogjava.net/debut/aggbug/108742.html" width = "1" height = "1" /><br><br><div align=right><a style="text-decoration:none;" href="http://www.blogjava.net/debut/" target="_blank">debut</a> 2007-04-05 17:12 <a href="http://www.blogjava.net/debut/articles/108742.html#Feedback" target="_blank" style="text-decoration:none;">发表评论</a></div>]]></description></item></channel></rss>