Extra Gain

天高,地厚,人更强

用户操作
[即时聊天] [发私信] [加为好友]
Extra GainID:best8625
44964次访问,排名2492(-2)好友7人,关注者10
想换换环境了,有意者可以M我...保险经纪人系统,支付系统经验,电子商务相关知识,也许可以给您带来不错的收益喔.
best8625的文章
原创 44 篇
翻译 0 篇
转载 1 篇
评论 13 篇
Extra Gain的公告
想换换环境了,有意者可以M我...保险经纪人系统,支付系统经验,电子商务相关知识,也许可以给您带来不错的收益喔.
最近评论
ganvingan:xiexie
perfection:不错.我的问题解决了.直接打命令就OK了.
谢谢啊.
smile:请问怎么没有详细设计和功能图呢
星星:谢谢
bl_song:支持,写的好!
文章分类
收藏
    相册
    bbs专用
    程序截图
    友情链接
    ExtraGain
    购书吧
    存档
    软件项目交易
    订阅我的博客
    XML聚合  FeedSky
    订阅到鲜果
    订阅到Google
    订阅到抓虾
    订阅到BlogLines
    订阅到Yahoo
    订阅到GouGou
    订阅到飞鸽
    订阅到Rojo
    订阅到newsgator
    订阅到netvibes

    原创 组件及中间件技术综述收藏

    新一篇: 今天遇到了一个问题,VS2005下面服务器控件全看不见了 | 旧一篇: 其它软件相关知识

    声明:此系列文章均为姜海宁老师原创,任何人不得转载. 

    我今天讲的内容涉及到教材上没有的重要概念和思想,它们大致属于软件体系结构范畴,当你从一个学生向软件工程师过渡时,掌握这些概念和思想是必需的。

     

     

     组件及中间件技术综述

    计算机软件的大厦是由不同层次的软件构成的。基础软件有操作系统和编译程序等,而应用软件更是无所不包,介入了几乎所有行业和很多家庭。近年来,随着网络应用的普及,一种新型的基础软件----中间件正在兴起,而组件技术做为软件复用和中间件的基础也为广大程序员所熟知。

     

    应用软件component

    中间件middleware

    基础软件(操作系统,编译程序……)

     

      对于一个软件开发人员,掌握组件及中间件技术是非常重要的,比操作系统和编译程序更重要,因为有机会开发操作系统和编译程序的程序员并不多,而组件及中间件几乎在任何软件开发中都要遇到。而且,在程序员将来的职业规划上,要上升到软件构架师,也必需对组件、中间件、设计模式、对象技术有很好的了解。

    对于组件及中间件,同学们都有一些认识,比如WebServiceCOM/DCOM/COM+JavaBeanEJBCORBA等组件技术,我们不仅听说过还有一点编程经验;而IISADO.NET等典型的中间件我们也比较熟悉。但这些知识散落在以前的不同专业课中,我们对组件及中间件的概念和思想缺少一个整体的认识,由于在软件方向的就业考试和研究生复试中,这类题目相当多,我用一节课的时间做个综述,使同学们能应付一下就业考试和研究生复试一般性的提问。

     

    一、       面向对象、组件、中间件及它们之间的关系

     

    1 面向对象

    面向对象技术我们都很熟悉,也能掌握各种编程语言的类、对象、继承、多态等代码的写法。向向对象思想的本质,实际上是对人在进行抽象思维时----即从个别的具体对象发现一般规律时----思维习惯的模仿,也就是说从具体的对象到一般的类,再从一般的类回到具体的对象。面向对象技术的好处是:它将人的思维习惯与被开发的软件系统构架融合到一起,与早期面向过程的技术相比,更有利于对系统的分析设计及代码复用。

     

    2 组件

      组件是按一定标准和规范(比如WebServiceCOMJavaBeanEJBCORBA等)编写的,二进制的,可复用的软件构件。

     

     

    3 中间件

       什么是中间件?在中间件出现的早期(上世纪九十年代初),人们将中间件理解为介于操作系统和应用软件之间的软件,使远距离相隔的(分部式的)应用软件能协同工作。后来,国外学术界开始明确地给出了它的定义:“中间件是一种软件,它能使处于应用层的各应用成份之间实现跨网络的协同工作,这时允许各应用成份之下的系统结构、操作系统、通信协议、数据库及其它应用服务各不相同。”

     

    应用软件

      可协同工作

     

    应用软件

    中间件

    中间件

    网络协议

    网络协议

    操作系统

    操作系统

    硬件平台

    硬件平台

     

     

     

    与操作系统一样,中间件也是一种基础软件。它的种类比操作系统更多,这一点后面再讲。

      

    3. 面向对象、组件、中间件的关系

    面向对象、组件、中间件是三个相关性很强的不同的概念。

    1)组件和面向对象很相似,但组件和面向对象并没有直接的关系,早期它们是各自独立发展起来的,但现在所有的组件技术都是面向对象的也是不争的事实。比如开发一个WebService组件和写一个类差不多。

    2中间件和组件有什么关系呢?组件是实现中间件的必要条件(这种说法理论上不通,但实际如此),也就是说中间件更多的只是一种思想,中间件具体的实现是一般是要通过某种组件技术的。但并不是所有组件都是中间件,一个组件是否中间件,要看它的软件系统架构中的作用和抽象程度。IIS或其它的WEB服务器,以及ADO.NETJDBC等数据连接工具则是很典型的中间件,它们本身实现为组件,在作用和抽象程度上也是中间件。比如ADO.NET是一个DLL文件,它即是组件,又是中间件。我们可以这样说,ADO.NET的物理形式是一个动态链接库DLL,它是由组件技术实现的,在功能和作用上又是一个中间件。JAVA程序员都知道JAVA应用服务器,JAVA应用服务器种类很多,但它们都遵J2EE规范,而J2EE的核心又是EJB---一种组件技术。所以基本我们可以说,JAVA应用服务器是一些组件的集合,这些组件的功能和作用相当于中间件,所以JAVA应用服务器基本上可以说是一些中间件的集合。

    我们看到,面向对象、组件、中间件都体现了抽象和软件复用的思想,但存在形式和作用范围有区别,面向对象更多的是一种设计方法,我们可以用面向对象方法编写程序,将面向对象程序封装成符合某种规范的组件,如果该组件作用于操作系统和应用软件之间实现跨网络的协同工作,又有足够的抽象程度(即通用程度),那该组件就是中间件。

     

    二、组件技术component

    前面说过,组件是中间件的必要条件,先从组件讲起。

    组件是按一定标准和规范(比如WebServiceCOMJavaBeanEJBCORBA等)编写的,二进制的,可复用的软件构件。组件技术实际上是为了满足软件重用要求而制定的规范。

    软件组件的思想来自于工业化的实物装配生产,这种生产的特点是标准化的零件组成标准化的部件,标准化的部件组成标准化的产品,一种零件可用于多种部件,一种部件可用于多种产品。这种生产方式的好处是:分工细致,生产率高,质量好,维修服务方便。如果软件生产也采用这种方式,软件将从个体手工业劳动转化为工业化生产,一种标准化的软件组件就可以重复通用于不同的程序,这对软件行业有决定性的意义,这种生产方式我们已有所体验:对.NETJAVA类库的使用,这些类库都由组件构成,我们用.NET JAVA编程,实际上就是用组件搭建自已的程序。

    目前,常见的组件标准及产品有以下四个系列:

    公司/组织

    简称

     

    微软

    COM/DCOM

    组件对象模型/分布式组件对象模型

    COM+

     

    .NET

     

    SUN

    SUN/IBM

    JavaBeans

     

    EJB

    企业版JavaBean

    OMG

    CORBA

    公共对象请求代理

    OMG

    WebService

     

    上述标准及产品内部细节不同,适用的平台也不同,但是设计思路是基本相同的。

    组件技术主要用于本机和分布式环境下,不同程序间的协同工作,如果学过操作系统,我们就应该知道,组件技术其基本问题是进程间通信(IPC)问题。也就是说两个不同组件之间如何相互调用及传送信息。

    程序间的协同工作本机在环境下比较简单,用操作系统的多进程共享内存(互斥、同步。。。)技术即可解决。但是组件是在分布式环下运行的,不太可能共享内存,所以要采用其它IPC机制。组件技术除了进程间通信(IPC)技术,还有其它技术,归结起来,组件包含的主要技术有:

    (1)  进程间通信(IPC)技术:解决组件分布式环境下,信息传输的网络协议及信息传输格式等问题。

    (2)  代理技术:一个组件调用另一个组件时,两个组件并不直接通信,而是通过各自的代理间接通信。代理技术还提供组件的位置透明服务。

    (3)  组件的服务。

    (4)  组件开发工具。

    下面一一讲述。

     

    1进程间通信(IPC)技术和代理技术

    由于现有的组件技术无一例外的都是通过代理来实现IPC的,所以放在一起讲。

    代理,其对应的英文单词有三个:agent , broker proxyAgent来自于人工智能,隐含“智能化的代理”,broker英文原意是“掮客,中间人”,agent broker常用于特指组件代理,而proxy主要用于网络。

    现有的组件技术无一例外的都是通过代理来实现IPC的,其基本模型为:

    客户组件

    服务器组件

     


        

    客户代理

    服务器代理

     

     

     

     

     


       当客户组件要调用服务器组件时,只需给客户代理发一个请求,调用和返回的细节则由客户代理---服务器代理去做。为什么组件间的IPC不直接完成而是要通过代理间接完成?这是软件体系结构的合理抽象。

    让我们回想一下操作系统是怎么来的:我们知道软件的早期是没有操作系统的,各个应用程序的开发人员要单独处理程序的资源管理问题(内存分配,进程调独,文件管理,设备竟争等等),非常困难和麻烦。后来人们发现,尽管应用程序功能各不相同,但其中资源管理的功能是一样的,可以把它抽取出来单独做成一个软件-----操作系统,为所有的应用程序开发人员提供一个资源管理平台,这样应用程序开发人员就不需要独自编写资源管理程序了,普通用户也更容易使用计算机。我们说操作系统是对计算机资源管理的抽象。

       组件代理也是如此,分布式组件在进行IPC时,虽然不同组件整体上功能各不相同,但与IPC有关的部分是相同的:比如通讯协议、信息传送格式及方式等等,把不同组件的这些相同部分抽取出来,做成代理,软件得到了合理的分层。其优点之一是:一些厂商可以专注于代理技术的研发;而组件程序员专注于组件本身的功能,IPC的编程问题则不需考虑,捆绑到某厂商现成的代理框架即可。比如说我们开发WebService,不需要写代理程序,甚至不需要知道代理的存在,只需完成程序的功能就可以,.NET IDE可自动把你的程序捆绑到WebService代理框架。

    下面我提一个问题:

    我们学过用.NETWebService,但客户端程序调用WebService时,需要“添加WEB引用”,这个动作隐含的意思是什么?

    答:是为调用该WebService的客户端生成一个客户端代理,而WebService的服务器端代理在编译WebService时已生成,这样在客户端程序调用WebService时,实际上是两个代理之间在通信。

      现在的组件开发工具一般都将组件代理对程序员透明,但我们仍可以观察到一些蛛丝马迹,比如在开发WebService时,如果客户要调用WebService,需进行“添加WEB引用”操作,这个操作实际上就是为客户代理提供服务器端WebService的位置、公用方法集等信息。

     

    前面讲了代理的基本思想,下面介绍代理如何实现IPC,其基本步骤为:

    (1)  客户组件要调用服务组件,首先发一个请求给客户代理,客户代理存有服务组件位置、公用方法等信息;

    (2)  客户代理将客户请求打包成某种格式,这个打包操作英文名称有的叫marshal(编组,打包),有的叫Serialization(序列化)。然后用某种网络协议(如TCP/IP)将包发给服务器代理。

    (3)  服务器代理解包,解包操作英文名称有的叫unmarshal(解组,解包),有的叫Deserialization(反序列化),将信息传给服务器组件。

    (4)  服务器组件执行请求,将请求结果给服务器代理,服务器代理打包发给客户代理,客户代理解包将调用结果返回客户代理。

     

    以上就是代理实现IPC的基本步骤。代理另外要做的一件事是提供组件的位置透明服务,即在理想的状况下,客户和服务器不需要知道彼此的位置,就可借助各自的代理通信,即“智能代理”。这是项很难的工作,也是现在比较热门的研究方向。组件技术是很重要的软件技术,不仅用在组件,也可用在人工智能、通信、移动网等很多领域。

     

    通过代理实现IPC是现代几乎所有组件技术的共同特点,它们构成了组件技术的基础。最早期的代理技术叫RPC(远程过程调用,在我们操作系统教材中有介绍)。RPC的实质是实现网络七层协议的会话层的工作,在两个试图进行通信的进程之间建立逻辑信道,并利用该信道交换信息。

    现有的组件技术使用的代理框架细节各不相同,但其基本思路都来自RPC,下表列出了常见组件技术的代理框架。

    公司/组织

    组件简称

    代理框架

    微软

    DCOM

    DCE RPC分布计算环境下的远程过程调用

    DCE RPCspecification总共有700多页)

    COM+

    DCE RPC

    .NET

    .NET Remoting

    SUN

    SUN/IBM

    JavaBeans

    RMI(远程方法激活)

    EJB

    RMI-IIOPRMI-JRMP

    OMG

    CORBA

    ORB(对象请求代理)

    OMG

    WebService

    SOAP+XML

    上述代理框架一般都支持TCP/IPUDP等网络协议,WebService还支持HTTPSMTP等网络协议。

    在上述代理框架中,服务器代理和客户代理的名称也不一样。比如微软的COM系列,将服务器代理称为框架(skeleton),将客户代理称为根(stub);而JavaBeansEJBCORBA则反过来称呼。

       

    2组件的服务

    前面介绍的代理技术是组件的基本技术,代理技术可确保组件之间的IPC,即相互调用和传送信息。但在分布式环境下这还不够,组件的事务、安全、服务质量也是重要问题。

    解决这类问题采用的思路是,把组件配置在一个环境(或容器)内,比如EJB<