第一部分 基本概念 1
第1章 绪论 1
1.1 引言 1
1.1.1 分布式计算的产生背景 1
1.1.2 分布式计算的发展历程 2
1.1.3 分布式计算技术的特点 3
1.1.4 中间件技术 4
1.2 软件设计的基本思想 4
1.2.1 隐式地与显式地 4
1.2.2 逻辑的与物理的 5
1.2.3 面向对象技术与UML 6
1.2.4 软件体系结构与MDA 10
1.3 分布式计算基本范型 11
1.3.1 分布式计算范型的概念 11
1.3.2 消息传递范型 12
1.3.3 远程过程调用范型 13
1.3.4 分布式对象范型 13
1.3.5 分布式组件模型 14
1.3.6 面向服务的体系结构 15
1.4 进程间通信 17
1.4.1 进程间通信的基本原理 17
1.4.2 接口与接口定义语言 20
1.4.3 数据表示与编码 20
1.4.4 事件同步机制 21
思考与练习 22
进一步阅读 22
第2章 基于Socket的通信 24
2.1 基本原理 24
2.1.1 Socket API的基本概念 24
2.1.2 Java对网络通信的支持 25
2.1.3 TCP、UDP与端口 25
2.2 数据报Socket 27
2.2.1 基本编程原理 27
2.2.2 面向无连接数据报UDP 29
2.2.3 面向连接数据报UDP 32
2.3 流式Socket 34
2.3.1 基本编程原理 34
2.3.2 单线程服务程序与客户程序 36
2.3.3 多线程服务程序 41
2.4 应用层协议开发 42
2.4.1 理解应用层协议 42
2.4.2 Daytime协议开发 43
2.4.3 FIP协议开发 51
2.4.4 HTTP协议开发 55
思考与练习 57
进一步阅读 58
第二部分 分布式对象技术 59
第3章 RMI基本原理与开发过程 59
3.1 分布式对象技术 59
3.1.1 分布式对象基本技术架构 59
3.1.2 分布式对象技术特点 60
3.1.3 分布式对象技术分类 61
3.2 RMI基本原理 63
3.2.1 RMI技术结构 63
3.2.2 RMI API介绍 64
3.2.3 RMI与RPC的区别 66
3.3 简单RMI例子开发过程 66
3.4 复杂RMI例子开发过程 70
3.4.1 数据库设计 71
3.4.2 对象接口定义 72
3.4.3 服务端程序 73
3.4.4 客户端程序 76
3.4.5 部署并运行应用程序 79
3.5 分布式应用程序设计决策 82
3.5.1 网络传输 82
3.5.2 通信方式 82
3.5.3 运行平台 82
3.5.4 资源优化 82
3.5.5 其他决策问题 83
思考与练习 83
进一步阅读 84
第4章 CORBA基本原理与开发过程 85
4.1 对象管理体系结构 85
4.1.1 对象请求代理 86
4.1.2 对象服务 87
4.1.3 公共设施 87
4.1.4 领域接口 88
4.1.5 应用接口 88
4.2 CORBA体系结构 88
4.2.1 OMG的对象模型 88
4.2.2 对象请求代理的体系结构 89
4.2.3 对象接口定义 90
4.2.4 客户端机制 91
4.2.5 服务端机制 92
4.3 CORBA应用程序开发过程 92
4.3.1 编写对象接口 93
4.3.2 编译IDL文件 94
4.3.3 编写对象实现和服务程序 94
4.3.4 编写客户程序 94
4.3.5 创建并部署应用程序 95
4.3.6 运行应用程序 95
4.4 一个银行账户管理程序 95
4.4.1 对象接口定义 96
4.4.2 生成的接口和类 97
4.4.3 编写对象实现和服务程序 103
4.4.4 编写客户程序 106
4.4.5 创建应用程序 107
4.4.6 运行应用程序 108
4.5 深入IDL桩和框架 109
4.5.1 IDL桩和框架的类层次 109
4.5.2 IDL桩与客户端对象引用 110
4.5.3 IDL框架的代码 113
4.5.4 用于纽带机制的IDL框架 115
4.6 分布式对象的可互操作性 116
4.6.1 可互操作性 116
4.6.2 ORB域和桥接 116
4.6.3 GIOP、IIOP与ESIOP 117
4.6.4 更高的可互操作性 118
4.7 CORBA规范与CORBA产品 118
4.7.1 CORBA规范 118
4.7.2 CORBA产品概述 119
4.7.3 商品化ORB产品 120
4.7.4 免费与开源ORB产品 121
4.7.5 产品与规范的一致性 122
4.8 内容小结 123
4.8.1 CORBA带来了什么 123
4.8.2 未解决的问题 124
思考与练习 124
进一步阅读 125
第5章 编写对象接口 126
5.1 对象接口与对象实现 126
5.1.1 接口与实现分离 126
5.1.2 接口定义语言 126
5.2 OMG IDL的语法与语义 127
5.2.1 词法规则 127
5.2.2 模块的声明 128
5.2.3 类型的声明 128
5.2.4 常量的声明 132
5.2.5 异常的声明 133
5.2.6 接口的声明 133
5.2.7 值类型的声明 136
5.3 使用值类型 140
5.3.1 IDL定义 140
5.3.2 编译IDL文件 141
5.3.3 实现IDL接口 142
5.3.4 实现值类型 143
5.3.5 服务程序与客户程序 145
5.4 使用接口库 147
5.4.1 接口库的定义 147
5.4.2 接口库的结构 148
5.4.3 接口库管理工具 149
5.4.4 编写接口库客户程序 150
5.5 设计对象接口的准则 154
5.5.1 编写对象接口 154
5.5.2 典型的对象接口 154
思考与练习 155
进一步阅读 156
第6章 服务端程序设计 158
6.1 可移植对象适配器 158
6.1.1 CORBA对象与伺服对象 158
6.1.2 CORBA对象的基本语义 159
6.1.3 对象适配器 160
6.1.4 可移植对象适配器 160
6.1.5 POA及其组件的IDL定义 162
6.2 设计POA策略 166
6.2.1 POA策略 166
6.2.2 选择POA策略 166
6.2.3 组合使用POA策略 168
6.2.4 请求的处理过程 169
6.3 使用POA 169
6.3.1 获取根POA的对象引用 170
6.3.2 创建自定义策略的POA 170
6.3.3 使用POA管理器 171
6.3.4 激活与冻结对象 173
6.3.5 使用默认伺服对象 175
6.4 伺服对象管理器 177
6.4.1 伺服对象激活器 177
6.4.2 伺服对象定位器 181
6.5 适配器激活器 183
6.5.1 按需激活POA 183
6.5.2 使用适配器激活器的例程 184
6.6 纽带机制 187
6.6.1 纽带机制的工作原理 187
6.6.2 使用纽带机制的例程 188
6.7 POA vs BOA 191
6.7.1 基本对象适配器 191
6.7.2 POA对BOA的改进 191
思考与练习 192
进一步阅读 192
第7章 客户端程序设计 194
7.1 请求的基本概念 194
7.1.1 请求是一个对象 194
7.1.2 ORB伪对象 195
7.1.3 创建请求对象 196
7.1.4 Any类型 198
7.1.5 实际参数与返回结果 200
7.1.6 服务端的请求对象 201
7.2 选择调用类型 202
7.2.1 静态调用接口 202
7.2.2 动态调用接口 202
7.2.3 选择合适的调用类型 203
7.3 选择通信方式 204
7.3.1 同步通信 204
7.3.2 延迟同步通信 204
7.3.3 单向通信 204
7.3.4 使用不同的通信方式 204
7.4 使用动态调用接口 205
7.4.1 基于DII的IDL桩 205
7.4.2 使用DII的开发步骤 207
7.4.3 完整的例程 208
7.5 使用动态框架接口 211
7.5.1 动态框架接口 211
7.5.2 基于DSI的IDL框架 211
7.5.3 使用DSI编写对象实现 213
7.6 请求的上下文 217
7.6.1 上下文对象的概念 217
7.6.2 Context伪对象 218
7.6.3 使用附带上下文的请求 219
7.7 消息传递的服务质量 220
7.7.1 消息传递的QoS策略 220
7.7.2 为消息传递指定QoS策略 224
7.7.3 一个完整的例程 225
思考与练习 226
进一步阅读 227
第8章 部署CORBA应用程序 229
8.1 部署阶段的总体决策 229
8.1.1 选择运行平台 229
8.1.2 决定包装形式 229
8.1.3 考虑系统容错性 229
8.1.4 开放系统vs封闭系统 230
8.1.5 安装过程启示 230
8.2 部署服务端程序 231
8.2.1 创建和发布对象引用 231
8.2.2 部署对象实现 231
8.2.3 部署持久服务程序 231
8.3 部署客户端程序 231
8.3.1 获取对象引用 232
8.3.2 部署接口定义 232
8.3.3 部署IDL客户桩 232
8.4 部署VisiBroker应用程序 232
8.4.1 安装运行环境 233
8.4.2 安装支持服务 233
8.4.3 定制运行环境 234
8.4.4 启动应用程序 234
8.4.5 使用管理工具 234
8.5 设置VisiBroker属性 235
8.5.1 VisiBroker属性 235
8.5.2 设置VisiBroker属性 236
8.6 配置智能代理 237
8.6.1 部署智能代理 237
8.6.2 使用ORB域 238
8.6.3 提高对象容错性 240
8.7 使用实现库 240
8.7.1 实现库服务 240
8.7.2 实现库管理工具 241
8.7.3 编写实现库客户程序 243
8.7.4 按需激活对象 246
思考与练习 246
进一步阅读 247
第三部分 分布式对象高级课题 249
第9章 对象查找与对象通信 249
9.1 对象查找 249
9.1.1 查找对象的基本机制 249
9.1.2 CORBA命名服务 250
9.1.3 命名服务的类结构 255
9.1.4 CORBA交易对象服务 256
9.1.5 选择合适的对象查找机制 260
9.2 对象通信 260
9.2.1 分布式对象的通信 260
9.2.2 CORBA事件服务 261
9.2.3 CORBA通知服务 274
9.2.4 CORBA消息服务 275
思考与练习 276
进一步阅读 277
第10章 事务处理及其他对象服务 278
10.1 对象事务处理 278
10.1.1 事务 278
10.1.2 基于DBMS的事务处理 278
10.1.3 分布式事务处理 279
10.1.4 CORBA对象事务服务 282
10.1.5 OTS应用编程模型 288
10.1.6 OTS与TP监控程序 291
10.2 并发控制 291
10.2.1 CORBA并发控制服务 291
10.2.2 不同的锁模式 292
10.2.3 并发控制服务提供的接口 293
10.3 对象安全性 294
10.3.1 信息系统的安全性 294
10.3.2 CORBA安全服务 294
10.3.3 安全策略及其实施 295
10.3.4 安全服务的体系结构 296
10.4 对象持久性 297
10.4.1 CORBA持久对象服务 297
10.4.2 CORBA持久状态服务 299
10.4.3 CORBA外表化服务 299
10.5 对象集管理 300
10.5.1 CORBA关系服务 300
10.5.2 CORBA生存期服务 301
10.5.3 CORBA对象类集服务 301
10.5.4 CORBA查询服务 302
10.6 其他服务 302
10.6.1 CORBA属性服务 302
10.6.2 CORBA时间服务 303
10.6.3 CORBA特许服务 303
思考与练习 303
进一步阅读 304
第11章 分布式应用程序性能与可伸缩性 306
11.1 基本概念 306
11.1.1 分布式应用程序的性能和可伸缩性 306
11.1.2 POA与可伸缩性 307
11.2 优化IDL接口的设计模式 307
11.2.1 优化分布式应用程序性能的设计原则 307
11.2.2 一个忽略性能的IDL接口设计例子 308
11.2.3 值对象设计模式 310
11.2.4 迭代器设计模式 311
11.3 资源池 313
11.3.1 资源池的概念 313
11.3.2 资源池的体系结构 313
11.3.3 资源池的QoS策略 314
11.4 多线程 316
11.4.1 多线程体系结构 316
11.4.2 服务程序的多线程模型 317
11.4.3 VisiBroker的线程管理 318
11.5 连接管理 319
11.5.1 连接与可伸缩性 319
11.5.2 可伸缩的连接管理 320
11.5.3 VisiBroker的连接管理 321
11.6 内存管理 322
11.6.1 杜绝内存泄漏 322
11.6.2 伺服对象实例池 325
11.7 负载均衡 328
11.7.1 实现负载均衡的体系结构 328
11.7.2 基于网络的负载均衡 329
11.7.3 基于操作系统的负载均衡 329
11.7.4 基于中间件的负载均衡 330
11.7.5 基于应用程序的负载均衡 330
思考与练习 331
进一步阅读 332
第四部分 分布式组件模型与Web应用开发 334
第12章 EJB组件模型 334
12.1 EJB的基本概念 334
12.1.1 EJB组件的分类 336
12.1.2 EJB组件与EJB容器 337
12.1.3 EJB 3.0改进之处 338
12.2 EJB容器提供的设施与服务 341
12.2.1 通信基础设施 341
12.2.2 生存期管理 342
12.2.3 命名服务 344
12.2.4 并发控制服务 345
12.2.5 持久性服务 345
12.2.6 事务服务 346
12.2.7 安全服务 347
12.3 应用WebLogic开发与部署EJB 2.3组件 349
12.3.1 开发与部署EJB 2.3实体组件 349
12.3.2 开发与部署会话组件 366
12.3.3 开发与部署消息驱动组件 377
思考与练习 383
进一步阅读 384
第13章 J2EE规范、Web应用框架与CCM 385
13.1 J2EE规范 385
13.1.1 J2EE概述 385
13.1.2 JavaEE 5与JavaEE 6 385
13.1.3 J2EE平台的执行模型 386
13.1.4 MVC设计模式 387
13.1.5 基于角色的开发过程 388
13.1.6 J2EE应用服务器 389
13.2 J2EE Web层组件 391
13.2.1 客户端组件Applet 392
13.2.2 服务端组件Servlet 392
13.2.3 服务端组件JSP 394
13.3 Web应用框架 398
13.3.1 Web应用分层架构 398
13.3.2 Web应用开发框架 398
13.3.3 主流Web应用框架比较 399
13.4 基于JBoss开发与部署EJB 3.0组件 401
13.4.1 EJB 3.0实体组件 401
13.4.2 EJB 3.0无状态会话组件 403
13.4.3 EJB 3.0有状态会话组件 404
13.4.4 JSP页面调用EJB组件及部署 404
13.5 CORBA组件模型CCM 406
13.5.1 CCM组件特性 406
13.5.2 CCM组件设计与开发过程 408
思考与练习 410
进一步阅读 411
第五部分 面向服务的体系结构及展望 412
第14章 Web服务与SOA基础 412
14.1 Web服务的基本概念 412
14.1.1 Web的发展过程 412
14.1.2 Web服务架构与定义 413
14.1.3 Web服务的技术特点 414
14.2 Web服务的实现原理 416
14.2.1 XML 416
14.2.2 简单对象访问协议 418
14.2.3 Web服务描述语言 420
14.2.4 UDDI 421
14.3 Web服务开发实例 422
14.3.1 Web服务与客户程序设计 422
14.3.2 Web服务部署与测试 424
14.4 SOA的基本概念 425
14.4.1 SOA的定义与功能描述 425
14.4.2 SOA分层体系结构 427
14.4.3 SOA与面向对象、Web服务技术 428
14.4.4 SOA的主要支持厂商与产品 431
思考与练习 433
进一步阅读 433
第15章 SOA实现与SOA治理基础 435
15.1 SOA编程基本范型 435
15.1.1 SOA编程范型 435
15.1.2 业务流程执行语言 436
15.1.3 服务组件架构 442
15.1.4 服务数据对象 443
15.2 SOA的基本架构与实施方法 444
15.2.1 服务调用方式与企业服务总线 444
15.2.2 面向服务的分析与设计 446
15.2.3 SOA生命周期 448
15.2.4 SOA实施切入点与步骤 449
15.3 SOA实现:以JBoss产品为例 450
15.3.1 JBoss产品线介绍 450
15.3.2 SOA配置与开发示例 450
15.4 SOA治理基础 454
15.4.1 提出SOA治理的背景 454
15.4.2 SOA治理生命周期与SOA生命周期 455
15.4.3 SOA治理参考模型 456
思考与练习 457
进一步阅读 457
第16章 分布式计算展望 459
16.1 网格计算与网络服务 459
16.1.1 网格计算 459
16.1.2 高性能网格计算 459
16.1.3 网格服务 460
16.1.4 与网格计算相关的研究计划 461
16.2 其他发展方向 462
16.2.1 对等计算 462
16.2.2 移动代理 463
16.2.3 云计算 464
思考与练习 464
进一步阅读 465
附录 466
附录A OMG IDL语法规则 466
附录B OMG主要规范一览 469
附录C 中英文术语对照表 472
参考文献 478