编辑推荐

  OracleJavaEE7文档团队成员精准解说JavaEE7平台,为深入理解JavaEE7企业应用开发提供翔实指导;
  更简洁明确的概念介绍,更具体完整的应用示例,全面解读JavaEE7平台特性,手把手教你运行和测试示例,帮助你真正掌握JavaEE技术,成为JavaEE企业应用开发的高手。

内容简介

  伴随着JavaEE的发展脚步,从2001年《TheJ2EETutorial》第1版问世,到《Java EE 7权威指南:卷2(原书第5版)》与大家见面,已走过了十余年的演进历程,其间多次改版,一直热销不衰。
  《JavaEE7专业指南·卷2(原书第5版)》分为七部分,共30章。第一部分(第1~2章)介绍JavaEE企业应用开发的相关概念和技术,以及安装、构建和支持《Java EE 7权威指南:卷2(原书第5版)》示例需要了解的所有知识;第二部分(第3~7章)研究企业JavaBeans组件,从EJB入门开始,介绍如何开发、部署和运行JavaEE应用示例,如何使用嵌入式企业bean容器在JavaSE环境中而不是JavaEE服务器中运行,如何在会话bean中实现异步业务方法,以及如何从企业bean客户端调用这些方法;第三部分(第8~15章)讲解Java持久化API,包括Java持久化API简介、如何使用Java持久化示例、Java持久化查询语言、使用CriteriaAPI创建查询、创建和使用基于字符串的Criteria查询、使用锁定控制对实体数据的并发访问、用实体图创建获取计划、对Java持久化API应用使用二级缓存等内容;第四部分(第16~17章)介绍消息传送,包括Java消息服务概念和示例;第五部分(第18~21章)讲解安全概念和示例,从介绍一些基本的安全概念和安全机制开始,解释如何为Web组件和JavaEE组件增加安全性,之后介绍一些JavaEE安全的高级主题;第六部分(第22~27章)研究JavaEE平台的多种支持技术,包括事务、资源适配器和契约、使用JavaEE拦截器、批处理和JavaEE的并发工具;第七部分(第28~30章)提供一些使用多种JavaEE技术的案例研究,包括Duke书店案例、Duke辅导案例和Duke综合案例研究示例。
  《JavaEE7专业指南·卷2(原书第5版)》是一个面向任务的实用指南,通过一系列实用示例介绍如何开发JavaEE7(Java平台企业版7)企业应用,由Oracle的JavaEE文档小组成员倾力撰写,能够帮助初学者和中级Java程序员深入了解这个平台。
  《Java EE 7权威指南:卷2(原书第5版)》包括平台特性的全面描述,并提供使用全新版本NetBeansIDE和GlassFish服务器开源版的有关说明。书中介绍了EJB组件、Java持久化API、Java消息服务(JMS)API、JavaEE安全、事务、资源适配器、JavaEE拦截器、Java平台批处理应用以及JavaEE并发工具。《Java EE 7权威指南:卷2(原书第5版)》最后提供了3个案例研究,展示了如何综合使用多个JavaEE7API。

作者简介

  埃里克·珍兆科(EricJendrock),领导着Oracle的JavaEETutorial团队,撰写了Java安全和并发工具有关的章节。

  里卡多·塞维拉-纳瓦罗(RicardoCervera-Navarro),撰写了Java平台批处理应用的有关章节,补充了资源适配器技术领域的有关内容和示例,并参与了案例研究部分的工作。

  伊恩·埃文斯(IanEvans),撰写了EJB、Java持久化API和Java事务API的有关章节。

  金姆·哈泽(KimHaase),撰写了Java消息服务(JMS)的有关章节,并参与了案例研究部分的工作。

  威廉·马基特(WilliamMarkito),曾是Oracle平台技术解决方案小组成员,创建了Duke综合案例研究以及多项其他技术的示例。

目录

