一、目录介绍
第一部分 引言
第1章 概述
1.1 Java EE 7平台新增特性3
1.2 Java EE应用模型3
1.3 分布式多层应用4
1.3.1 安全4
1.3.2 Java EE组件5
1.3.3 Java EE客户端6
1.3.4 Web组件7
1.3.5 业务组件8
1.3.6 企业信息系统层8
1.4 Java EE容器9
1.4.1 容器服务9
1.4.2 容器类型10
1.5 Web服务支持11
1.5.1 XML11
1.5.2 SOAP传输协议12
1.5.3 WSDL标准格式12
1.6 Java EE应用装配与部署12
1.7 开发角色13
1.7.1 Java EE产品提供商13
1.7.2 工具提供商13
1.7.3 应用组件提供商13
1.7.4 应用装配人员14
1.7.5 应用部署人员和管理员14
1.8 Java EE 7 API14
1.8.1 EJB技术16
1.8.2 Java servlet技术17
1.8.3 JSF技术18
1.8.4 JSP技术18
1.8.5 JSP标准标记库19
1.8.6 Java持久化API19
1.8.7 Java事务API19
1.8.8 RESTful Web服务Java API19
1.8.9 托管bean20
1.8.10 Java EE 的上下文和依赖注入20
1.8.11 Java的依赖注入20
1.8.12 bean验证20
1.8.13 Java消息服务API20
1.8.14 Java EE连接器架构21
1.8.15 JavaMail API21
1.8.16 Java容器授权契约21
1.8.17 Java容器认证服务提供者接口21
1.8.18 WebSocket Java API22
1.8.19 JSON处理Java API22
1.8.20 Java EE的并发工具22
1.8.21 Java平台的批处理应用22
1.9 Java平台标准版7的Java EE 7 API23
1.9.1 Java数据库互连API23
1.9.2 Java命名和目录接口API23
1.9.3 JavaBeans激活框架24
1.9.4 XML处理Java API24
1.9.5 Java XML绑定架构24
1.9.6 XML Web服务Java—API24
1.9.7 带附件SOAP Java API25
1.9.8 Java认证和授权服务25
1.9.9 Java平台的公共注解25
1.10 GlassFish服务器工具25
第2章 使用教程示例
2.1 必要软件27
2.1.1 Java EE 7软件开发包28
2.1.2 Java平台标准版28
2.1.3 Java EE 7教程组件28
2.1.4 NetBeans IDE29
2.1.5 Apache Maven30
2.2 启动和停止GlassFish服务器30
2.2.1 使用NetBeans IDE启动GlassFish服务器30
2.2.2 使用NetBeans IDE停止GlassFish服务器30
2.2.3 使用命令行启动GlassFish服务器30
2.2.4 使用命令行停止GlassFish服务器31
2.3 启动管理控制台31
2.3.1 使用NetBeans IDE启动管理控制台31
2.4 启动和停止Java DB服务器32
2.4.1 使用NetBeans IDE启动数据库服务器32
2.5 构建示例32
2.6 教程示例目录结构32
2.7 教程中的Java EE 7 Maven原型33
2.7.1 安装教程Maven原型33
2.8 获取教程最新更新34
2.8.1 使用NetBeans IDE更新教程34
2.8.2 使用命令行更新教程34
2.9 调试Java EE应用34
2.9.1 使用服务器日志34
2.9.2 使用调试器35
第二部分 企业bean
第3章 企业bean
3.1 什么是企业bean38
3.1.1 企业bean的好处39
3.1.2 何时使用企业bean39
3.1.3 企业bean类型39
3.2 什么是会话bean39
3.2.1 会话bean类型40
3.2.2 何时使用会话bean41
3.3 什么是消息驱动bean41
3.3.1 消息驱动bean与会话bean的区别41
3.3.2 何时使用消息驱动bean42
3.4 访问企业bean42
3.4.1 在客户端使用企业bean43
3.4.2 确定远程或本地访问44
3.4.3 本地客户端45
3.4.4 远程客户端46
3.4.5 Web服务客户端47
3.4.6 方法参数和访问47
3.5 企业bean的内容48
3.6 企业bean的命名约定48
3.7 企业bean的生命周期48
3.7.1 有状态会话bean的生命周期48
3.7.2 无状态会话bean的生命周期49
3.7.3 单例会话bean的生命周期50
3.7.4 消息驱动bean的生命周期50
3.8 有关企业bean的更多信息51
第4章 企业bean入门
4.1 创建企业bean52
4.1.1 编写企业bean类53
4.1.2 创建converter Web客户端53
4.1.3 运行converter示例54
4.2 修改Java EE应用55
4.2.1 修改类文件55
第5章 运行企业bean示例
5.1 cart示例56
5.1.1 业务接口57
5.1.2 会话bean类57
5.1.3 @Remove方法61
5.1.4 辅助类61
5.1.5 运行cart示例61
5.2 一个单例会话bean示例:counter62
5.2.1 创建一个单例会话bean63
5.2.2 counter示例的架构67
5.2.3 运行counter示例69
5.3 一个Web服务示例:helloservice69
5.3.1 Web服务端点实现类69
5.3.2 无状态会话bean实现类70
5.3.3 运行helloservice示例71
5.4 使用定时器服务72
5.4.1 创建基于日历的定时器表达式72
5.4.2 编程定时器74
5.4.3 自动定时器76
5.4.4 取消和保存定时器76
5.4.5 获得定时器信息77
5.4.6 事务和定时器77
5.4.7 timersession示例77
5.4.8 运行timersession示例80
5.5 处理异常81
第6章 使用嵌入式企业bean容器
6.1 嵌入式企业bean容器概述82
6.2 开发嵌入式企业bean应用82
6.2.1 运行嵌入式应用83
6.2.2 创建企业bean容器83
6.2.3 查找会话bean引用84
6.2.4 关闭企业bean容器85
6.3 standalone示例应用85
6.3.1 使用NetBeans IDE运行standalone示例应用86
6.3.2 使用Maven运行standalone示例应用87
第7章 在会话bean中使用异步方法调用88
7.1 异步方法调用88
7.1.1 创建异步业务方法88
7.1.2 从企业bean客户端调用异步方法89
7.2 async示例应用90
7.2.1 async—war模块的架构91
7.2.2 运行async示例92
第三部分 持久化
第8章 Java持久化API介绍
8.1 实体96
8.1.1 实体类的需求97
8.1.2 实体类中的持久化字段和属性97
8.1.3 实体的主键101
8.1.4 实体关系中的多重性103
8.1.5 实体关系中的方向103
8.1.6 实体中的可嵌入类105
8.2 实体继承106
8.2.1 抽象实体106
8.2.2 映射超类106
8.2.3 非实体超类107
8.2.4 实体继承映射策略107
8.3 管理实体109
8.3.1 EntityManager接口109
8.3.2 持久化单元113
8.4 查询实体114
8.5 数据库模式创建114
8.5.1 配置应用以创建或删除数据库表115
8.5.2 使用SQL脚本加载数据116
8.6 有关持久化的更多信息116
第9章 运行持久化示例
9.1 order应用118
9.1.1 order应用中的实体关系119
9.1.2 order应用中的主键121
9.1.3 实体映射到多个数据库表125
9.1.4 order应用中的层叠操作125
9.1.5 order应用中的BLOB和CLOB数据库类型126
9.1.6 order应用中的时态类型126
9.1.7 管理order应用的实体127
9.1.8 运行order示例129
9.2 roster应用129
9.2.1 roster应用中的关系130
9.2.2 roster应用中的实体继承131
9.2.3 roster应用中的Criteria查询132
9.2.4 roster应用中的自动表生成134
9.2.5 运行roster示例135
9.3 address—book应用136
9.3.1 address—book中的bean验证约束136
9.3.2 在address—book中为约束指定错误消息137
9.3.3 验证JSF应用的联系信息输入138
9.3.4 运行address—book示例139
第10章 Java持久化查询语言
10.1 查询语言术语140
10.2 使用Java持久化查询语言创建查询141
10.2.1 查询中的命名参数142
10.2.2 查询中的位置参数142
10.3 简化的查询语言语法142
10.3.1 选择语句142
10.3.2 更新和删除语句143
10.4 示例查询143
10.4.1 简单查询143
10.4.2 导航到相关实体的查询144
10.4.3 包含其他条件表达式的查询146
10.4.4 批处理更新和删除147
10.5 完整的查询语言语法148
10.5.1 BNF符号148
10.5.2 Java持久化查询语言的BNF文法148
10.5.3 FROM子句152
10.5.4 路径表达式157
10.5.5 WHERE子句158
10.5.6 SELECT子句165
10.5.7 ORDER BY子句167
10.5.8 GROUP BY和HAVING子句167
第11章 使用Criteria API创建查询
11.1 Criteria和Metamodel API概述168
11.2 使用Metamodel API为实体类建模170
11.2.1 使用元模型类170
11.3 使用Criteria API和Metamodel API创建基本的类型安全查询171
11.3.1 创建Criteria查询171
11.3.2 查询根172
11.3.3 使用联接查询关系172
11.3.4 Criteria查询中的路径导航173
11.3.5 限制Criteria查询结果173
11.3.6 管理Criteria查询结果175
11.3.7 执行查询176
第12章 创建和使用基于字符串的Criteria查询
12.1 基于字符串的Criteria API查询概述178
12.2 创建基于字符串的查询178
12.3 执行基于字符串的查询179
第13章 使用锁定控制对实体数据的并发访问
13.1 实体锁定和并发概述180
13.1.1 使用乐观锁定181
13.2 锁模式181
13.2.1 设置锁模式182
13.2.2 使用悲观锁定183
第14章 用实体图创建获取计划
14.1 实体图基础185
14.1.1 默认实体图186
14.1.2 在持久化操作中使用实体图186
14.2 使用命名实体图187
14.2.1 对实体类应用命名实体图注解187
14.2.2 从命名实体图获得EntityGraph实例188
14.3 在查询操作中使用实体图189
第15章 对Java持久化API应用使用二级缓存
15.1 二级缓存概述190
15.1.1 控制实体是否可以缓存191
15.2 指定缓存模式设置来提高性能192
15.2.1 设置缓存获取和存储模式192
15.2.2 通过编程方式控制二级缓存194
第四部分 消息传送
第16章 Java消息服务概念
16.1 JMS API概述198
16.1.1 什么是消息传送198
16.1.2 什么是JMS API199
16.1.3 何时使用JMS API199
16.1.4 Java EE平台如何使用JMS API200
16.2 基本JMS API概念201
16.2.1 JMS API架构201
16.2.2 消息传送方式201
16.2.3 消息使用203
16.3 JMS API编程模型204
16.3.1 JMS受管理对象205
16.3.2 连接206
16.3.3 会话206
16.3.4 JMSContext对象207
16.3.5 JMS消息生产者208
16.3.6 JMS消息消费者208
16.3.7 JMS消息213
16.3.8 JMS队列浏览器215
16.3.9 JMS异常处理216
16.4 使用高级JMS特性216
16.4.1 控制消息确认217
16.4.2 为发送消息指定选项218
16.4.3 创建临时目的地220
16.4.4 使用JMS本地事务221
16.4.5 异步发送消息223
16.5 在Java EE应用中使用JMS API223
16.5.1 为Java EE应用创建资源223
16.5.2 在企业bean或Web组件中使用资源注入225
16.5.3 使用Java EE组件生成和同步接收消息226
16.5.4 使用消息驱动bean异步接收消息227
16.5.5 管理JTA事务229
16.6 关于JMS的更多信息231
第17章 Java消息服务示例
17.1 JMS示例概述233
17.2 编写简单的JMS应用233
17.2.1 启动JMS提供者234
17.2.2 创建JMS受管理对象234
17.2.3 构建所有简单示例235
17.2.4 发送消息235
17.2.5 同步接收消息238
17.2.6 使用消息监听器完成异步消息传送240
17.2.7 浏览队列中的消息242
17.2.8 在同一个目的地运行多个消费者245
17.2.9 确认消息245
17.3 编写更高级的JMS应用247
17.3.1 使用持久订阅247
17.3.2 使用本地事务249
17.4 编写高性能和可扩展的JMS应用254
17.4.1 使用共享非持久订阅254
17.4.2 使用共享持久订阅256
17.5 使用一个简单Web应用发送和接收消息257
17.5.1 websimplemessage Facelets页面257
17.5.2 websimplemessage托管bean258
17.5.3 运行websimplemessage示例259
17.6 使用消息驱动bean异步接收消息261
17.6.1 simplemessage示例概述261
17.6.2 simplemessage应用客户端261
17.6.3 simplemessage消息驱动bean类262
17.6.4 运行simplemessage示例263
17.7 从会话bean向MDB发送消息264
17.7.1 为clientsessionmdb示例编写应用组件265
17.7.2 运行clientsessionmdb示例267
17.8 使用实体联接两个MDB的消息268
17.8.1 clientmdbentity示例应用概述269
17.8.2 为clientmdbentity示例编写应用组件270
17.8.3 运行clientmdbentity示例272
17.9 使用NetBeans IDE创建JMS资源274
17.9.1 使用NetBeans IDE创建JMS资源274
17.9.2 使用NetBeans IDE删除JMS资源275
第五部分 安全
第18章 Java EE平台安全介绍
18.1 Java EE安全概述278
18.1.1 简单的应用安全演示279
18.1.2 安全机制特性281
18.1.3 应用安全特点281
18.2 安全机制282
18.2.1 Java SE安全机制282
18.2.2 Java EE安全机制283
18.3 保护容器安全285
18.3.1 使用注解指定安全信息285
18.3.2 使用部署描述文件提供声明式安全285
18.3.3 使用编程式安全286
18.4 保护GlassFish服务器安全286
18.5 使用安全域、用户、组和角色286
18.5.1 什么是安全域、用户、组和角色287
18.5.2 在GlassFish服务器中管理用户和组289
18.5.3 建立安全角色290
18.5.4 角色映射到用户和组291
18.6 使用SSL建立安全连接292
18.6.1 验证和配置SSL支持293
18.7 有关安全的更多信息293
第19章 Web应用安全入门
19.1 Web应用安全概述295
19.2 保护Web应用安全296
19.2.1 指定安全约束297
19.2.2 指定认证机制300
19.2.3 在部署描述文件中指定认证机制302
19.2.4 声明安全角色303
19.3 Web应用使用编程式安全304
19.3.1 通过编程方式认证用户304
19.3.2 通过编程方式检查调用者身份306
19.3.3 编程式安全的示例代码306
19.3.4 声明和链接角色引用308
19.4 示例:保护Web应用安全309
19.4.1 设置系统来运行安全示例309
19.4.2 hello2—basicauth示例:对servlet使用基本认证310
19.4.3 hello1—formauth示例:对JSF应用使用基于表单的认证312
第20章 企业应用安全入门
20.1 企业应用的基本安全任务316
20.2 保护企业bean安全316
20.2.1 使用声明式安全保护企业bean安全318
20.2.2 通过编程方式保护企业bean安全321
20.2.3 传播安全身份(Run—As)323
20.2.4 部署安全企业bean324
20.3 示例:保护企业bean安全324
20.3.1 cart—secure示例:使用声明式安全保护企业bean安全324
20.3.2 converter—secure示例:使用编程式安全保护企业bean安全328
第21章 Java EE安全:高级主题
21.1 使用数字证书331
21.1.1 创建服务器证书332
21.1.2 向证书安全域增加用户334
21.1.3 为GlassFish服务器使用一个不同的服务器证书334
21.2 认证机制335
21.2.1 客户端认证335
21.2.2 相互认证335
21.3 使用JDBC安全域完成用户认证338
21.3.1 配置JDBC认证安全域339
21.4 保护HTTP资源安全340
21.5 保护应用客户端安全343
21.5.1 使用登录模块343
21.5.2 使用编程式登录344
21.6 保护企业信息系统应用安全344
21.6.1 容器托管登录344
21.6.2 组件托管登录345
21.6.3 配置资源适配器安全345
21.6.4 将应用主体映射到EIS主体346
21.7 使用部署描述文件配置安全347
21.7.1 在部署描述文件中指定基本认证安全347
21.7.2 在部署描述文件中指定非默认主体—角色映射348
21.8 关于高级安全主题的更多信息348
第六部分J ava EE支持技术
第22章 事务
22.1 Java EE应用中的事务352
22.2 什么是事务353
22.3 容器托管事务353
22.3.1 事务属性354
22.3.2 回滚容器托管事务357
22.3.3 同步会话bean的实例变量357
22.3.4 容器托管事务中不允许的方法358
22.4 bean托管事务358
22.4.1 JTA事务358
22.4.2 不提交返回359
22.4.3 bean托管事务中不允许的方法359
22.5 事务超时359
22.5.1 设置事务超时359
22.6 更新多个数据库360
22.7 Web组件中的事务361
22.8 关于事务的更多信息361
第23章 资源适配器和契约
23.1 什么是资源适配器362
23.1.1 管理契约363
23.1.2 通用工作上下文契约364
23.1.3 出站和入站契约364
23.2 元数据注解365
23.3 公共客户端接口366
23.4 对Java EE上下文和依赖注入(CDI)使用资源适配器367
23.5 关于资源适配器的更多信息368
第24章 资源适配器示例
24.1 trading示例369
24.1.1 使用出站资源适配器370
24.1.2 实现出站资源适配器372
24.1.3 运行trading示例373
24.2 traffic示例374
24.2.1 使用入站资源适配器375
24.2.2 实现入站资源适配器376
24.2.3 运行traffic示例378
第25章 使用Java EE拦截器
25.1 拦截器概述380
25.1.1 拦截器类381
25.1.2 拦截器生命周期381
25.1.3 拦截器和CDI381
25.2 使用拦截器381
25.2.1 拦截方法调用382
25.2.2 拦截生命周期回调事件384
25.2.3 拦截超时事件385
25.2.4 为组件绑定拦截器386
25.2.5 拦截器排序387
25.3 interceptor示例应用388
25.3.1 运行interceptor示例389
第26章 批处理3
26.1 批处理介绍391
26.1.1 批处理作业中的步骤391
26.1.2 并行处理392
26.1.3 状态和判定元素392
26.1.4 批处理框架功能393
26.2 Java EE中的批处理394
26.2.1 批处理框架394
26.2.2 创建批处理应用394
26.2.3 批处理作业的元素395
26.2.4 属性和参数395
26.2.5 作业实例和作业执行395
26.2.6 批处理和退出状态395
26.3 简单用例396
26.3.1 块步骤397
26.3.2 任务步骤399
26.4 使用作业规范语言399
26.4.1 job元素400
26.4.2 step元素401
26.4.3 flow元素406
26.4.4 split元素406
26.4.5 decision元素406
26.5 创建批处理工件407
26.5.1 批处理工件接口407
26.5.2 批处理工件中的依赖注入409
26.5.3 从批处理运行时环境使用上下文对象410
26.6 向批处理运行时环境提交作业411
26.6.1 开始作业411
26.6.2 检查作业的状态411
26.6.3 在应用中调用批处理运行时环境412
26.7 打包批处理应用412
26.8 webserverlog示例应用412
26.8.1 webserverlog示例应用架构412
26.8.2 运行webserverlog示例应用418
26.9 phonebilling示例应用419
26.9.1 phonebilling示例应用架构419
26.9.2 运行phonebilling示例应用425
26.10 关于批处理的更多信息426
第27章 Java EE的并发工具
27.1 并发基础427
27.1.1 线程和进程428
27.2 并发工具的主要组件428
27.3 并发和事务429
27.4 并发和安全430
27.5 jobs并发示例430
27.5.1 运行jobs示例430
27.6 taskcreator并发示例433
27.6.1 运行taskcreator示例435
27.7 关于并发工具的更多信息436
第七部分 案例研究
第28章 Duke书店案例研究示例
28.1 Duke书店的设计和架构438
28.2 Duke书店接口439
28.2.1 Book Java持久化API实体439
28.2.2 Duke书店中使用的企业bean440
28.2.3 Duke书店中使用的Facelets页面和托管bean440
28.2.4 Duke书店中使用的定制组件和其他定制对象441
28.2.5 Duke书店中使用的属性文件442
28.2.6 Duke书店中使用的部署描述文件443
28.3 运行Duke书店案例研究应用443
28.3.1 使用NetBeans IDE构建和部署Duke书店443
28.3.2 使用Maven构建和部署Duke书店443
28.3.3 运行Duke书店应用444
第29章 Duke辅导案例研究示例
29.1 Duke辅导应用的设计和架构445
29.2 主界面447
29.2.1 主界面中使用的Java持久化API实体447
29.2.2 主界面中使用的企业bean448
29.2.3 主界面中使用的WebSocket端点448
29.2.4 主界面中使用的Facelets文件448
29.2.5 主界面中使用的辅助类449
29.2.6 属性文件449
29.2.7 Duke辅导应用中使用的部署描述文件450
29.3 管理界面450
29.3.1 管理界面中使用的企业bean450
29.3.2 管理界面中使用的Facelets文件451
29.3.3 管理界面中使用的CDI托管bean451
29.3.4 管理界面中使用的辅助类451
29.4 运行Duke辅导案例研究应用452
29.4.1 运行Duke辅导应用452
第30章 Duke综合案例研究示例
30.1 Duke综合应用的设计和架构456
30.1.1 events工程458
30.1.2 entities工程459
30.1.3 dukes—payment工程461
30.1.4 dukes—resources工程461
30.1.5 Duke商店工程461
30.1.6 Duke货运工程465
30.2 构建和部署Duke综合案例研究应用467
30.2.1 使用NetBeans IDE构建和部署Duke综合应用467
30.2.2 使用Maven构建和部署Duke综合应用467
30.3 运行Duke综合应用467
30.3.1 注册为Duke商店顾客468
30.3.2 购买产品468
30.3.3 批准产品发货468
30.3.4 创建新产品469