1中间件技术Middlewaretechnology第一章概述赖永炫博士厦门大学软件学院2009.092课程信息Instructor:赖永炫Office:Room305a,HaiyunATelephone:13616046216Email:laiyx@xmu.edu.cn;laiyongxuan@hotmail.comTextbook:–《中间件技术原理与应用》–张云勇清华大学出版社References:–《CORBA原理及应用》朱其亮,郑斌编著北京邮电学院出版社–《分布式对象技术》李文军等机械工业出版社–《EngineeringDistributedObjects》WolfgangEmmerich,Wiley–《LearningDCOM》TbuanL.Thai,O’reilly–Google/baidu3相关课程–Java/C++;–Datastructure(数据结构);–Operatingsystem(操作系统);–Object-orientedprogramanalyzinganddesign(面向对象程序分析与设计);4Backgroundinthiscourse5IssuesofthiscourseWindowsLinuxUnixJbuilderVisualStudioMacOSFortranGCCCobol6软件发展的现状软件的出现还只有50多年的历史,是一种新兴的产业。在没有条条框框、标准协议的情况下,各路软件天才各显神通,呈现出百花齐放的局面、没有考虑整合、兼容、互操作问题。¾操作系统:Unix,DOS,Windows,Machitosh,Linux;¾程序语言:Fortran,Cobol,Pascal,Bacic,C,C++,Java,ObjectPascal,C#,Scriptlanguage.¾函数调用规范:_cdecl,_stdcall,_fastcall,thiscall,_pascal,_fortran,_syscall.¾编程模式:Procedure-Oriented,Object-oriented,Component-oriented,Service-oriented.¾开发工具:Borland,Microsoft,IBM,Sun,Apple.7软件技术的发展是一浪接一浪、后浪催前浪当一种软件技术打下一遍江山后,它又面临着新问题,被新的软件技术所取代。新技术并不意味要推翻和抛弃已有的应用系统,因为用户习惯,成本,系统可靠性等等原因。已有的应用系统继续发挥着不可替代的作用,是宝贵的资源。新的应用系统不是要抛弃旧的应用系统,而是要集成旧系统,达到旧貌换新颜的功效。¾高级程序语言屏蔽了操作系统API以及执行模式的差异:C++,Java.¾虚拟平台的出现瓦解了编程中的机器和操作系统概念;¾SOA则把软件的重心从计算(功能实现)移到了互操作的语义上;8分布任务已不只是在单机上运行,而是由网络中多台计算机上的相关应用共同协作完成,需考虑网络传输、数据安全、数据一致性、同步等诸多问题;异构计算机硬件、操作系统、网络协议、数据库系统以及开发工具种类繁多,需考虑数据表示、调用接口、处理方式等诸多问题;动态协作参与协作的应用允许位置透明性、迁移透明性、负载平衡性等需求。现代应用系统的基本特征9应用1应用2应用3服务器1服务器2服务器310中间件(Middleware)是一种软件,处于系统软件(操作系统和网络软件)与应用软件之间,它能使应用软件之间进行跨网络的协同工作(也就是互操作)允许各应用软件之下所涉及的“系统结构、操作系统、通信协议、数据库和其它应用服务”各不相同中间件11应用1应用2应用3服务器1服务器2服务器3中间件12应用软件中间件网络软件操作系统应用软件中间件网络软件操作系统利用中间件进行协同工作的系统可协同工作13组成部分执行环境(ExecutionEnvironment)软件–如果一个网络的各个节点安装了EE软件,各节点的应用软件就可以实现相互合作应用开发(ApplicationDevelopment)工具–一组工具,用来帮助开发内含“透明动用对方”成分的应用软件,或改造原有的无透明动用能力的应用软件14中间件对于应用之间协同工作的贡献提供了合作对象透明设施T1–合作一方不必知道另一方是谁和在何处,只说明自己需要怎样的服务,T1就能为其物色一个合适的合作方提供了下层设备透明设施T2–合作一方不必关心合作的另一方所用的节点设备(机器和操作系统)与本节点的差异中间件的层次结构15软件技术发展的四次飞跃Procedure-Oriented;Object-oriented;Component-oriented;Service-oriented;16软件发展面临的挑战、发展的源动力¾开发周期;¾开发成本;¾软件质量;¾系统可维护性;¾产品竞争和开发风险;¾资源的利用和共享:最大化收益;最小化成本最强的竞争实力;17软件发展面临的机遇¾Internet的普及又为软件的发展提供巨大机遇:¾资源的共享使得最大化收益、最小化成本,最快的开发时间成为伸手可及的事情;18快速的开发周期20021997200420062008201012月2月1月14天7天3天19产品竞争和开发风险¾第一,软件平台和技术的不断地改朝换代:DOS,Windows,.NET(Java),SOA。¾第二,随着软件技术愈来愈多,应用也愈来愈多元化。这使得产品的潜在客户群被分散,软件利润趋于下降;¾第三,信息技术的多元化,产品开发面临难以抉择的状态。面临着虚拟平台、程序语言和信息架构等众多因素的组合变量。20软件危机解决的出路¾编程的自动化(程序代码的自动生成:开发工具)¾应用的框架代码由开发工具自动生成,程序员只需要编写功能代码;¾实现程序的通用性(操作系统与机器)¾操作系统级的源程序;(一个程序要写多遍,多次编译链接);¾与操作系统无关的源程序;(一个程序写一遍,基于操作系统和机器要进行多次编译链接);¾与机器无关的源程序;(一个程序只要写一遍,编译链接一遍);¾实现软件之间的互操作:¾二进制级的软件互操作:同构软件的互操作,异构软件之间的互操作;¾一个机器中,同进程内互操作;¾同一机器中,不同进程间的互操作;¾不同机器间的软件互操作;21编程的自动化:开发工具集中开发环境(IDE)从编辑器+编译器+连接器,演变到同时面对专业开发人员,应用开发人员,分析设计人员以及整个开发团队。集中开发环境仍然是开发周期的核心。提供Framework,以及其他的工具(设计、编程、测试、部署)和Plug-In等。开发工具提供:•基于Framework的代码自动生成;•支持库(.h文件,.cpp文件,*.lib(dll)文件);•编译、链接;22开发工具的演进Require-mentsDesignBuildTestDeployBusinessArchitectDeveloperTesterOperationsManager第1/2代IDE3代IDE4代IDE23开发工具的演进第一代IDEEditor+Compiler+Linker1984第二代IDEDOS模式下的IDE专业工程师专业工程师应用工程师1985BorlandTurbo系列第三代IDEGUI模式下的IDE专业工程师应用工程师开发团队1993Borland系列Microsoft系列第四代IDEILIDE专业工程师应用工程师开发团队分析/设计人员2003JavaIDE.NETIDE语言/IDEIDE/FrameworkMFC/OWL)语言/IDE/FrameworkJava/.NETModeling/软件工程高级语言24软件开发的知识面单一程序语言DatabaseObject-OrientedPatternDeveloper’sKeyTechnologyModeling程序语言数据结构Algorithms25软件开发门槛的提升DatabaseObject-OrientedPatternDeveloper’sKeyTechnologyModeling程序语言数据结构AlgorithmsIntegrationArchitecureTestingConfiguration26由点到面的全方位软件技术每一个时代都有主导的软件技术在影响着当时的产品及软件公司的兴衰。不同年代中,不同信息技术成了当时的主宰力量:¾60/70年代,数据处理和程序语言独领风骚;¾80年代,便由数据库当家作主;¾90年代,各种组件和中间件又主导了系统架构;¾00年代,平台整合、集成时代。随着面向对象和中间件技术对于信息系统的影响愈来愈大,信息技术的演进逐渐从点形成了面,在2001年之后主要的软件力量来自平台的整合和竞争、以及全方位的软件技术。27发展趋势的归纳¾应用程序之间的整合受到愈来愈多的重视。9Internet/Intranet,Web的影响非常深远;9百花齐放的软件技术和程序语言,没有考虑日后整合;9整合/集成要使用一种松耦合(loosecoupled)构架并借助标准的沟通方式和数据来整合已有系统是必经之路。¾WebService提供了跨平台的能力,XML则是跨平台的数据交换标准。整合分散应用的最终选择是WebServices和XML.¾整合应用系统须要自动化工具以及一个整体构架(SOAService-orientedArchitecture)——(开发工具,和系统支持环境)。28实现源程序的通用性操作系统API高级程序语言库函数操作系统APIMap1WindowsUNIX操作系统APIDOSMap2Map3字节码JVM操作系统29实现源程序的通用性¾C语言中的库函数:malloc(size_tsize);¾在Windows中的Map实现:malloc(size_tsize){HANDLEh=GetProcessHeap();ReturnHeapAlloc(h,0,size);}¾Java语言:CObjectp=newCObject;30互操作的基本概念支持环境支持库客户程序服务程序代理(proxy)存根(stub)经纪人(Broker)123456781)运行环境2)开发工具3)客户软件;4)服务软件;1)分离性2)透明性动态性:1)直接交谈:无2)同一语言交谈:电话3)不同语言交淡:翻译互操作契约31互操作的基本概念支持环境支持库客户程序服务程序)代理(proxy)存根(stub)经纪人112345678基于互操作规范加装接口1)运行环境2)开发工具3)客户软件;4)服务软件;32中间件技术的含义支持环境支持库客户程序服务程序代理(proxy)存根(stub)经纪人Broker1123456781)运行环境2)开发工具;3)客户软件;4)服务软件;运行环境开发工具应用软件的开发应用软件的部署应用软件的运行33中间件特性支持环境支持库客户程序服务程序存根(proxy)存根(stub)经纪人1123456781)二进制级的互操作;2)服务程序有多个客户;3)客户和服务都会升级进化,无约束,可组合性;4)对应用程序员,保持编程模式的不变性;5)客户和服务之间的契约既要具有永恒性,又具有可延伸性;34互操作的范围有三种形式:它们都要考虑服务程序的标识,动态适配¾同一进程内不同模块之间的互操作;可以直接完成;¾同一机器中不同进程之间的互操作;要求进程之间通信,不用考虑Dataencoding;¾不同机器之间模块之间的互操作;要求机器间通信,要考虑不同Dataencoding之间的转换,因此须要中间翻译;还要事先约定传输协议;35中间件技术的优点9使用中间件技术之后,软件的开发的重心从功能实现变成了功能组件的组合;解决了成本问题、开发周期问题、质量问题,提高了软件的利用率。9软件的功能的扩充不再需要重新编译和链接,可以在二进制级完成软件功能的扩充;因此谁都可以对一个软件进行扩充,进行剪裁;9总之中间件技术使得软件从封闭变得开放,变成可为别人服务,自己也可以扩充,取得了互利互赢