译者序
前言
第一部分引言
第1章概述2
1.1Java EE 7平台新增特性3
1.2Java EE应用模型3
1.3分布式多层应用4
1.3.1安全4
1.3.2Java EE组件5
1.3.3Java EE客户端6
1.3.4Web组件7
1.3.5业务组件8
1.3.6企业信息系统层8
1.4Java EE容器9
1.4.1容器服务9
1.4.2容器类型10
1.5Web服务支持11
1.5.1XML11
1.5.2SOAP传输协议12
1.5.3WSDL标准格式12
1.6Java EE应用装配与部署12
1.7开发角色13
1.7.1Java EE产品提供商13
1.7.2工具提供商13
1.7.3应用组件提供商13
1.7.4应用装配人员14
1.7.5应用部署人员和管理员14
1.8Java EE 7 API14
1.8.1EJB技术16
1.8.2Java servlet技术17
1.8.3JSF技术18
1.8.4JSP技术18
1.8.5JSP标准标记库19
1.8.6Java持久化API19
1.8.7Java事务API19
1.8.8RESTful Web服务Java API19
1.8.9托管bean20
1.8.10Java EE 的上下文和依赖注入20
1.8.11Java的依赖注入20
1.8.12bean验证20
1.8.13Java消息服务API20
1.8.14Java EE连接器架构21
1.8.15JavaMail API21
1.8.16Java容器授权契约21
1.8.17Java容器认证服务提供者接口21
1.8.18WebSocket Java API22
1.8.19JSON处理Java API22
1.8.20Java EE的并发工具22
1.8.21Java平台的批处理应用22
1.9Java平台标准版7的Java EE 7 API23
1.9.1Java数据库互连API23
1.9.2Java命名和目录接口API23
1.9.3JavaBeans激活框架24
1.9.4XML处理Java API24
1.9.5Java XML绑定架构24
1.9.6XML Web服务Java—API24
1.9.7带附件SOAP Java API25
1.9.8Java认证和授权服务25
1.9.9Java平台的公共注解25
1.10GlassFish服务器工具25
第2章使用教程示例27
2.1必要软件27
2.1.1Java EE 7软件开发包28
2.1.2Java平台标准版28
2.1.3Java EE 7教程组件28
2.1.4NetBeans IDE29
2.1.5Apache 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章企业bean38
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.5Web服务客户端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入门52
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示例56
5.1cart示例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.2counter示例的架构67
5.2.3运行counter示例69
5.3一个Web服务示例:helloservice69
5.3.1Web服务端点实现类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.7timersession示例77
5.4.8运行timersession示例80
5.5处理异常81
第6章使用嵌入式企业bean容器82
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.3standalone示例应用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.2async示例应用90
7.2.1async—war模块的架构91
7.2.2运行async示例92
第三部分持久化
第8章Java持久化API介绍96
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.1EntityManager接口109
8.3.2持久化单元113
8.4查询实体114
8.5数据库模式创建114
8.5.1配置应用以创建或删除数据库表115
8.5.2使用SQL脚本加载数据116
8.6有关持久化的更多信息116
第9章运行持久化示例118
9.1order应用118
9.1.1order应用中的实体关系119
9.1.2order应用中的主键121
9.1.3实体映射到多个数据库表125
9.1.4order应用中的层叠操作125
9.1.5order应用中的BLOB和CLOB数据库类型126
9.1.6order应用中的时态类型126
9.1.7管理order应用的实体127
9.1.8运行order示例129
9.2roster应用129
9.2.1roster应用中的关系130
9.2.2roster应用中的实体继承131
9.2.3roster应用中的Criteria查询132
9.2.4roster应用中的自动表生成134
9.2.5运行roster示例135
9.3address—book应用136
9.3.1address—book中的bean验证约束136
9.3.2在address—book中为约束指定错误消息137
9.3.3验证JSF应用的联系信息输入138
9.3.4运行address—book示例139
第10章Java持久化查询语言140
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.1BNF符号148
10.5.2Java持久化查询语言的BNF文法148
10.5.3FROM子句152
10.5.4路径表达式157
10.5.5WHERE子句158
10.5.6SELECT子句165
10.5.7ORDER BY子句167
10.5.8GROUP BY和HAVING子句167
第11章使用Criteria API创建查询168
11.1Criteria和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.4Criteria查询中的路径导航173
11.3.5限制Criteria查询结果173
11.3.6管理Criteria查询结果175
11.3.7执行查询176
第12章创建和使用基于字符串的Criteria查询178
12.1基于字符串的Criteria API查询概述178
12.2创建基于字符串的查询178
12.3执行基于字符串的查询179
第13章使用锁定控制对实体数据的并发访问180
13.1实体锁定和并发概述180
13.1.1使用乐观锁定181
13.2锁模式181
13.2.1设置锁模式182
13.2.2使用悲观锁定183
第14章用实体图创建获取计划185
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应用使用二级缓存190
15.1二级缓存概述190
15.1.1控制实体是否可以缓存191
15.2指定缓存模式设置来提高性能192
15.2.1设置缓存获取和存储模式192
15.2.2通过编程方式控制二级缓存194
第四部分消息传送
第16章Java消息服务概念198
16.1JMS API概述198
16.1.1什么是消息传送198
16.1.2什么是JMS API199
16.1.3何时使用JMS API199
16.1.4Java EE平台如何使用JMS API200
16.2基本JMS API概念201
16.2.1JMS API架构201
16.2.2消息传送方式201
16.2.3消息使用203
16.3JMS API编程模型204
16.3.1JMS受管理对象205
16.3.2连接206
16.3.3会话206
16.3.4JMSContext对象207
16.3.5JMS消息生产者208
16.3.6JMS消息消费者208
16.3.7JMS消息213
16.3.8JMS队列浏览器215
16.3.9JMS异常处理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消息服务示例232
17.1JMS示例概述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.1websimplemessage Facelets页面257
17.5.2websimplemessage托管bean258
17.5.3运行websimplemessage示例259
17.6使用消息驱动bean异步接收消息261
17.6.1simplemessage示例概述261
17.6.2simplemessage应用客户端261
17.6.3simplemessage消息驱动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.1clientmdbentity示例应用概述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平台安全介绍278
18.1Java EE安全概述278
18.1.1简单的应用安全演示279
18.1.2安全机制特性281
18.1.3应用安全特点281
18.2安全机制282
18.2.1Java SE安全机制282
18.2.2Java 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应用安全入门295
19.1Web应用安全概述295
19.2保护Web应用安全296
19.2.1指定安全约束297
19.2.2指定认证机制300
19.2.3在部署描述文件中指定认证机制302
19.2.4声明安全角色303
19.3Web应用使用编程式安全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.2hello2—basicauth示例:对servlet使用基本认证310
19.4.3hello1—formauth示例:对JSF应用使用基于表单的认证312
第20章企业应用安全入门316
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.1cart—secure示例:使用声明式安全保护企业bean安全324
20.3.2converter—secure示例:使用编程式安全保护企业bean安全328
第21章Java EE安全:高级主题331
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
第六部分Java EE支持技术
第22章事务352
22.1Java 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.4bean托管事务358
22.4.1JTA事务358
22.4.2不提交返回359
22.4.3bean托管事务中不允许的方法359
22.5事务超时359
22.5.1设置事务超时359
22.6更新多个数据库360
22.7Web组件中的事务361
22.8关于事务的更多信息361
第23章资源适配器和契约362
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章资源适配器示例369
24.1trading示例369
24.1.1使用出站资源适配器370
24.1.2实现出站资源适配器372
24.1.3运行trading示例373
24.2traffic示例374
24.2.1使用入站资源适配器375
24.2.2实现入站资源适配器376
24.2.3运行traffic示例378
第25章使用Java EE拦截器380
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.3interceptor示例应用388
25.3.1运行interceptor示例389
第26章批处理390
26.1批处理介绍391
26.1.1批处理作业中的步骤391
26.1.2并行处理392
26.1.3状态和判定元素392
26.1.4批处理框架功能393
26.2Java 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.1job元素400
26.4.2step元素401
26.4.3flow元素406
26.4.4split元素406
26.4.5decision元素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.8webserverlog示例应用412
26.8.1webserverlog示例应用架构412
26.8.2运行webserverlog示例应用418
26.9phonebilling示例应用419
26.9.1phonebilling示例应用架构419
26.9.2运行phonebilling示例应用425
26.10关于批处理的更多信息426
第27章Java EE的并发工具427
27.1并发基础427
27.1.1线程和进程428
27.2并发工具的主要组件428
27.3并发和事务429
27.4并发和安全430
27.5jobs并发示例430
27.5.1运行jobs示例430
27.6taskcreator并发示例433
27.6.1运行taskcreator示例435
27.7关于并发工具的更多信息436
第七部分案例研究
第28章Duke书店案例研究示例438
28.1Duke书店的设计和架构438
28.2Duke书店接口439
28.2.1Book Java持久化API实体439
28.2.2Duke书店中使用的企业bean440
28.2.3Duke书店中使用的Facelets页面和托管bean440
28.2.4Duke书店中使用的定制组件和其他定制对象441
28.2.5Duke书店中使用的属性文件442
28.2.6Duke书店中使用的部署描述文件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辅导案例研究示例445
29.1Duke辅导应用的设计和架构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.7Duke辅导应用中使用的部署描述文件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综合案例研究示例455
30.1Duke综合应用的设计和架构456
30.1.1events工程458
30.1.2entities工程459
30.1.3dukes—payment工程461
30.1.4dukes—resources工程461
30.1.5Duke商店工程461
30.1.6Duke货运工程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