译者序前言第一部分引言第1章概述21.1JavaEE7平台新增特性31.2JavaEE应用模型31.3分布式多层应用41.3.1安全41.3.2JavaEE组件51.3.3JavaEE客户端61.3.4Web组件71.3.5业务组件81.3.6企业信息系统层81.4JavaEE容器91.4.1容器服务91.4.2容器类型101.5Web服务支持111.5.1XML111.5.2SOAP传输协议121.5.3WSDL标准格式121.6JavaEE应用装配与部署121.7开发角色131.7.1JavaEE产品提供商131.7.2工具提供商131.7.3应用组件提供商131.7.4应用装配人员141.7.5应用部署人员和管理员141.8JavaEE7API141.8.1EJB技术161.8.2Javaservlet技术171.8.3JSF技术181.8.4JSP技术181.8.5JSP标准标记库191.8.6Java持久化API191.8.7Java事务API191.8.8RESTfulWeb服务JavaAPI191.8.9托管bean201.8.10JavaEE的上下文和依赖注入201.8.11Java的依赖注入201.8.12bean验证201.8.13Java消息服务API201.8.14JavaEE连接器架构211.8.15JavaMailAPI211.8.16Java容器授权契约211.8.17Java容器认证服务提供者接口211.8.18WebSocketJavaAPI221.8.19JSON处理JavaAPI221.8.20JavaEE的并发工具221.8.21Java平台的批处理应用221.9Java平台标准版7的JavaEE7API231.9.1Java数据库互连API231.9.2Java命名和目录接口API231.9.3JavaBeans激活框架241.9.4XML处理JavaAPI241.9.5JavaXML绑定架构241.9.6XMLWeb服务Java—API241.9.7带附件SOAPJavaAPI251.9.8Java认证和授权服务251.9.9Java平台的公共注解251.10GlassFish服务器工具25第2章使用教程示例272.1必要软件272.1.1JavaEE7软件开发包282.1.2Java平台标准版282.1.3JavaEE7教程组件282.1.4NetBeansIDE292.1.5ApacheMaven302.2启动和停止GlassFish服务器302.2.1使用NetBeansIDE启动GlassFish服务器302.2.2使用NetBeansIDE停止GlassFish服务器302.2.3使用命令行启动GlassFish服务器302.2.4使用命令行停止GlassFish服务器312.3启动管理控制台312.3.1使用NetBeansIDE启动管理控制台312.4启动和停止JavaDB服务器322.4.1使用NetBeansIDE启动数据库服务器322.5构建示例322.6教程示例目录结构322.7教程中的JavaEE7Maven原型332.7.1安装教程Maven原型332.8获取教程最新更新342.8.1使用NetBeansIDE更新教程342.8.2使用命令行更新教程342.9调试JavaEE应用342.9.1使用服务器日志342.9.2使用调试器35第二部分企业bean第3章企业bean383.1什么是企业bean383.1.1企业bean的好处393.1.2何时使用企业bean393.1.3企业bean类型393.2什么是会话bean393.2.1会话bean类型403.2.2何时使用会话bean413.3什么是消息驱动bean413.3.1消息驱动bean与会话bean的区别413.3.2何时使用消息驱动bean423.4访问企业bean423.4.1在客户端使用企业bean433.4.2确定远程或本地访问443.4.3本地客户端453.4.4远程客户端463.4.5Web服务客户端473.4.6方法参数和访问473.5企业bean的内容483.6企业bean的命名约定483.7企业bean的生命周期483.7.1有状态会话bean的生命周期483.7.2无状态会话bean的生命周期493.7.3单例会话bean的生命周期503.7.4消息驱动bean的生命周期503.8有关企业bean的更多信息51第4章企业bean入门524.1创建企业bean524.1.1编写企业bean类534.1.2创建converterWeb客户端534.1.3运行converter示例544.2修改JavaEE应用554.2.1修改类文件55第5章运行企业bean示例565.1cart示例565.1.1业务接口575.1.2会话bean类575.1.3@Remove方法615.1.4辅助类615.1.5运行cart示例615.2一个单例会话bean示例:counter625.2.1创建一个单例会话bean635.2.2counter示例的架构675.2.3运行counter示例695.3一个Web服务示例:helloservice695.3.1Web服务端点实现类695.3.2无状态会话bean实现类705.3.3运行helloservice示例715.4使用定时器服务725.4.1创建基于日历的定时器表达式725.4.2编程定时器745.4.3自动定时器765.4.4取消和保存定时器765.4.5获得定时器信息775.4.6事务和定时器775.4.7timersession示例775.4.8运行timersession示例805.5处理异常81第6章使用嵌入式企业bean容器826.1嵌入式企业bean容器概述826.2开发嵌入式企业bean应用826.2.1运行嵌入式应用836.2.2创建企业bean容器836.2.3查找会话bean引用846.2.4关闭企业bean容器856.3standalone示例应用856.3.1使用NetBeansIDE运行standalone示例应用866.3.2使用Maven运行standalone示例应用87第7章在会话bean中使用异步方法调用887.1异步方法调用887.1.1创建异步业务方法887.1.2从企业bean客户端调用异步方法897.2async示例应用907.2.1async—war模块的架构917.2.2运行async示例92第三部分持久化第8章Java持久化API介绍968.1实体968.1.1实体类的需求978.1.2实体类中的持久化字段和属性978.1.3实体的主键1018.1.4实体关系中的多重性1038.1.5实体关系中的方向1038.1.6实体中的可嵌入类1058.2实体继承1068.2.1抽象实体1068.2.2映射超类1068.2.3非实体超类1078.2.4实体继承映射策略1078.3管理实体1098.3.1EntityManager接口1098.3.2持久化单元1138.4查询实体1148.5数据库模式创建1148.5.1配置应用以创建或删除数据库表1158.5.2使用SQL脚本加载数据1168.6有关持久化的更多信息116第9章运行持久化示例1189.1order应用1189.1.1order应用中的实体关系1199.1.2order应用中的主键1219.1.3实体映射到多个数据库表1259.1.4order应用中的层叠操作1259.1.5order应用中的BLOB和CLOB数据库类型1269.1.6order应用中的时态类型1269.1.7管理order应用的实体1279.1.8运行order示例1299.2roster应用1299.2.1roster应用中的关系1309.2.2roster应用中的实体继承1319.2.3roster应用中的Criteria查询1329.2.4roster应用中的自动表生成1349.2.5运行roster示例1359.3address—book应用1369.3.1address—book中的bean验证约束1369.3.2在address—book中为约束指定错误消息1379.3.3验证JSF应用的联系信息输入1389.3.4运行address—book示例139第10章Java持久化查询语言14010.1查询语言术语14010.2使用Java持久化查询语言创建查询14110.2.1查询中的命名参数14210.2.2查询中的位置参数14210.3简化的查询语言语法14210.3.1选择语句14210.3.2更新和删除语句14310.4示例查询14310.4.1简单查询14310.4.2导航到相关实体的查询14410.4.3包含其他条件表达式的查询14610.4.4批处理更新和删除14710.5完整的查询语言语法14810.5.1BNF符号14810.5.2Java持久化查询语言的BNF文法14810.5.3FROM子句15210.5.4路径表达式15710.5.5WHERE子句15810.5.6SELECT子句16510.5.7ORDERBY子句16710.5.8GROUPBY和HAVING子句167第11章使用CriteriaAPI创建查询16811.1Criteria和MetamodelAPI概述16811.2使用MetamodelAPI为实体类建模17011.2.1使用元模型类17011.3使用CriteriaAPI和MetamodelAPI创建基本的类型安全查询17111.3.1创建Criteria查询17111.3.2查询根17211.3.3使用联接查询关系17211.3.4Criteria查询中的路径导航17311.3.5限制Criteria查询结果17311.3.6管理Criteria查询结果17511.3.7执行查询176第12章创建和使用基于字符串的Criteria查询17812.1基于字符串的CriteriaAPI查询概述17812.2创建基于字符串的查询17812.3执行基于字符串的查询179第13章使用锁定控制对实体数据的并发访问18013.1实体锁定和并发概述18013.1.1使用乐观锁定18113.2锁模式18113.2.1设置锁模式18213.2.2使用悲观锁定183第14章用实体图创建获取计划18514.1实体图基础18514.1.1默认实体图18614.1.2在持久化操作中使用实体图18614.2使用命名实体图18714.2.1对实体类应用命名实体图注解18714.2.2从命名实体图获得EntityGraph实例18814.3在查询操作中使用实体图189第15章对Java持久化API应用使用二级缓存19015.1二级缓存概述19015.1.1控制实体是否可以缓存19115.2指定缓存模式设置来提高性能19215.2.1设置缓存获取和存储模式19215.2.2通过编程方式控制二级缓存194第四部分消息传送第16章Java消息服务概念19816.1JMSAPI概述19816.1.1什么是消息传送19816.1.2什么是JMSAPI19916.1.3何时使用JMSAPI19916.1.4JavaEE平台如何使用JMSAPI20016.2基本JMSAPI概念20116.2.1JMSAPI架构20116.2.2消息传送方式20116.2.3消息使用20316.3JMSAPI编程模型20416.3.1JMS受管理对象20516.3.2连接20616.3.3会话20616.3.4JMSContext对象20716.3.5JMS消息生产者20816.3.6JMS消息消费者20816.3.7JMS消息21316.3.8JMS队列浏览器21516.3.9JMS异常处理21616.4使用高级JMS特性21616.4.1控制消息确认21716.4.2为发送消息指定选项21816.4.3创建临时目的地22016.4.4使用JMS本地事务22116.4.5异步发送消息22316.5在JavaEE应用中使用JMSAPI22316.5.1为JavaEE应用创建资源22316.5.2在企业bean或Web组件中使用资源注入22516.5.3使用JavaEE组件生成和同步接收消息22616.5.4使用消息驱动bean异步接收消息22716.5.5管理JTA事务22916.6关于JMS的更多信息231第17章Java消息服务示例23217.1JMS示例概述23317.2编写简单的JMS应用23317.2.1启动JMS提供者23417.2.2创建JMS受管理对象23417.2.3构建所有简单示例23517.2.4发送消息23517.2.5同步接收消息23817.2.6使用消息监听器完成异步消息传送24017.2.7浏览队列中的消息24217.2.8在同一个目的地运行多个消费者24517.2.9确认消息24517.3编写更高级的JMS应用24717.3.1使用持久订阅24717.3.2使用本地事务24917.4编写高性能和可扩展的JMS应用25417.4.1使用共享非持久订阅25417.4.2使用共享持久订阅25617.5使用一个简单Web应用发送和接收消息25717.5.1websimplemessageFacelets页面25717.5.2websimplemessage托管bean25817.5.3运行websimplemessage示例25917.6使用消息驱动bean异步接收消息26117.6.1simplemessage示例概述26117.6.2simplemessage应用客户端26117.6.3simplemessage消息驱动bean类26217.6.4运行simplemessage示例26317.7从会话bean向MDB发送消息26417.7.1为clientsessionmdb示例编写应用组件26517.7.2运行clientsessionmdb示例26717.8使用实体联接两个MDB的消息26817.8.1clientmdbentity示例应用概述26917.8.2为clientmdbentity示例编写应用组件27017.8.3运行clientmdbentity示例27217.9使用NetBeansIDE创建JMS资源27417.9.1使用NetBeansIDE创建JMS资源27417.9.2使用NetBeansIDE删除JMS资源275第五部分安全第18章JavaEE平台安全介绍27818.1JavaEE安全概述27818.1.1简单的应用安全演示27918.1.2安全机制特性28118.1.3应用安全特点28118.2安全机制28218.2.1JavaSE安全机制28218.2.2JavaEE安全机制28318.3保护容器安全28518.3.1使用注解指定安全信息28518.3.2使用部署描述文件提供声明式安全28518.3.3使用编程式安全28618.4保护GlassFish服务器安全28618.5使用安全域、用户、组和角色28618.5.1什么是安全域、用户、组和角色28718.5.2在GlassFish服务器中管理用户和组28918.5.3建立安全角色29018.5.4角色映射到用户和组29118.6使用SSL建立安全连接29218.6.1验证和配置SSL支持29318.7有关安全的更多信息293第19章Web应用安全入门29519.1Web应用安全概述29519.2保护Web应用安全29619.2.1指定安全约束29719.2.2指定认证机制30019.2.3在部署描述文件中指定认证机制30219.2.4声明安全角色30319.3Web应用使用编程式安全30419.3.1通过编程方式认证用户30419.3.2通过编程方式检查调用者身份30619.3.3编程式安全的示例代码30619.3.4声明和链接角色引用30819.4示例:保护Web应用安全30919.4.1设置系统来运行安全示例30919.4.2hello2—basicauth示例:对servlet使用基本认证31019.4.3hello1—formauth示例:对JSF应用使用基于表单的认证312第20章企业应用安全入门31620.1企业应用的基本安全任务31620.2保护企业bean安全31620.2.1使用声明式安全保护企业bean安全31820.2.2通过编程方式保护企业bean安全32120.2.3传播安全身份(Run—As)32320.2.4部署安全企业bean32420.3示例:保护企业bean安全32420.3.1cart—secure示例:使用声明式安全保护企业bean安全32420.3.2converter—secure示例:使用编程式安全保护企业bean安全328第21章JavaEE安全:高级主题33121.1使用数字证书33121.1.1创建服务器证书33221.1.2向证书安全域增加用户33421.1.3为GlassFish服务器使用一个不同的服务器证书33421.2认证机制33521.2.1客户端认证33521.2.2相互认证33521.3使用JDBC安全域完成用户认证33821.3.1配置JDBC认证安全域33921.4保护HTTP资源安全34021.5保护应用客户端安全34321.5.1使用登录模块34321.5.2使用编程式登录34421.6保护企业信息系统应用安全34421.6.1容器托管登录34421.6.2组件托管登录34521.6.3配置资源适配器安全34521.6.4将应用主体映射到EIS主体34621.7使用部署描述文件配置安全34721.7.1在部署描述文件中指定基本认证安全34721.7.2在部署描述文件中指定非默认主体—角色映射34821.8关于高级安全主题的更多信息348第六部分JavaEE支持技术第22章事务35222.1JavaEE应用中的事务35222.2什么是事务35322.3容器托管事务35322.3.1事务属性35422.3.2回滚容器托管事务35722.3.3同步会话bean的实例变量35722.3.4容器托管事务中不允许的方法35822.4bean托管事务35822.4.1JTA事务35822.4.2不提交返回35922.4.3bean托管事务中不允许的方法35922.5事务超时35922.5.1设置事务超时35922.6更新多个数据库36022.7Web组件中的事务36122.8关于事务的更多信息361第23章资源适配器和契约36223.1什么是资源适配器36223.1.1管理契约36323.1.2通用工作上下文契约36423.1.3出站和入站契约36423.2元数据注解36523.3公共客户端接口36623.4对JavaEE上下文和依赖注入(CDI)使用资源适配器36723.5关于资源适配器的更多信息368第24章资源适配器示例36924.1trading示例36924.1.1使用出站资源适配器37024.1.2实现出站资源适配器37224.1.3运行trading示例37324.2traffic示例37424.2.1使用入站资源适配器37524.2.2实现入站资源适配器37624.2.3运行traffic示例378第25章使用JavaEE拦截器38025.1拦截器概述38025.1.1拦截器类38125.1.2拦截器生命周期38125.1.3拦截器和CDI38125.2使用拦截器38125.2.1拦截方法调用38225.2.2拦截生命周期回调事件38425.2.3拦截超时事件38525.2.4为组件绑定拦截器38625.2.5拦截器排序38725.3interceptor示例应用38825.3.1运行interceptor示例389第26章批处理39026.1批处理介绍39126.1.1批处理作业中的步骤39126.1.2并行处理39226.1.3状态和判定元素39226.1.4批处理框架功能39326.2JavaEE中的批处理39426.2.1批处理框架39426.2.2创建批处理应用39426.2.3批处理作业的元素39526.2.4属性和参数39526.2.5作业实例和作业执行39526.2.6批处理和退出状态39526.3简单用例39626.3.1块步骤39726.3.2任务步骤39926.4使用作业规范语言39926.4.1job元素40026.4.2step元素40126.4.3flow元素40626.4.4split元素40626.4.5decision元素40626.5创建批处理工件40726.5.1批处理工件接口40726.5.2批处理工件中的依赖注入40926.5.3从批处理运行时环境使用上下文对象41026.6向批处理运行时环境提交作业41126.6.1开始作业41126.6.2检查作业的状态41126.6.3在应用中调用批处理运行时环境41226.7打包批处理应用41226.8webserverlog示例应用41226.8.1webserverlog示例应用架构41226.8.2运行webserverlog示例应用41826.9phonebilling示例应用41926.9.1phonebilling示例应用架构41926.9.2运行phonebilling示例应用42526.10关于批处理的更多信息426第27章JavaEE的并发工具42727.1并发基础42727.1.1线程和进程42827.2并发工具的主要组件42827.3并发和事务42927.4并发和安全43027.5jobs并发示例43027.5.1运行jobs示例43027.6taskcreator并发示例43327.6.1运行taskcreator示例43527.7关于并发工具的更多信息436第七部分案例研究第28章Duke书店案例研究示例43828.1Duke书店的设计和架构43828.2Duke书店接口43928.2.1BookJava持久化API实体43928.2.2Duke书店中使用的企业bean44028.2.3Duke书店中使用的Facelets页面和托管bean44028.2.4Duke书店中使用的定制组件和其他定制对象44128.2.5Duke书店中使用的属性文件44228.2.6Duke书店中使用的部署描述文件44328.3运行Duke书店案例研究应用44328.3.1使用NetBeansIDE构建和部署Duke书店44328.3.2使用Maven构建和部署Duke书店44328.3.3运行Duke书店应用444第29章Duke辅导案例研究示例44529.1Duke辅导应用的设计和架构44529.2主界面44729.2.1主界面中使用的Java持久化API实体44729.2.2主界面中使用的企业bean44829.2.3主界面中使用的WebSocket端点44829.2.4主界面中使用的Facelets文件44829.2.5主界面中使用的辅助类44929.2.6属性文件44929.2.7Duke辅导应用中使用的部署描述文件45029.3管理界面45029.3.1管理界面中使用的企业bean45029.3.2管理界面中使用的Facelets文件45129.3.3管理界面中使用的CDI托管bean45129.3.4管理界面中使用的辅助类45129.4运行Duke辅导案例研究应用45229.4.1运行Duke辅导应用452第30章Duke综合案例研究示例45530.1Duke综合应用的设计和架构45630.1.1events工程45830.1.2entities工程45930.1.3dukes—payment工程46130.1.4dukes—resources工程46130.1.5Duke商店工程46130.1.6Duke货运工程46530.2构建和部署Duke综合案例研究应用46730.2.1使用NetBeansIDE构建和部署Duke综合应用46730.2.2使用Maven构建和部署Duke综合应用46730.3运行Duke综合应用46730.3.1注册为Duke商店顾客46830.3.2购买产品46830.3.3批准产品发货46830.3.4创建新产品469

