第1章 EJB 3架构简介 1
1.1 EJB简介 1
1.1.1 EJB是什么 2
1.1.2 EJB组件模型 2
1.1.3 EJB框架 2
1.1.4 EJB核心特性 2
1.1.5 EJB规范的发展 3
1.1.6 EJB 3简化开发模型 4
1.1.7 分布式计算模型 6
1.1.8 EJB角色 6
1.2 本书结构 6
1.3 准备 8
1.3.1 安装GlassFish应用程序服务器的先决条件 8
1.3.2 安装GlassFish应用程序服务器 9
1.3.3 环境变量设置 10
1.3.4 密码文件的创建 12
1.3.5 启动和测试GlassFish安装 12
1.4 小结 15
第2章 EJB 3会话bean 16
2.1 简介 16
2.2 会话bean简介 16
2.2.1 会话bean类型 16
2.2.2 何时使用会话bean 16
2.3 无状态会话bean 18
2.3.1 bean类 18
2.3.2 业务接口 19
2.3.3 业务方法 21
2.3.4 依赖注入 22
2.3.5 回调方法 22
2.3.6 拦截器 23
2.4 有状态会话bean 25
2.4.1 bean类 25
2.4.2 业务接口 26
2.4.3 业务方法 27
2.4.4 回调方法 28
2.4.5 拦截器 29
2.4.6 异常处理 29
2.5 会话bean的客户视图 29
2.6 会话bean的打包、部署和测试 32
2.6.1 先决条件 32
2.6.2 编译会话bean 32
2.6.3 打包会话bean 33
2.6.4 部署会话bean 34
2.6.5 编译客户程序 34
2.6.6 运行客户程序 35
2.7 小结 36
第3章 实体和JPA 37
3.1 实体示例 38
3.1.1 简单JavaBean Customer.java 38
3.1.2 简单实体Customer.java 38
3.1.3 显示了默认设置的实体Customer.java 39
3.1.4 代码要求 41
3.1.5 示例:注解实例变量 42
3.1.6 示例:注解属性访问方法 43
3.1.7 声明主键 44
3.1.8 简单主键 44
3.1.9 复合主键 45
3.1.10 实体示例小结 47
3.2 持久化档案 47
3.3 EntityManager 48
3.3.1 持久化上下文 48
3.3.2 获得EntityManager实例 49
3.3.3 事务支持 50
3.4 实体生存周期 50
3.5 O/R映射 52
3.5.1 再谈@Table注解 52
3.5.2 再谈@Column注解 53
3.5.3 复杂映射 54
3.6 实体关系 54
3.6.1 @OneToOne 54
3.6.2 @OneToMany和@ManyToOne 55
3.6.3 @ManyToMany 55
3.6.4 延迟和预先字段绑定 56
3.6.5 层叠操作 56
3.7 JPQL 57
3.7.1 @NamedQuery和@NamedQueries 57
3.7.2 绑定查询参数 58
3.7.3 动态查询 59
3.7.4 批更新和删除操作 59
3.7.5 复杂查询 60
3.8 向前生成与反向工程 60
3.8.1 向前生成产生持久性 60
3.8.2 反向工程产生适应性 60
3.8.3 哪种方式适用于你的工程 60
3.9 示例应用程序CustomerOrderManager 60
3.9.1 Customer.java 60
3.9.2 CustomerOrder.java 62
3.9.3 Address.java 65
3.9.4 CustomerOrderManager.java 67
3.9.5 CustomerOrderClient.java 68
3.9.6 persistence.xml 69
3.10 小结 70
第4章 高级持久化特性 71
4.1 映射实体继承层次结构 71
4.1.1 准备 72
4.1.2 实体继承映射策略 72
4.1.3 每个类单一表的继承层次结构(InheritanceType.SINGLE_TABLE) 74
4.1.4 带有连接子类表的通用基表(InheritanceType.JOINED) 82
4.1.5 每个最外层一个表的具体实体类(InheritanceType.TABLE_PER_CLASS) 85
4.1.6 O/R实现方式的比较 87
4.2 在继承层次结构中使用抽象实体、映射的超类和非实体类 88
4.2.1 抽象实体类 88
4.2.2 映射的超类(@MappedSuper-class) 89
4.2.3 非实体类 90
4.2.4 使用嵌入非实体类(@Embeddable和@Embedded) 90
4.3 多态关系 92
4.4 多态JPQL查询 93
4.5 使用原生SQL查询 93
4.6 复合主键和嵌套外键 94
4.6.1 使用嵌套复合键(@EmbeddedId) 95
4.6.2 在实体类上直接暴露复合键类字段(@IdClass) 96
4.6.3 使用复合键的映射关系 97
4.7 乐观锁定的支持(@Version) 98
4.8 自动生成的主键值的支持 99
4.9 拦截器:实体回调方法 100
4.10 小结 101
第5章 EJB 3消息驱动bean 103
5.1 简介 103
5.2 面向消息的架构 103
5.2.1 JMS是什么 103
5.2.2 消息应用程序架构 104
5.3 使用MDB 105
5.3.1 何时使用MDB 105
5.3.2 MDB类 106
5.3.3 配置属性 108
5.3.4 MDB中的依赖注入 111
5.3.5 回调方法 112
5.3.6 拦截器 113
5.3.7 异常处理 113
5.3.8 客户视图 114
5.4 MDB的打包、部署和测试 117
5.4.1 先决条件 117
5.4.2 编译会话bean和MDB 117
5.4.3 打包会话bean和MDB 118
5.4.4 创建JMS和JavaMail资源 118
5.4.5 部署会话bean和MDB 120
5.4.6 编译客户程序 121
5.4.7 运行客户程序 121
5.5 小结 122
第6章 EJB 3和Web服务 123
6.1 简介 123
6.2 Web服务是什么 123
6.2.1 UDDI 123
6.2.2 WSDL 124
6.2.3 SOAP 127
6.2.4 何时使用Web服务 128
6.3 Java EE和Web服务 128
6.3.1 JAX-WS 129
6.3.2 JAXB 129
6.3.3 JAXR 129
6.3.4 SAAJ 129
6.3.5 JSR 181 129
6.4 EJB 3无状态会话bean作为Web服务 129
6.5 Web服务的打包、部署和测试 132
6.5.1 先决条件 133
6.5.2 编译会话bean 133
6.5.3 打包会话bean 133
6.5.4 部署会话bean 134
6.5.5 使用GlassFish控制台测试信用卡服务 135
6.6 Web服务客户视图 137
6.6.1 开发访问Web服务的Java客户程序 137
6.6.2 会话bean作为Web服务客户程序 140
6.7 小结 141
第7章 集成会话bean、实体、消息驱动bean和Web服务 142
7.1 简介 142
7.2 应用程序概述 142
7.3 应用程序组件和服务 142
7.3.1 购物车组件 142
7.3.2 搜索外观组件 143
7.3.3 顾客外观组件 143
7.3.4 订单处理外观组件 143
7.3.5 持久化服务 143
7.3.6 电子邮件服务 143
7.3.7 信用卡服务 143
7.3.8 订单处理服务 144
7.4 酒类在线应用程序业务处理 144
7.5 深入讲解组件/服务 145
7.5.1 持久化服务 145
7.5.2 顾客外观组件 145
7.5.3 搜索外观组件 148
7.5.4 购物车组件 149
7.5.5 订单处理外观组件 154
7.5.6 订单处理服务 161
7.5.7 电子邮件服务 166
7.5.8 信用卡服务 168
7.5.9 数据库schema 168
7.6 打包、部署和测试应用程序 168
7.6.1 先决条件 169
7.6.2 部署信用卡服务 169
7.6.3 编译持久化单元 170
7.6.4 打包持久化单元 171
7.6.5 编译业务服务(会话bean和MDB) 171
7.6.6 打包业务服务 172
7.6.7 汇编应用程序 173
7.6.8 创建数据库schema 173
7.6.9 创建数据源、JMS资源和Mail资源 173
7.6.10 部署应用程序 177
7.7 应用程序的简单测试客户程序 177
7.8 小结 180
第8章 EJB 3中的事务支持 181
8.1 事务是什么 181
8.1.1 分布式事务 182
8.1.2 事务的ACID属性 182
8.1.3 JTA 182
8.1.4 两阶段提交协议 183
8.2 EJB中的事务支持 183
8.3 服务模型中的会话bean事务行为 184
8.3.1 容器管理的事务分界 184
8.3.2 bean管理的事务分界 186
8.4 持久化模型中的实体事务行为 187
8.4.1 实体如何与事务上下文相关联 187
8.4.2 容器管理与应用程序管理的持久化上下文 187
8.4.3 事务范围的持久化上下文与扩展的持久化上下文 188
8.4.4 JTA与资源本地的Entity-Manager 188
8.5 酒类在线应用程序的事务场景 188
8.5.1 设置示例 188
8.5.2 使用CMT分界的无状态会话bean 189
8.5.3 使用BMT分界的有状态会话bean和扩展的持久化上下文 197
8.6 小结 204
第9章 EJB 3性能和测试 205
9.1 测试方法论 206
9.1.1 性能标准 206
9.1.2 模拟应用程序使用 208
9.1.3 定义测试尺度 208
9.2 Grinder 209
9.3 测试应用程序 211
9.4 性能测试 212
9.4.1 测试环境 214
9.4.2 测试脚本 215
9.4.3 设置 215
9.4.4 初步测试 219
9.4.5 样本大小 220
9.4.6 校准 221
9.4.7 实际测试运行 221
9.4.8 分析结果 222
9.5 小结 225
第10 章 把EJB 2.x应用程序迁移到EJB 3 226
10.1 准备 227
10.2 会话bean迁移 227
10.2.1 EJB 2.1会话bean 227
10.2.2 EJB 2.1的ejb-jar.xml文件 228
10.2.3 EJB 3会话bean类 229
10.2.4 迁移EJB 2.1会话bean类 229
10.2.5 迁移EJB 2.1会话bean接口 230
10.2.6 迁移EJB 2.1会话bean的ejb-jar.xml属性 231
10.2.7 迁移EJB 2.1的Web服务端点接口 232
10.2.8 会话bean迁移包装 232
10.3 MDB迁移 232
10.4 实体bean迁移 233
10.5 EJB客户程序迁移 235
10.6 完整的应用程序迁移示例 235
10.6.1 EJB 2.1应用程序源文件 235
10.6.2 EJB 3应用程序源文件 246
10.7 把我们的应用程序迁移在Java EE容器之外运行 251
10.7.1 EJB 3会话bean类运行在EJB容器之外 251
10.7.2 容器外部持久化单元的EJB 3的persistence.xml文件 253
10.7.3 EJB 3应用程序管理的EntityManager客户程序 253
10.8 小结 254
第11章 EJB 3部署 255
11.1 部署工具简介 255
11.2 部署过程概述 256
11.2.1 提供者 256
11.2.2 装配者 256
11.2.3 部署者 258
11.3 Java EE部署基础结构 259
11.3.1 Java EE服务器 259
11.3.2 Java EE容器 259
11.4 Java EE部署组件 260
11.4.1 Java EE应用程序 260
11.4.2 Java EE模块类型 260
11.4.3 库组件 262
11.5 应用服务器和平台无关性 264
11.5.1 部署工具 264
11.5.2 部署计划 265
11.6 部署角色 265
11.6.1 应用程序装配者 265
11.6.2 应用程序部署者 267
11.7 汇编EJB JAR模块 268
11.8 汇编持久化单元 268
11.9 小结 269
第12章 EJB 3客户应用程序 270
12.1 应用程序架构 270
12.2 JSF 274
12.2.1 Java EE Web技术的发展 274
12.2.2 JSF架构 275
12.2.3 JSF工具和组件 277
12.3 使用JSF和EJB开发Web应用程序 277
12.3.1 登录页面 279
12.3.2 新用户注册页面 282
12.3.3 链接页面 288
12.3.4 搜索页面 291
12.3.5 酒类清单页面 297
12.3.6 显示选定的酒类详细信息页面 300
12.3.7 显示购物车项目页面 304
12.3.8 通知页面 307
12.4 打包、部署和测试应用程序 308
12.4.1 先决条件 308
12.4.2 编译和打包JSF应用程序 308
12.4.3 汇编酒类商店应用程序 309
12.4.4 部署酒类商店应用程序 309
12.4.5 运行酒类商店应用程序 310
12.5 应用程序客户容器 314
12.6 小结 314
附录 315
· · · · · · (
收起)