第1章 概述 1
1.1 关于本书 1
1.1.1 本书目标 1
1.1.2 本书面向的读者 1
1.1.3 本书特征 2
1.2 必要阅读 2
1.3 本书结构 2
1.4 本书使用原则和模式的方式 4
1.5 符号和图形 4
第2章 案例分析示例 5
2.1 案例分析示例的使用 5
2.1.1 风格特点 5
2.1.2 案例与抽象内容的关系 5
2.1.3 代码示例 5
2.2 案例分析背景:NovoBank 6
2.2.1 技术基础设施 6
2.2.2 自动化解决方案 6
2.2.3 业务阻碍和目标 7
2.2.4 未来IT路线图 7
2.3 案例分析背景:SmartCredit公司 8
2.3.1 技术基础设施 8
2.3.2 自动化解决方案 8
2.3.3 业务目标 9
2.3.4 未来的IT路线图 9
第一部分 基础 13
第3章 SOA基本概念 13
3.1 基本术语和概念 13
3.1.1 面向服务计算 13
3.1.2 面向服务 15
3.1.3 面向服务架构 15
3.1.4 SOA宣言 17
3.1.5 服务 18
3.1.6 云计算 18
3.1.7 IT资源 19
3.1.8 服务模型 19
3.1.9 服务库存 20
3.1.10 服务组合 20
3.1.11 服务候选 21
3.1.12 服务契约 21
3.1.13 服务相关的粒度 21
3.1.14 服务概要 22
3.1.15 SOA设计模式 22
3.2 延伸阅读 24
第4章 基本的Java分布式技术 26
4.1 Java分布式计算的基础知识 26
4.1.1 Java SE的架构 27
4.1.2 Java EE的架构 27
4.1.3 应用程序的打包和部署 28
4.1.4 Java EE架构的各层 29
4.2 Java分布式技术和API 30
4.2.1 Java SE API 30
4.2.2 Java EE API 32
4.3 XML标准和Java API 38
4.3.1 XML 39
4.3.2 XML模式定义 40
4.3.3 XSLT 41
4.3.4 JAXP 41
4.3.5 JAXB 42
4.4 使用Java组件构建服务 42
4.4.1 组件作为服务 42
4.4.2 应用程序协议 42
4.4.3 服务契约 44
4.4.4 组件作为服务和面向服务 46
4.5 Java供应商平台 47
4.5.1 GlassFish企业服务器 47
4.5.2 IBM WebSphere Application Server 48
4.5.3 IBM WebSphere Application Server Community Edition 50
4.5.4 Oracle WebLogic Server 50
第5章 基于Web的服务技术 52
5.1 基于SOAP的Web服务 52
5.1.1 Web服务标准的扩展(WS-*) 56
5.1.2 常用Web服务中间件 61
5.2 REST服务 64
5.2.1 HTTP响应代码 65
5.2.2 资源和地址 66
5.2.3 HTTP方法 68
5.2.4 资源表示 69
5.2.5 accept头部 70
第6章 使用Java构建基于Web的服务 71
6.1 JAX-WS 71
6.1.1 SAAJ 73
6.1.2 处理程序 76
6.1.3 Web服务引擎和工具包 76
6.1.4 JAXR 77
6.2 WS-*标准的Java实现 78
6.2.1 高级Web服务标准和框架 78
6.2.2 服务组件架构 79
6.2.3 Spring-WS 79
6.3 JAX-RS 80
6.3.1 实现JAX-RS 80
6.3.2 实现REST服务 83
6.3.3 可扩展性 84
6.3.4 安全性 86
6.3.5 REST服务支持 87
第二部分 服务 91
第7章 Java基于Web服务中的面向服务原则 91
7.1 服务可重用性 91
7.1.1 无关功能性上下文 91
7.1.2 高度泛型的服务逻辑 92
7.1.3 泛型可扩展服务契约 94
7.1.4 并发访问服务逻辑 95
7.2 标准服务契约 99
7.2.1 自顶向下和自底向上 99
7.2.2 在Java和WSDL之间映射 100
7.2.3 包装文档/字面值契约 100
7.2.4 隐式和显式头部 101
7.2.5 REST中的数据映射 105
7.2.6 使用行业标准 117
7.3 服务松散耦合 118
7.3.1 分离契约和实现 118
7.3.2 独立功能性上下文 119
7.3.3 服务消费者耦合 120
7.4 服务抽象 123
7.4.1 抽象技术细节 123
7.4.2 隐藏服务细节 123
7.4.3 文档约束 126
7.5 服务可组合性 126
7.5.1 运行时环境的效率 127
7.5.2 服务契约的灵活性 128
7.5.3 基于标准的运行时 128
7.6 服务自治 129
7.6.1 定义明确的功能边界 129
7.6.2 控制运行时环境 129
7.6.3 高并发性 130
7.7 服务无状态性 131
7.7.1 编制基础设施 131
7.7.2 会话状态 132
7.7.3 存储状态 132
7.8 服务可发现性 136
7.8.1 设计时的可发现性 136
7.8.2 运行时的可发现性 137
7.8.3 服务注册中心 138
第8章 使用Java构建实用服务 140
8.1 Java实用服务的原理 140
8.1.1 架构考虑 140
8.1.2 实用服务分类 145
8.2 实用服务的设计和实现 146
8.2.1 实用服务的设计 146
8.2.2 实用服务和Java版本 149
8.2.3 实用服务和开源框架 150
8.2.4 将实用服务作为基于Web的服务 152
8.2.5 测试考虑 157
8.2.6 打包考虑 157
8.3 实用服务的类型 158
8.3.1 公共实用服务 158
8.3.2 资源实体服务 163
8.3.3 微实用服务 167
8.3.4 包装器实用服务 169
第9章 使用Java构建实体服务 173
9.1 Java实体服务的内部原理 174
9.1.1 架构考虑 174
9.1.2 域实体与消息实体 175
9.1.3 数据聚合 176
9.1.4 数据访问模式 177
9.1.5 修改通知 178
9.2 Java实体服务的设计和实现 179
9.2.1 实体服务设计 179
9.2.2 实体服务实现 184
9.2.3 将实体服务作为基于Web的服务 187
9.2.4 使用SOAP的实体Web服务 187
9.2.5 REST实体服务 193
9.2.6 测试考虑 201
9.2.7 Java打包考虑 201
第三部分 服务组合与基础设施 205
第10章 使用Java构建任务服务 205
10.1 任务服务的内部原理 205
10.2 构建任务服务 211
10.2.1 实现考虑 212
10.2.2 基于Web的任务服务 213
10.2.3 测试考虑 223
10.2.4 打包考虑 224
第11章 使用Java进行服务组合 225
11.1 服务组合的内部原理 225
11.1.1 服务组合角色 225
11.1.2 组合与MEP 226
11.1.3 同步和异步调用 226
11.1.4 服务水平协议 227
11.2 Java服务组合的设计和实现 228
11.2.1 组合逻辑:编码和编制 228
11.2.2 REST服务组合考虑 229
11.2.3 组合成员端点 230
11.2.4 错误处理 231
11.2.5 模式类型重用 238
11.2.6 基于Web的服务与Java组件 242
11.2.7 打包、测试和部署被组合服务 244
11.3 服务和服务组合性能指导原则 248
11.3.1 测量性能 248
11.3.2 测试性能 249
11.3.3 缓存 249
11.3.4 使用状态扩展服务 252
11.3.5 处理失败 252
11.3.6 解析和编组 253
第12章 使用ESB作为SOA基础设施 255
12.1 基本的传统消息框架 255
12.2 基本的服务消息框架 261
12.2.1 不使用ESB时的基本服务消息处理 261
12.2.2 使用ESB时的基本服务消息处理 263
12.3 与SOA相关的常用ESB特性 267
12.3.1 服务查找和调用 267
12.3.2 服务处理 269
12.3.3 服务组合支持 270
12.3.4 REST API管理支持 270
第四部分 附录 273
附录A 案例分析结论 273
附录B 面向服务原则参考 275
附录C SOA设计模式参考 280
附录D 带注释的SOA宣言 312