温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,汇文网负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。
网站客服:3074922707
CORBA
分布式
对象
技术
高高高等等等院院院校校校计计计算算算机机机专专专业业业教教教育育育改改改革革革推推推荐荐荐教教教材材材分布式对象技术分布式对象技术李文军 周晓聪 李师贤北京:机械工业出版社2003 年 9 月第一版存书档稿存书档稿李文军等编著分布式对象技术 版版版 权权权 所所所 有有有 禁禁禁 止止止 流流流 通通通内容简介分布式计算是当前软件技术的一个重要发展方向。本书以 OMG 组织的 CORBA 和 Sun 公司的 EJB规范为例,向读者介绍分布式对象技术的基本概念、开发过程、规范标准、高级课题等内容。本书共分 4 个部分:第 1 部分“基本概念”介绍从传统的集中式计算过渡到面向对象的分布式计算的基本概念与原理;第 2 部分“开发过程”首先展示一个 CORBA 应用程序的典型开发过程,然后详细讨论如何利用 OMG IDL 编写对象接口,如何利用可移植对象适配器(POA)编写服务端程序,如何采用不同调用类型和通信方式编写客户端程序,以及如何在运行环境中部署应用程序;第 3 部分“高级课题”探讨分布式环境下对象查找、对象间异步与多目通信、分布式事务处理、服务端性能与可伸缩性等课题;第4 部分“其他及展望”介绍了 EJB 组件模型的基本原理以及各类 EJB 组件的开发与部署过程,帮助读者理解基于组件的软件开发技术,最后还探讨了分布式计算的发展方向。为便于读者学习,本书围绕各知识点设计了丰富的例子程序,并在每一章末安排了不同难度的思考与练习题;此外,本书每一章的“进一步阅读”小节为读者更深入地学习相关知识提供了参考。本书适合作为计算机科学与技术专业高年级本科生和研究生学习分布式计算技术的教材,也可供分布式计算领域的研究与开发人员参考。李文军等编著分布式对象技术 版版版 权权权 所所所 有有有 禁禁禁 止止止 流流流 通通通 i 引 言分布式计算是当前软件开发技术的一个重要发展方向。著名计算机科学家 C.A.R.Hoare指出:“分布式计算是一个具有重大理论与实践意义的迷人课题,其迷人之处在于理论与实践的同步发展,一方面实践推动了理论,另一方面理论又指导着实践。”本书为读者介绍分布式计算领域的基本概念、开发过程、规范标准、高级课题等内容。分布式计算有两种典型的应用途径。第一种应用途径是将分布式软件系统看作直接对现实世界或问题域中分布性的建模。例如,当今许多业务处理流程通常呈现一种分布式运作方式,负责制造或加工的工厂可能位于珠江三角洲一带,而负责市场营销的部门则可能分别位于北京、上海和广州,此时处理业务流程的软件系统也应采用分布式处理方式。分布式对象(Distributed Objects)技术是这一应用途径的主要技术。第二种应用途径主要用于改进某些应用程序的运行性能,使它们比单进程的集中式实现具有更高的运行效率,此时软件系统的分布性并不是现实世界或问题域中分布性的直接映射,而是为充分利用额外的计算资源而人为引入的。例如,探索外星文明的 SETIhome项目自 2000 年起已利用全世界 50 多万台 PC 的计算能力分析一台射电望远镜收集的海量数据;美国 Entropia 公司自 2000 年开始的 FightAIDSHome 项目利用 3 万多台家庭 PC 评价艾滋病的候选药物,2003 年美国 D2OL 实验室也采用类似计算技术探索防治非典型肺炎(SARS)的候选药物;2001 年,美国与意大利数学家开展的 MetaNEOS 项目汇集两国近千台计算机用一周时间求解一个名为 Nug30 的优化问题。近年来全球广泛开展的网格计算(Grid Computing)研究是这一应用途径的未来发展方向。在计算机硬件技术与网络通信技术的支持下,应用需求驱使计算机软件的规模与复杂性不断增长。面对这种情况,对整个软件系统的体系结构进行分析与设计就远远重要于对算法与数据结构的选择。软件体系结构(Software Architecture)所关心的是整个软件系统的结构,它决定了一个软件系统由什么样的组件组成,以及这些组件之间的交互关系如何。典型的软件体系结构风格有设计图形用户界面常用的事件驱动风格、设计操作系统常用的层次化设计风格、设计编译程序常用的管道与过滤器风格、以及当前应用程序普遍采用的面向对象风格等。一个实用软件系统的体系结构通常是若干典型风格的有机结合。分布式软件系统通常基于客户机服务器风格,其中客户程序提出对信息或服务的请求,由服务程序提供这些信息或服务。客户机服务器计算模型发展至今,大约经历了三个里程碑:局域网文件服务器、数据库服务器以及分布式对象技术。由于当前面向对象技术几乎已渗透到软件开发的每一个角落,先进的分布式软件开发方法当然离不开与面向对象技术的结合,因而分布式软件体系结构通常是客户机服务器风格与面向对象风格的有机结合,典型例子有 OMG 组织的公共对象请求代理体系结构(CORBA)、Sun 公司的企业级 JavaBeans(EJB)、Microsoft 公司的分布式组件对象模型(DCOM)等。预测不同技术平台的未来发展趋势是一件困难的事情,但倘若单纯从学习与研究的角度出发,CORBA 以其特有的规范严谨性、技术开放性、平台无关性和其他许多先进的分布式计算特性,理应成为学习分布式对象计算技术与分布式软件体系结构的首选。在理论方面,可参考 OMG 发布的一系列规范和关于 CORBA 的丰富读物;在实践方面,既可下李文军等编著分布式对象技术 版版版 权权权 所所所 有有有 禁禁禁 止止止 流流流 通通通 ii 载使用 IONA Orbix、Borland/Inprise VisiBroker 等商品化 CORBA 产品的 30 或 60 天试用版,也可使用 OmniORB、TAO 等免费 CORBA 产品。相对于其他分布式对象计算模型而言,CORBA 在理论上更为完整和严谨,即使读者所采用的开发与运行平台未必是 CORBA 兼容的,CORBA 模型中提出的许多问题也应加以慎重考虑,并可借鉴 CORBA 提出的问题解决方案。本书从软件体系结构的角度介绍分布式软件系统分析与设计的基本概念,描述了采用分布式对象技术开发与部署分布式软件系统的过程,并探讨分布式软件的可靠性、可伸缩性、性能等高级课题。本书的主要内容分为四个部分:第一部分“基本概念”,介绍从传统的集中式计算过渡到面向对象的分布式计算的基本概念与原理,并帮助读者掌握 OMG 的 OMA 参考模型、CORBA 体系结构和分布式对象的工作原理。为避免习惯于集中式软件开发的读者第一次就接触太多的分布式对象技术新概念,我们需要一个过渡环节以达到循序渐进的学习目标,Java RMI 以其简单性与实用性自然进入我们的视野。第二部分“开发过程”,首先利用一个完整而简单的经典应用实例介绍基于分布式对象通信基础设施 ORB 开发 CORBA 应用程序的典型过程,然后详细讨论如何利用 OMG 的接口定义语言 IDL 编写分布式应用程序的对象接口,如何利用可移植对象适配器(POA)编写服务端程序,如何采用不同调用类型和通信方式编写客户端程序,以及如何在一个实际运行环境中部署应用程序。第三部分“高级课题”,探讨分布式应用程序中的一些高级课题,提出可能产生的问题以及这些问题的可能解决途径,包括分布式环境下对象的查找方法、对象之间的异步与多目通信、分布式事务处理、如何提高服务端程序的性能与可伸缩性等课题。这些高级课题对于 CORBA 平台与非 CORBA 平台的分布式应用开发均有重要指导意义。第四部分“其他及展望”,介绍和比较其他分布式对象技术的特点,拓宽读者在分布式计算领域的知识面,并探讨分布式计算进一步的发展方向。这一部分重点讨论 EJB 组件模型的基本原理,并以几个实用例子简要介绍 EJB 组件的开发与部署过程,帮助读者理解基于组件的软件开发技术。因作者不熟悉 Microsoft 公司技术与产品,本部分未涉及 DCOM和.Net 等技术。本部分也不打算讨论 CORBA、EJB 和 DCOM 哪一种模型或产品更好,或者分布式应用系统应采用何种平台等问题,这类问题只会引发面红耳赤的争吵。实际上对开发技术与开发平台的选择还取决于项目的应用规模、人员素质、组织形式等诸多商业和技术约束,并且起决定性作用的通常是商业因素而不是技术因素。本书第 1 章的 RMI 例子程序运行在 JDK 1.3 或 JDK 1.4 版本,读者可从 Sun 公司的网站http:/ JDK。喜爱集成化环境的读者也可利用支持该版本 JDK 的集成化开发环境调试或运行该例子程序,例如 WebGain 公司的 VisualCaf 4.5专家版或企业版、Borland 公司的 JBuilder 6 或 JBuilder 7 个人版或标准版、IBM 公司的VisualAge for Java 4.0 专业版等。本书第 3 章至第 11 章中的所有 CORBA 应用程序例子均运行在 Borland/Inprise 公司的VisiBroker for Java 第 4.5.1 版。VisiBroker 目前已被集成到 Borland 企业服务器(BES)产品中,读者可从http:/ Borland 企业服务器 VisiBroker 版本的 60 天试用版。书中第12章的所有EJB例子程序均运行在BEA公司的WebLogic Server 7.0版,读者可从BEA公司的下载中心http:/ 版版版 权权权 所所所 有有有 禁禁禁 止止止 流流流 通通通 iii Borland公司的JBuilder 7企业版和WebGain公司的WebGain Studio 4.5均支持在集成化环境中快速开发与部署基于WebLogic应用服务器的J2EE应用程序。读者还可从中山大学计算机科学系软件工程实验室网站http:/ InternetIntranet 的分布式软件开发人员参考,也可作为计算机科学与技术专业高年级本科生与研究生学习分布式计算课程的教材。本书假设读者已掌握面向对象程序设计方法与 Java 程序设计语言,并具备面向对象软件工程的基本知识。在 ACMIEEE-CS 最新修订并发布的2001 计算教学计划(简称 CC2001)中,根据计算技术的发展现状与趋势新增了“以网络为中心的计算(NC)”作为 14 个知识领域之一,其中包含客户机服务器计算、开发 Web 应用、分布式对象系统、无线与移动计算等专题。本书内容覆盖了该知识领域的许多专题。本书每一章后都提供了思考与练习题,其中规模较大或复杂性较高的题目以星号“*”标出,这些题目也适合作为课程设计的选题。BEA 系统(中国)有限公司的刘汨春先生、中山大学计算机科学系的李国桢副教授对本书初稿提出了宝贵意见,在此谨向他们表示衷心感谢。本书前身是作者 2001 年初为中山大学计算机科学系编写的讲义分布式软件体系结构,在该讲义的使用过程中得到校内外许多师生的支持与指点,本书的顺利完稿离不开他们的鼓励与关怀。此外,感谢国家自然科学基金(79910161989)和高等学校博士点基金(99-018-411703)对本书出版的资助。分布式计算是软件开发技术的一个新兴领域,并且各种分布式计算技术还在持续、迅猛地发展。作者水平有限,书中谬误之处在所难免,恳请广大读者不吝批评指正。李文军()周晓聪()李师贤()2003 年 7 月于广州康乐园李文军等编著分布式对象技术 版版版 权权权 所所所 有有有 禁禁禁 止止止 流流流 通通通 iv 目 录引引 言言.I第一部分第一部分 基本概念基本概念.1第 1 章 计算:从集中到分布.2 1.1 软件设计的基本思想.21.1.1 隐式地 vs 显式地.21.1.2 逻辑的 vs 物理的.31.1.3 面向对象技术.41.1.4 软件体系结构.4 1.2 客户机服务器体系结构.51.2.1 客户机与服务器.51.2.2 客户端与服务端的分离.61.2.3 两层结构与多层结构.61.2.4 分布式对象系统.8 1.3 一个话费清单查询程序.81.3.1 数据库设计.91.3.2 客户程序与服务程序的通信.101.3.3 远程方法调用(RMI).101.3.4 对象接口定义.111.3.5 服务端程序.121.3.6 客户端程序.151.3.7 部署并运行应用程序.17 1.4 关于例子程序的讨论.201.4.1 我们做了什么?.201.4.2 我们还可以做什么?.201.4.3 如何让我们做得更好?.23思考与练习.23进一步阅读.24第 2 章 CORBA 基本原理.26 2.1 对象管理体系结构.262.1.1 对象管理组织 OMG.262.1.2 对象管理体系结构 OMA.27 2.2 CORBA 体系结构.292.2.1 OMG 的对象模型.292.2.2 对象请求代理的体系结构.302.2.3 对象接口定义.312.2.4 客户端机制.312.2.5 服务端机制.32李文军等编著分布式对象技术 版版版 权权权 所所所 有有有 禁禁禁 止止止 流流流 通通通 v 2.3 分布式对象的可互操作性.332.3.1 可互操作性.332.3.2 ORB 域和桥接.332.3.3 GIOP、IIOP 与 ESIOP.332.3.4 更高的可互操作性.34 2.4 CORBA 规范与 CORBA 产品.342.4.1 CORBA 规范.342.4.2 CORBA 产品概述.352.4.3 商品化 ORB 产品.362.4.4 免费与开源 ORB 产品.372.4.5 产品与规范的一致性.38 2.5 内容小结.392.5.1 CORBA 带来什么?.392.5.2 未解决的问题.39思考与练习.39进一步阅读.40第二部分第二部分 开发过程开发过程.42第 3 章 CORBA 应用程序开发过程.43 3.1 面向对象分析与设计.43 3.2 分布式系统的设计决策.433.2.1 运行平台.433.2.2 网络传输.443.2.3 通信方式.443.2.4 资源优化.443.2.5 其他决策问题.44 3.3 CORBA 应用程序开发过程.443.3.1 编写对象接口.453.3.2 编译 IDL 文件.463.3.3 编写对象实现和服务程序.463.3.4 编写客户程序.463.3.5 创建并部署应用程序.473.3.6 运行应用程序.47 3.4 一个银行账户管理程序.473.4.1 对象接口定义.473.4.2 生成的接口和类.483.4.3 编写对象实现和服务程序.533.4.4 编写客户程序.563.4.5 创建应用程序.573.4.6 运行应用程序.57 3.5 深入 IDL 桩和框架.583.5.1 IDL 桩和框架的类层次.593.5.2 IDL 桩与客户端对象引用.593.5.3 IDL 框架的代码.623.5.4 用于纽带机制的 IDL 框架.64李文军等编著分布式对象技术 版版版 权权权 所所所 有有有 禁禁禁 止止止 流流流 通通通 vi 思考与练习.65进一步阅读.65第 4 章 编写对象接口.67 4.1 对象接口与对象实现.674.1.1 接口与实现分离.674.1.2 接口定义语言.67 4.2 OMG IDL 的语法与语义.684.2.1 词法规则.684.2.2 模块的声明.684.2.3 类型的声明.694.2.4 常量的声明.734.2.5 异常的声明.734.2.6 接口的声明.744.2.7 值类型的声明.76 4.3 使用值类型.794.3.1 IDL 定义.794.3.2 编译 IDL 文件.804.3.3 实现 IDL 接口.814.3.4 实现值类型.824.3.5 服务程序与客户程序.84 4.4 使用接口库.864.4.1 什么是接口库?.864.4.2 接口库的结构.864.4.3 接口库管理工具.874.4.4 编写接口库客户程序.88 4.5 设计对象接口的准则.914.5.1 如何编写好的对象接口?.914.5.2 典型的对象接口.92思考与练习.92进一步阅读.93第 5 章 编写服务端程序.95 5.1 可移植对象适配器.955.1.1 CORBA 对象与伺服对象.955.1.2 CORBA 对象的基本语义.955.1.3 对象适配器.965.1.4 可移植对象适配器.975.1.5 POA 及其组件的 IDL 定义.98 5.2 设计 POA 策略.1015.2.1 什么是 POA 策略?.1015.2.2 选择 POA 策略.1015.2.3 组合使用 POA 策略.1035.2.4 请求的处理过程.104 5.3 使用 POA.1045.3.1 获取根 POA 的对象引用.105李文军等编著分布式对象技术 版版版 权权权 所所所 有有有 禁禁禁 止止止 流流流 通通通 vii 5.3.2 创建自定义策略的 POA.1055.3.3 使用 POA 管理器.1065.3.4 激活与冻结对象.1075.3.5 使用默认伺服对象.109 5.4 伺服对象管理器.1115.4.1 伺服对象激活器.1115.4.2 伺服对象定位器.114 5.5 适配器激活器.1155.5.1 按需激活 POA.1155.5.2 使用适配器激活器的例子程序.116 5.6 纽带机制.1185.6.1 纽带机制工作原理.1185.6.2 使用纽带机制的例子程序.119 5.7 POA vs BOA.1215.7.1 基本对象适配器.1215.7.2 POA 对 BOA 的改进.121思考与练习.121进一步阅读.122第 6 章 编写客户端程序.124 6.1 请求的基本概念.1246.1.1 请求是一个对象.1246.1.2 ORB 伪对象.1256.1.3 创建请求对象.1266.1.4 Any 类型.1276.1.5 实际参数与返回结果.1296.1.6 服务端的请求对象.130 6.2 选择调用类型.1316.2.1 静态调用接口.1316.2.2 动态调用接口.1316.2.3 选择合适的调用类型.131 6.3 选择通信方式.1326.3.1 同步通信.1326.3.2 延迟同步通信.1326.3.3 单向通信.1326.3.4 使用不同的通信方式.133 6.4 使用动态调用接口.1336.4.1 基于 DII 的 IDL 桩.1336.4.2 使用 DII 的开发步骤.1356.4.3 完整的例子程序.136 6.5 使用动态框架接口.1386.5.1 动态框架接口.1386.5.2 基于 DSI 的 IDL 框架.1386.5.3 使用 DSI 编写对象实现.140 6.6 请求的上下文.144李文军等编著分布式对象技术 版版版 权权权 所所所 有有有 禁禁禁 止止止 流流流 通通通 viii 6.6.1 什么是上下文对象?.1446.6.2 Context 伪对象.1446.6.3 使用附带上下文的请求.145 6.7 消息传递的服务质量.1466.7.1 消息传递的 QoS 策略.1466.7.2 为消息传递指定 QoS 策略.1506.7.3 一个完整的例子程序.151思考与练习.152进一步阅读.153第 7 章 部署应用程序.155 7.1 部署阶段的总体决策.1557.1.1 选择运行平台.1557.1.2 决定包装形式.1557.1.3 考虑系统容错性.1557.1.4 开放系统 vs 封闭系统.1567.1.5 安装过程启示.156 7.2 部署服务端程序.1567.2.1 创建和发布对象引用.1577.2.2 部署对象实现.1577.2.3 部署持久服务程序.157 7.3 部署客户端程序.1577.3.1 获取对象引用.1577.3.2 部署接口定义.1587.3.3 部署 IDL 客户桩.158 7.4 部署 VisiBroker 应用程序.1587.4.1 安装运行环境.1597.4.2 安装支持服务.1597.4.3 定制运行环境.1607.4.4 启动应用程序.1607.4.5 使用管理工具.160 7.5 设置 VisiBroker 属性.1607.5.1 VisiBroker 属性.1607.5.2 设置 VisiBroker 属性.161 7.6 配置智能代理.1637.6.1 部署智能代理.1637.6.2 使用 ORB 域.1647.6.3 提高对象容错性.165 7.7 使用实现库.1657.7.1 什么是实现库服务?.1667.7.2 实现库管理工具.1667.7.3 编写实现库客户程序.1687.7.4 按需激活对象.170思考与练习.171进一步阅读.172李文军等编著分布式对象技术 版版版 权权权 所所所 有有有 禁禁禁 止止止 流流流 通通通 ix 第三部分第三部分 高级课题高级课题.173第 8 章 对象查找与对象通信.174 8.1 对象查找.1748.1.1 查找对象的基本机制.1748.1.2 CORBA 命名服务.1758.1.3 CORBA 交易对象服务.1798.1.4 选择合适的对象查找机制.182 8.2 对象通信.1838.2.1 分布式对象的通信.1838.2.2 CORBA 事件服务.1838.2.3 CORBA 通知服务.1938.2.4 CORBA 消息服务.193思考与练习.194进一步阅读.195第 9 章 事务处理及其他对象服务.196 9.1 对象事务处理.1969.1.1 什么是事务?.1969.1.2 基于 DBMS 的事务处理.1969.1.3 分布式事务处理.1979.1.4 CORBA 对象事务服务.1999.1.5 OTS 应用编程模型.2039.1.6 OTS 与 TP 监控程序.206 9.2 并发控制.2069.2.1 CORBA 并发控制服务.2069.2.2 不同的锁模式.2069.2.3 并发控制服务提供的接口.208 9.3 对象安全性.2089.3.1 信息系统的安全性.2089.3.2 CORBA 安全服务.2099.3.3 安全策略及其实施.2109.3.4 安全服务的体系结构.210 9.4 对象持久性.2129.4.1 CORBA 持久对象服务.2129.4.2 CORBA 持久状态服务.2129.4.3 CORBA 外表化服务.212 9.5 对象集管理.2129.5.1 CORBA 关系服务.2139.5.2 CORBA 生存期服务.2139.5.3 CORBA 对象类集服务.2149.5.4 CORBA 查询服务.214 9.6 其他服务.2149.6.1 CORBA 属性服务.2149.6.2 CORBA 时间服务.2159.6.3 CORBA 特许服务.215李文军等编著分布式对象技术 版版版 权权权 所所所 有有有 禁禁禁 止止止 流流流 通通通 x 思考与练习.216进一步阅读.216第 10 章 性能与可伸缩性.218 10.1 基本概念.21810.1.1 分布式应用程序的性能和可伸缩性.21810.1.2 POA 与可伸缩性.218 10.2 优化 IDL 接口的设计模式.21910.2.1 优化分布式应用程序性能的设计原则.21910.2.2 一个忽略性能的 IDL 接口设计例子.22010.2.3 值对象设计模式.22110.2.4 迭代器设计模式.222 10.3 资源池.22410.3.1 什么是资源池?.22410.3.2 资源池的体系结构.22410.3.3 资源池的 QoS 策略.225 10.4 多线程.22710.4.1 多线程体系结构.22710.4.2 服务程序的多线程模型.22710.4.3 VisiBroker 的线程管理.229 10.5 连接管理.23010.5.1 连接与可伸缩性.23010.5.2 可伸缩的连接管理.23010.5.3 VisiBroker 的连接管理.232 10.6 内存管理.23210.6.1 杜绝内存泄漏.23310.6.2 伺服对象实例池.235 10.7 负载均衡.23710.7.1 实现负载均衡的体系结构.23810.7.2 基于网络的负载均衡.23810.7.3 基于操作系统的负载均衡.23910.7.4 基于中间件的负载均衡.23910.7.5 基于应用程序的负载均衡.240思考与练习.241进一步阅读.241第四部分第四部分 其他及展望其他及展望.243第 11 章 EJB 组件模型与 J2EE 规范.244 11.1 EJB 的基本概念.24411.1.1 EJB 组件的分类.24411.1.2 EJB 组件与 EJB 容器.245 11.2 EJB 容器提供的设施与服务.24711.2.1 通信基础设施.24711.2.2 生存期管理.24711.2.3 命名服务.24911.2.4 并发控制服务.250李文军等编著分布式对象技术 版版版 权权权 所所所 有有有 禁禁禁 止止止 流流流 通通通 xi 11.2.5 持久性服务.25011.2.6 事务服务.25111.2.7 安全服务.252 11.3 开发与部署实体组件.25411.3.1 对象关系映射.25411.3.2 CMP 实体组件.25711.3.3 BMP 实体组件.265 11.4 开发与部署会话组件.27011.4.1 无状态会话组件.27011.4.2 有状态会话组件.274 11.5 开发与部署消息驱动组件.27911.5.1 Java 消息服务.27911.5.2 消息驱动组件.281 11.6 J2EE 规范与应用服务器.28511.6.1 基于 Web 的应用.28511.6.2 J2EE 规范.28611.6.3 JSP 和 Servlet.28611.6.4 J2EE 应用服务器.289思考与练习.290进一步阅读.291第 12 章 分布式计算展望.292 12.1 XML 与 Web 服务.29212.1.1 面向服务的体系结构.29212.1.2 Web 服务.293 12.2 网格计算与网格服务.29512.2.1 什么是网格计算?.29512.2.2 高性能网格计算.29512.2.3 网格服务.29612.2.4 网格计算展望.296 12.3 其他发展方向.29712.3.1 因特网计算.29712.3.2 对等计算.29712.3.3 寄生计算.297思考与练习.298进一步阅读.298附录附录 A OMG IDL 语法规则语法规则.300附录附录 B OMG 主要规范一览主要规范一览.303主要参考文献主要参考文献.308李文军等编著分布式对象技术 版版版 权权权 所所所 有有有 禁禁禁 止止止 流流流 通通通 1 第一部分 基本概念第 1 章 计算:从集中到分布第 2 章 CORBA 基本原理李文军等编著分布式对象技术 版版版 权权权 所所所 有有有 禁禁禁 止止止 流流流 通通通 2 第 1 章 计算:从集中到分布本章首先回顾计算模型从集中式走向分布式的基本思想与发展历程,然后利用 Java 语言的远程方法调用 RMI 与数据库连接 JDBC 开发一个简化的话费查询分布式应用程序,通过这一完整的例子帮助读者复习客户机服务器计算模型的基本概念,并分析与探讨该应用程序需进一步考虑与改进的不足之处,从而引出分布式对象技术待解决的问题。1.1 软件设计的基本思想1.1.1 隐式地 vs 显式地隐式地(implicitly)与显式地(explicitily)是软件开发技术中经常出现的两个修饰术语,用于指明程序设计语言、编程工具或软件开发环境等对软件开发人员的两种不同支持方式。例如,一个采用面向对象方法完成的系统设计可以采用 C 语言实现,然而 C 语言对面向对象设计的支持是一种隐式的方式,面向对象设计的许多概念在 C 语言中无法直接地表达出来,显然这种隐式支持远远比不上 C+、Java、Ada、Eiffel、Smalltalk 等面向对象程序设计语言提供的显式支持。软件开发人员获得显式支持的本质可看作是将许多原来必须由程序员动手实现的任务交由更底层的编译程序、开发工具或运行环境完成。例如在数据库管理系统的帮助下,应用程序员开发数据处理应用程序时减轻了许多数据定义、数据操纵、完整性、安全性等方面的负担。程序设计技术与软件开发技术的发展方向之一是不断为软件开发人员提供更完善、更有效的显式支持。程序设计技术的发展过程很好地体现了这一趋势。例如,C 语言或 Pascal 语言无法显式地描述求平方根函数 squareRoot()中可能引发的异常(譬如计算对象是一个负数),而 C+或 Java 语言允许在操作的规格说明(即操作的对外接口)中显式地将操作实现可能引发的异常表达出来,这种显式表达使编译程序可帮助程序员检查操作实现中是否真的可能引发这些异常,并约束使用这些操作的程序必须依据操作接口处理哪些异常。此外,将异常作为操作接口的一部分也有助于使用操作的程序员更全面地理解这些操作的语法与语义。又如,在面向对象程序设计中一个实体除属性与行为外,还应刻划该实体的属性与行为应满足的约束。譬如银行账户 Account 除拥有账户标识、存款余额等属性以及存款、取款、查询余额等行为外,还至少必须满足一个约束,即在账户生存期的任一时刻存款余额不得小于 0(如果是允许透支的信用卡账户,则应将约束修改为透支不得超过某一上限,而透支上限是账户的一个属性)。在 C+或 Java 语言中,程序员无法将这一约束显式地表达出来,只能在账户对象的初始化、存款、取款等行为的实现中隐式地表达,使用这些对象的其他程序员也只能通过理解这些行为的实现才能了解到 Account 的这种约束。当然通过注释将约束表达出来是一种良好的程序设计风格,但可惜编译程序不能据此提供任何有效帮助。相比之下,Eiffel 程序员可显式地描述 Account 必须满足的约束,以及每一操作之前或操作之后必须满足的条件,从而可分离正常条件下的业务代码与异常条件下的错误处理代码。在分布式软件开发中比传统的集中式软件开发有更多的问题需要解决,程序员可以自己动手解决这些问题,更理想的情况则是由底层的支持(如语言、工具、环境等)帮助程李文军等编著分布式对象技术 版版版 权权权 所所所 有有有 禁禁禁 止止止 流流流 通通通 3 序员完成这些任务。本书着重讨论在分布式软件开发中需要解决的核心问题,以及当前的分布式软件开发规范与产品对解决这些问题提供的支持。随着分布式软件开发技术的发展与成熟,程序员将获得越来越完善与有效的支持。对显式支持与隐式支持的讨论可以提醒我们,必须留意在分布式软件开发中存在哪些问题需要解决,这些问题并不会因为得不到显式支持而消失,在只有隐式支持的情况下程序员仍要自行解决这些问题。因而对解决关键问题的显式支持是评价与选择分布式软件的体系结构规范、规格说明语言与程序设计语言、软件开发工具与环境的一个重要因素。当然更重要的一点是提醒我们,在软件开发过程中应考虑可为分布式软件开发添加哪些新的显式支持,从而为分布式软件在我国的推广应用作出自己的贡献。1.1.2 逻辑的 vs 物理的逻辑的(logical)与物理的(physical)本质上分别代表着两个不同的抽象层次。早在10 多年前由 IEEE-CS/ACM 联合制订的91计算教学计划中,就已将抽象层次(levels ofabstraction)列为计算机科学与工程专业学生必须掌握的重要核心概念之一,这一概念贯穿了计算机学科的众多领域。所谓抽象是指将复杂事物的一个或多个特性去掉,而只留意其他剩余特性的行为或过程。我们也可以认为抽象就是将若干有区别的事物的共性抽取出来,并加以孤立地考察的行为或过程。例如在一幅城市地图中,道路、铁路、机场、码头、桥梁等均被表示为点、线或符号,两个机场被表示为不同位置上相同符号的点,因为我们只关心机场的地理位置而忽略了那些不关心的特性,如机场跑道条数、可起降机型、地勤人员数目等。显然,抽象行为在很大程度上取决于观察者所站的角度,譬如一幅军用地图通常比民用地图含有更丰富的信息,譬如桥梁的长度与宽度、所用建造材料、最大承受重量等特性。虽然抽象是人类把握复杂性的最基本方法之一,但这种认知世界的强有力工具并不是人类与生俱来的,而是人类长期认识世界与改造世界的活动所产生的结果。英国哲学家与数学家罗素在其名著数理哲学导论中断言:“发现一对鸡、两昼夜都是数 2 的实例,一定需要很多年代,其中所包含的抽象程度确实不易达到。至于 1 是一个数的发现,也必定很困难。说到 0,这更是晚近加入的,希腊人和罗马人没有这个数字。”抽象源于人类自身控制复杂性能力的不足:我们无法同时把握太多的细节,复杂的问题迫使我们将一些相关的概念组织成不同的抽象层次。日常生活中常见的 is-a 关系满足了人们对概念进行抽象和分类的需要,例如苹果是一种水果,水果是一种植物等,生物学采用的界、门、纲、目、科、属、种标准生物分类方法是这一思维方式的经典应用。在程序设计中将这种 is-a 关系显式地表达出来而形成的继承机制,是面向对象程序设计必不可少的重要特征之一。在软件设计中太容易找到抽象层次的实例,例如变量类型、对象类抽象数据类型、实现规格说明、数据流图分解与平衡等。逻辑层与物理层组织是一种常见的抽象层次。一个典型的 C+程序从逻辑上看由 m 个类与 1 个主函数 main()组成,但同样的逻辑组织形式却在物理上可根据不同需要组织为不同形式的文件模块,整个程序既可能划分为 n1个文件模块,也可能划分为 n2个文件模块。从不同的抽象层次来看,这两个程序的物理组织形式虽然有所不同,但其逻辑组织形式却是完全一样的。又如在大型信息系统的开发过程中,领域分析与需求说明的主要任务是根据现有信息系统的物理模型建立更高抽象层次的逻辑模型,逻辑模型抛弃了物理模型中那些开发人员不关心的细节,仅表达了系统边界之内用户最关心的内容,这一建模过程的本质就是一个抽象过程。通过对逻辑模型的研究与改进,软件开发人员可实现以计算机和网络为管理工具的一个新物理模型。李文军等编著分布式对象技术 版版版 权权权 所所所 有有有 禁禁禁 止止止 流流流 通通通 4 在分布式软件系统中,有许多机制虽然与传统的集中式软件在物理层次表现出很大差异,但从逻辑层次上看它们却是统一的,例如普通函数调用与远程过程调用(RPC)、对象消息传递与远程方法调用(RMI)、接口与实现的分离、同一接口多种实现等。因而在分布式对象技术的学习与应用中,利用不同抽象层次可帮助我们站在更高层次掌握分布式软件系统的各种机制,并能够以一种统一的知识框架来理解分布式软件与传统集中式软件的基本概念、表示技术以及开发过程。同理,一个软件系统在逻辑层次表现为分布式的,但在物理层次部署时却可能是集中式的。对于一个分布式应用程序,可以用一台单机同时充当客户机与服务器,并包含两者之间的通信系统,从而使我们能够在家中的一台 PC 上就能学习开发与调试分布式应用程序,然后再将这些应用程序部署到真正的分布式运行环境中。1.1.3 面向对象技术二十世纪 80 年代兴起的面向对象技术已在软件生存期的各个阶段取代传统的结构化方法,成为当今软件开发的主流技术。在分布式软件开发领域也不例外。面向对象开发过程本质上是一个建模过程。开发人员通过分析问题域中实体的属性、行为、约束等,抽象出能描述这些实体共同结构与特征的概念,然后在计算机中利用类建立这些概念的系统模型,再通过类创建具体的对象实例模拟问题域的实体行为。类似 M.Jackson 提出的 JSD(Jackson System Development)方法,面向对象开发方法强调将系统功能建立在系统模型之上,所有系统功能采用底层的系统模型提供的术语来表达,从而提高了软件系统的可扩展性与可维护性。除封装、信息隐藏、数据抽象、模块化、异常处理等特征外,面向对象技术的最主要特色是继承与多态性。继承是日常生活中的 is-a 关系在程序中的显式表达,是复用数据与操作的重要手段。程序多态性这一术语的含义甚广,面向对象程序的多态性主要是指运行期间程序表现出来的多态性,它建立在继承与动态绑定的基础上,使得一个对象在程序运行时可从属不同的动态类型,从而大大提