译者序 2
前言 2
致谢 2
第一部分 适应性流程 2
第1章 J2EE适应性基础 2
1.1 快速开发的需要 2
目录 2
1.2 企业挑战 3
1.4.2 为什么是适应性 4
1.5 确定快速开发的基础 4
1.3 J2EE平台 4
1.4.1 为什么需要基础 4
1.4 定义适应性基础 4
1.5.1 人员 5
1.5.2 工具 5
1.5.3 框架 5
1.5.4 实践 5
1.5.7 培训 6
1.5.6 流程和过程 6
1.5.5 标准 6
1.5.8 持续的改进 7
1.6 基础投资的优点 7
1.7 关键的成功因素 8
1.7.1 获得开发人员的认可 8
1.7.2 教育 9
1.7.3 管理层支持 9
1.8 小结 10
2.1.1 时间盒式开发 11
2.1 RAD的常见元素 11
第2章 快速应用程序开发 11
2.1.2 与领域相关的语言 12
2.1.3 软件重用 12
2.1.4 高效率工具 13
2.1.5 快速建立原型 14
2.2 使用原型 14
2.2.1 建立原型的方法和原型类型 15
2.2.2 抛弃式和进化式原型的选择 16
2.3 小结 16
3.1 为什么要使用方法学 18
第3章 应用适应性方法 18
3.2 瀑布生命周期模型 19
3.2.1 经典的瀑布模型 19
3.2.2 优点和缺陷 20
3.2.3 示例研究 21
3.3 迭代式开发 22
3.3.1 迭代式方法的优点 23
3.3.2 迭代式流程 25
3.4 RUP的介绍 25
3.4.1 用例驱动的流程 26
3.4.2 在RUP中使用迭代式开发 28
3.4.3 RUP流程的阶段 28
3.4.4 原则 29
3.4.5 RUP的元素 30
3.4.6 计划 31
3.4.7 企业项目的支持 31
3.4.8 RUP的缺点 32
3.5 敏捷方法 32
3.6 XP的介绍 33
3.6.1 XP实践 33
3.6.2 计划 34
3.6.3 设计 35
3.6.4 编码 36
3.6.5 测试 37
3.6.6 XP的角色 37
3.6.7 对J2EE项目采用XP 38
3.7 小结 39
第二部分 敏捷架构 42
第4章 快速开发的设计 42
4.1 架构和设计目标 42
4.2.1 发挥团队力量 43
4.2 RAD架构和设计 43
4.2.2 使用最佳特性的框架 44
4.2.3 预先思考 45
4.2.4 注意重用设计 47
4.2.5 应用正交设计 47
4.2.6 采用分层架构 48
4.3 走近J2EE架构 49
4.3.1 两层架构和多层架构 49
4.3.2 企业JavaBean 50
4.3.4 分布式组件 51
4.3.3 远程和本地客户端视图 51
4.3.6 以Web为核心的架构 53
4.3.5 选择合适的设计 53
4.3.7 以EJB为核心的架构 55
4.4 小结 56
第5章 软件建模 58
5.1 为什么要使用模型 58
5.1.1 交流 59
5.1.2 验证 59
5.2 架构的多视图 60
5.3.1 用例图 61
5.3 统一建模语言 61
5.3.2 活动图 62
5.3.3 类图 63
5.3.4 交互图 64
5.3.5 状态图 66
5.3.6 部署图和组件图 67
5.4 常见缺陷 67
5.5 建模工具 68
5.5.2 UML支持 69
5.5.1 选择建模工具 69
5.5.4 正向工程和反向工程 70
5.5.3 模型验证 70
5.5.5 设计模式支持 71
5.6 为什么建模工具会失败 73
5.7 成功使用建模工具 75
5.8 小结 76
第6章 代码生成 77
6.1 什么是代码生成 77
6.2.1 使用Apache Velocity生成代码 78
6.2 被动代码生成器 78
6.2.2 被动代码生成的优点 81
6.3 主动代码生成器 82
6.3.1 主动代码生成的优点 82
6.3.2 主动代码生成器和样板代码 83
6.4 面向属性编程 83
6.4.1 属性是什么 84
6.4.2 属性和预处理器指令 84
6.4.3 J2SE 5.0的注释与属性 84
6.5 XDoclet的介绍 85
6.5.2 设置Ant构建文件 86
6.5.1 安装XDoclet 86
6.5.3 创建会话bean 89
6.6 使用主动生成的代码 94
6.7 小结 96
第7章 快速开发和数据库 97
7.1 数据库的困境 97
7.1.1 企业数据的价值 97
7.1.2 对象-关系阻抗不匹配 99
7.2.1 Java数据库连接 101
7.2 数据访问选项 101
7.2.2 对象/关系映射工具 102
7.2.3 实体bean 103
7.2.4 Java数据对象 104
7.3 代码生成和O/R映射 104
7.3.1 Hibernate的介绍 105
7.3.2 Middlegen的介绍 105
7.4 设置数据库 106
7.4.1 MySQL的介绍 106
7.4.2 创建数据库模式 107
7.4.3 运行数据库脚本 109
7.5 生成持久层 109
7.5.1 使用Ant运行Middlegen 110
7.5.2 Middlegen的GUI 111
7.5.3 Hibernate O/R映射文档 112
7.5.4 从映射文档到Java文件 115
7.5.5 完成往复过程 117
7.6 小结 118
8.1 MDA工具的承诺 120
第8章 模型驱动的架构 120
8.2 MDA的介绍 121
8.2.1 平台 121
8.2.2 模型 121
8.2.3 映射 122
8.3 MDA与传统建模的比较 123
8.3.1 优点 123
8.3.2 缺陷 125
8.4 MDA兼容工具 126
8.5 AndroMDA的介绍 126
8.5.2 PIM标记 128
8.5.1 使用XMI与模型交互 128
8.5.3 MDA Cartridge 130
8.5.4 Cartridge的剖析 131
8.5.5 Cartridge模板 133
8.5.6 应用AndroMDA 135
8.5.7 AndroMDA 3.0 136
8.6 小结 136
第9章 脚本 138
9.1 为什么用脚本语言 138
第三部分 快速语言 138
9.2 脚本语言的特性 139
9.2.1 团队经验 139
9.2.2 跨平台 139
9.2.3 与Java类的集成 140
9.3 Jython介绍 140
9.3.1 安装Jython 141
9.3.2 运行脚本 141
9.3.3 Jython语言 142
9.3.4 与Java集成 144
9.3.6 创建Jython servlet 146
9.3.5 构建用户界面原型 146
9.4 Groovy 149
9.5 小结 149
第10章 使用规则 151
10.1 业务规则 151
10.1.1 业务规则是什么 151
10.1.2 业务规则的结构 151
10.2.2 规则定义语言 152
10.2.1 硬编码的规则 152
10.2 软件的业务规则 152
10.1.3 业务规则的动态特性 152
10.2.3 系统和业务逻辑的紧耦合 153
10.2.4 规则重复 153
10.3 规则引擎 153
10.3.1 基于规则的系统 154
10.3.2 企业系统的规则引擎 154
10.4 Jess的介绍 155
10.4.1 安装Jess 155
10.4.2 Jess示例 155
10.4.3 Jess和Java 158
10.5 Java规则引擎API 161
10.6 企业级别的规则引擎 162
10.6.1 企业规则引擎特性 162
10.6.2 规则引擎评估条件 163
10.7 小结 164
第11章 面向方面编程 166
11.1 为什么使用AOP 166
11.1.1 正交关注点 166
11.1.3 解决正交关注点的传统方法 167
11.1.2 代码混乱和分散 167
11.2 AOP的介绍 169
11.2.1 概念和术语 169
11.2.2 单驼峰和龙 170
11.2.3 编织方法 170
11.3 AspectJ的介绍 171
11.3.1 AspectJ和Eclipse 171
11.3.2 AspectJ编译器 171
11.3.3 AspectJ示例 171
11.4 语言和框架 176
11.5 AspectWerkz的介绍 177
11.5.1 XML的方面定义 178
11.5.2 作为元数据注释的方面 179
11.5.3 AspectWerkz编织选项 180
11.5.4 面向方面的中间件 180
11.6 应用“方面” 181
11.6.1 开发“方面” 181
11.6.2 产品化“方面” 182
11.6.3 AOP和其他模式 182
11.7 小结 183
12.1 时间和动作 186
12.1.1 软件生产线 186
第四部分 动态环境 186
第12章 最优构建 186
12.1.2 软件开发的时间和动作 187
12.2 构建流程 187
12.2.1 设计构建流程 187
12.2.2 J2EE构建需求 188
12.2.3 热部署是什么 189
12.3 Ant的介绍 190
12.4.1 构建依赖的重要性 191
12.4 使用Ant实现最小构建 191
12.4.2 定义Ant中的构建依赖关系 193
12.5 使用子项目 195
12.6 查看构建依赖关系 196
12.7 标准的构建目标 198
12.8 项目的组织 199
12.8.1 源代码目录 199
12.8.4 发布目录 201
12.8.3 构建目录 201
12.8.2 类库目录 201
12.9 与IDE的集成 202
12.10 使用Jython扩展Ant 203
12.10.1 创建新的Ant任务 203
12.10.2 编译Jython类 204
12.10.3 测试新任务 205
12.11 小结 205
第13章 集成式开发环境 207
13.1 为什么使用IDE 207
13.2.1 Eclipse是什么 209
13.2 Eclipse的介绍 209
13.2.2 安装和运行Eclipse 210
13.2.3 Eclipse工作区 211
13.2.4 Eclipse工作台模式 211
13.2.5 使用插件工具扩展工作台 212
13.3 企业级开发所需的IDE特性 213
13.3.1 代码向导 214
13.3.2 编辑器对多文件类型的支持 215
13.3.3 Ant集成 216
13.3.4 使用代码生成器 217
13.3.5 服务器控制和应用程序部署 219
13.3.6 建模支持 220
13.3.7 数据库访问 221
13.4 使用Eclipse调试J2EE应用程序 221
13.4.1 Java平台调试器架构 221
13.4.2 调试J2EE应用程序 224
13.4.3 热交换 225
13.4.4 JSP调试 226
13.4.5 调试指南 226
13.5 小结 227
14.1 测试作为开发模式 229
第14章 测试驱动的开发 229
14.1.1 测试驱动开发的优点 230
14.1.2 测试驱动开发的代价 230
14.2 JUnit的介绍 231
14.3 生成单元测试 235
14.3.1 使用Eclipse生成单元测试 235
14.3.2 单元测试和MDA 237
14.3.3 使用AndroMDA生成测试用例 238
14.4 彻底测试 239
14.4.2 使用模拟对象 240
14.4.1 模拟对象是什么 240
14.4.3 模拟对象类型 241
14.4.4 动态模拟对象 241
14.4.5 静态模拟对象和动态模拟对象的选择 244
14.5 小结 245
第15章 高效的质量保证 246
15.1 质量保证 246
15.1.1 项目环境 247
15.1.2 测试流程 247
15.2 自动化测试 248
15.1.3 RAD项目测试 248
15.2.1 J2EE测试的挑战 249
15.2.2 自动化测试工具 250
15.3 功能测试 251
15.4 HttpUnit的介绍 251
15.4.1 HttpUnit和JUnit 252
15.4.2 使用HttpUnit编写测试 252
15.5 负载测试和压力测试 255
15.6 JMeter的介绍 256
15.6.1 使用JMeter测试MedRec 256
15.6.3 配置元素 258
15.6.2 创建一个线程组 258
15.6.4 逻辑控制器 259
15.6.5 采样器 260
15.6.6 侦听器 262
15.6.7 执行测试计划 263
15.6.8 分析结果 263
15.7 JMeter使用指南 265
15.8 小结 265
附录 267
附录A 缩略词 267
附录B 参考用书 270