精彩书摘

  8.4查询实体  Java持久化API提供了以下方法来查询实体:  Java持久化查询语言(JavaPersistencequerylanguage,JPQL)是一个简单的基于字符串的语言,类似于SQL,用来查询实体及实体的关系。更多信息参见第10章。  CriteriaAPI使用Java语言API来创建类型安全的查询,用于查询实体及实体的关系。  更多信息参见第11章。  JPQL和CriteriaAPI都各有自己的优缺点。  简单地讲,JPQL查询通常比Criteria查询更简洁、更可读。熟悉SQL的开发人员会发现JPQL的语法很容易学习。JPQL查询可以在实体类中使用Java编程语言注解定义,或者在应用的部署描述文件中定义。不过,JPQL查询不是类型安全的,从实体管理器获取查询结果时需要一个强制类型转换。这说明,编译时可能无法捕获到类型转换错误。另外JPQL查询不支持不定数目的参数。  Criteria查询允许在应用的业务层定义查询。尽管使用JPQL动态查询也可以做到这一点,不过Criteria查询提供了更好的性能,因为JPQL动态查询每一次调用时都必须解析。  Criteria查询是类型安全的,因此不要求像JPQL查询那样完成类型强制转换。CriteriaAPI实际上就是一个Java编程语言API,不需要开发人员学习另一种查询语言的语法。Criteria查询通常比JPQL查询更麻烦,需要开发人员创建多个对象,要在这些对象上完成操作之后再向实体管理器提交查询。  ……

其他推荐