Java EE 7简介
Java EE 作为一个企业应用的部署平台,具有很好的健壮性、能够提供强大的 Web 服务且非常易于部署。这些年来,通过其不断发展,它已大大简化了以服务器为中心的应用程序的开发、部署和管理,已经逐渐成为企业级开发的通用标准。
1999 年,Sun 正式发布了 J2EE 的第一个版本。但从 1999 年诞生的第一个 J2EE 版本一直到 J2EE 1.4 版本,虽然它已经具有了强大的功能,但仍不太被人们接受。这是因为连实现一个简单的 J2EE 程序,都需要大量的配置文件,非常不便使用。在 2002 年,J2EE 1.4 推出后,复杂程度更是达到了顶点,尤其是 EJB 2.0,开发和调试的难度非常大。
2006 年 5 月份 Sun 正式发布了 J2EE 1.5(现改名为 Java EE 5)规范,Java EE 5 的主基调为“简化开发”。即让开发者能够更方便、高效地使用 Java EE 技术。从 Java EE 5 开始,通过引入注释、EJB 3.0 的业务组件、更新的 Web 服务和加强的持久化模型,将重心转移到提高开发人员的生产力上来。
Java EE 6 进一步简化开发流程,增加平台的灵活性,从而更好地解决轻量级 Web 应用程序。此外,Java EE 6 开始与开源架构进行无缝集成,并对现有的技术做了精简。实践证明,Java EE 6 取得了巨大成功,成功的原因主要有下面几点:
截至 2013 年 5 月,已有超过 50 万人次从 Oracle 和其他行业的产商下载 Java EE 组件;
是企业开发人员的第一选择;
是应用开发平台的第一选择;
18 家应用服务器供应商以最快的速度兼容 Java EE 不同版本。
图 1. Java EE 7 新特性

Java EE 7 扩展了 Java EE 6,利用更加透明的 JCP 和社区参与来引入新的功能,如图 1(本图引用自 Java 官网)所示,主要包括加强对 HTML5 动态可伸缩应用程序的支持、提高开发人员的生产力和满足苛刻的企业需求。
1、提高开发人员的生产力
通过一个紧密集成的平台简化了应用架构,减少样板代码和加强对注释的使用来提高效率,另外借助标准 RESTful Web 服务对客户端的支持提高了应用程序的可移植性。
2、加强对 HTML 5 动态可伸缩应用程序的支持
基于其可扩展的基础架构,Java EE 7 推动了对 HTML 5 应用的构建和支持。在新的平台中,借助具有行业标准的 JSON 简化了数据分析和交换,并通过低延迟和双向通信的 WebSockets 减少了响应时间。以及利用改进的 JAX-RS 2.0 更好地支持异步的、可扩展的、高性能的 RESTful 服务,从而更好地支持多用户的并发操作。
3、满足苛刻的企业需求
为更好地满足企业的需求,Java EE 7 提供了许多新功能:
细化批处理作业,形成可管理的区块,以实现不间断的 OLTP 性能;
简化多线程并发任务的定义,以提高可扩展性;
以及提供具有选择性和灵活性的事务应用程序等。
Java EE 7 开发的开放性,使得 Java 社区、供应商、组织和个人都能参与其中。19 个来自世界各地的用户组,包括来自北美、南美、欧洲和亚洲,都参与了“采用 JSR”计划,提供了宝贵的反馈意见和代码示例以验证 Java 规范 (JSR) 的 API。
在最新发布的 Java EE 平台中都大大简化了访问集装箱服务的 API,同时大大拓宽了服务范围。Java EE 7 继续秉承了简化性和高效性的趋势,并进一步拓宽了平台范围。下面就针对 Java EE 7 的三大新特性进行详细的剖析。
提高开发人员的生产力
从 Java EE 5 开始,重心就一直放在提高开发人员的生产力上。这对于 Java 开发者来说非常重要,因为这使得使用 Java EE 进行开发更加便捷,更重要的是能够满足快速管理和生产的需求。鉴于此,Java EE 7 大大提高了开发人员的生产力。首先,减少了编写大量核心业务逻辑所需要的样板代码。其次,该平台引入更多的注释 POJOS 来降低 XML 配置的复杂性。最后,Java EE 7 使用更紧密集成的技术,提供一个更加无缝的开发体验。
减少冗余代码
Java EE 7 一直在致力于减少在核心业务逻辑代码运行前必须执行的样板代码。减少样板代码的三大核心区域是默认资源、JMS 2.0 和 JAX-RS 客户端 API。默认资源是一个新的功能,要求平台提供商预配置一个默认的数据源和一个默认的 JMS 连接工厂。这可以让开发人员直接使用默认的资源而无需进行额外的定义。JMS2.0 在可伸缩性和可移植性上经历了重大的改进,减少了冗余代码,已运用在无数的产品部署上,事实证明它是一个良好的规范,能够较好地满足企业的需求。
更多带注释的POJO
通过注释 Java EE 使开发人员更专注于 Java 对象的编程而无需关注繁琐的配置。
CDI 现在默认情况下已不需要使用 beans.xml 文件就可以直接使用。开发人员可以不需要任何配置而是简单的使用 @Inject 来注入任何 Java 对象。包括新的资源注释 @JMSDestinationDefinition 和 @MailSessionDefinition ,使得开发人员在源代码中就可以指定元数据资源,简化了 DevOps 体验。
更紧密集成的平台
Java EE 6 引入了 Managed Beans 1.0 作为第一步来朝着 EJBs、JSF Managed Beans 和 CDI beans 发展。Java EE 7 继承了这一点,例如,对 JSF Managed Beans 进行了改进来更好支持 CDI Beans。Java EE 7 为平台引入了易用的 EJB 容器管理事物,使用基于 CDI 拦截器的解决方案来保证事务可用在 CDI managed beans 和其它 Java EE 组件中,把注释 @Transactional 应用到任何 CDI bean 或者任何支持事务的方法中。
Bean Validation 在 Java EE 7 中使用广泛,现在可以用于方法级别的验证,包括内置和自定义的约束。约束可被应用于方法的参数以及返回值。约束也可以使用灵活渲染和违反约束的字符串格式的 Java EE 的表达语言。
Bean Validation 也延伸到 JAX-RS 2.0。注释约束可以应用到公共构造函数的参数、方法参数、字段和 bean 的属性。此外,他们还可以修饰资源类、实体参数和资源的方法。例如,约束可以通过 @ POST 和 @ PUT 应用于 JAX-RS 方法参数来验证表单提交的数据。
通过精简现有技术来简化Java EE
Java EE 7 中新增加了许多新的特性,有些老的特性和功能已经被更简单的特性所替代或直接弃用。Java EE 6 为过时技术的弃用和功能的修剪引入了一个正式的流程,以下的 API 在 Java EE 7 中已成可选,但在 Java EE 8 中将会被移除:
Java EE Management (JSR-77),原本是用于为应用 服务器创建监控管理的 API,可各大供应商对此 API 热情并不高涨;
Java EE Application Deployment (JSR-88),JSR 88 是当初用于 J2EE 应用程序在应用 服务器上进行配置和部署的标准 API 。可是该 API 始终没有得到众供应商的支持;
JAX-RPC,是早期通过 RPC 调用和 SOAP web services 进行交互的编程模型。由于 Web services 成熟后从 RPC 模型中分离出来,被更加健壮和具备更多特性的 JAX-WS API 所替代;
EJB 2.x Entity Beans CMP,复杂、笨重、过度复杂的 EJB2.* 的 Entity Bean 模型已经被 Java EE 5 的基于 POJO 的流行轻量级 JPA 持久层模型所代替。
对HTML 5 动态可伸缩应用程序的支持
HTML5 是包括 HTML、JavaScript 和 CSS3 在内的一套技术组合,它加快了开发人员创建高度互动的应用程序的步伐。开发出的应用程序都是以高度互动的方式提供实时的数据,如聊天应用程序,比赛实况报导等,并且这些应用程序只需要编写一次,就可以应用在桌面、移动客户端等不同设备上,具有非常好的跨平台性。这些高度动态的应用程序,使得用户可以在任何地点任何时间进行访问,从而对服务器端向客户端传送数据的规模提出了更高的要求。Java EE 7 在更新现有技术如 JAX-RS 2.0、Java Server Faces 2.2、和 Servlet 3.1 NIO 基础上,又借助新的应用技术 WebSockets 和 JSON 处理为支持动态应用程序 HTML5 奠定了坚实的基础。
低延迟数据交换:Java API for WebSocket 1.0
越来越多的 web 应用程序依赖于从中央服务器及时获取并更新数据。基于 HTTP 的 WebSockets 为解决低延迟和双向通信提供了一种解决方案。在 WebSocket API 的最基层是一个带注释的 Java 对象(POJO),如清单 1 所示:
清单 1. 带注释的 Java 对象(POJO)
通过注释 @ServerEndpoint 来指定一个 URI。诸如客户端连接、接收消息和客户端断开这样的回调函数都可以用注释来指定。WebSocket API 的最基层支持发送和接收简单文本和二进制信息。API 的简单性也使得开发人员可以快速入门。
当然,功能丰富的应用拥有更复杂的需求,因此需要支持对最基础的网络协议进行控制和自定义,而 WebSocket API 正好能够满足以上需求。另外,WebSocket 利用现有 Web 容器的安全特性,开发人员只需付出较少的代价就可以建立良好的保密通信。
简化应用数据分析和处理:Java API for JSON Processing 1.0
JSON 作为一个轻量级的数据交换格式被应用在许多流行的 Web 服务中用来调用和返回数据。许多流行的在线服务都是使用基于 JSON 的 RESTful 服务。在 Java EE 7 之前,Java 应用程序使用了不同的类库去生成和解析 RESTful 服务中的 JSON 对象。然而,现在这个功能已被标准化。
通过 Java API 中的 JSON Processing 1.0,JSON 处理过程标准化为一个单一的 API,应用程序不需要使用第三方的类库。这样使得应用程序更小更简便。同时 API 包括了支持任何转换器和生成器实现的插件,使得开发人员可以选择最好的实现方式去完成工作。
可扩展的RESTful服务:JAX-RS 2.0
JAX-RS 2.0 增加了异步响应处理,这对于支持对数据有着高要求的 HTML5 客户端的扩展是至关重要的。异步处理是一种更好更有效利用线程处理的技术。在服务器端,处理请求的线程在等待外部任务去完成时应该避免阻塞,从而保证在这一时间段内到达的其他请求能够得到响应。
同样的,在客户端,一个发出请求的线程在等待响应的时候也会发生阻塞,这影响了应用程序的性能。新的 JAX-RS 2.0 异步客户端 API 使得客户端调用 RESTful 可以和其他客户端活动并行执行。异步的好处是使得一个客户端可以同时调用多个后台服务,对于一个使用者来说减少了总体的延迟时间。
同时为了增强 RESTful 服务,JAX-RS 2.0 开发人员可以使用过滤器和实体拦截器。这样开发人员就可以使用标准的 API 来实现过滤和拦截功能,使开发过程变得更加便捷和高效。
增强开发的易用性:JSF 2.2
JavaServer Faces (JSF) 是一种用于构建 Web 应用程序的 Java 新标准框架。它提供了一种以组件为中心来开发 Java Web 用户界面的方法,从而简化了开发。在这个版本中,JSF 增加了对 HTML5 的支持。JSF 2.2 增加了一个叫“pass-through elements”的新功能。并为现有的元素增加了一系列的新属性,如输入元素“tel”、“range”和“date”等。不幸的是,现有的 JSF 组件不能识别这些新的属性,因此 JSF 应用程序会忽略这些属性不能进行使用,直到创建专有的解决方案。对于“pass-through elements”,JSF 渲染器将会忽略这些元素,只是把它们传给支持 HTML5 的浏览器,这使得可以利用现有的 JSF 组件来利用 HTML5 的特性来正常渲染。
JSF 引入了一个新的 pass-through 命名空间 http://xmlns.jcp.org/jsf/passthrough 映射到“p:”,任何组件的 name/value 对都可以以“p:” 开始,然后传给浏览器。如清单 2 所示,HTML 5 “type=color”不需要 JSF 组件的任何解析就可以传递给浏览器。
HTML5 的动态性使得服务器端处理信息更新的请求不断增多。在 Java EE 6,Servlet 异步 I/O 通过移除“一个请求需要一个线程”的限制,使一个线程可以处理多个并发请求。这可以使 HTML5 客户端快速得到响应。但是,如果服务器端读取数据的速度比客户端发送的速度要快,那么可能会由于缓慢的客户端连接而不能提供更多的数据导致线程阻塞,这样就限制了扩展性。在 Java EE 7 中使用新的事件驱动 API Servlet 3.1 从客户端读取数据将不会造成阻塞。如果有数据可用时,Servlet 线程将会读取和处理这些数据,否则就去处理其他请求。
满足苛刻的企业需求
Java EE 十几年来一直努力满足企业的需求,使用 Java 连接器连接到企业服务端、使用 Java 事务支持事务处理、使用 Java 消息服务让系统间可以进行相互通信。现在企业希望利用开发人员的 Java 技能编写基于标准的 API 并能够跨平台运行的批处理应用程序。企业也需构建高度可扩展的应用来满足更高的服务要求并提高现有资产的利用率。Concurrency Utilities 使得 Java EE 开发人员编写可扩展的应用程序成为可能。
在Java平台中,提高批处理应用程序的效率使开发过程变得更加便捷和高效
绝大部分的 Java EE 应用都是在线用户驱动的系统,但同时有一些需要进行批处理的服务器端应用程序,尤其是离线分析和 ETL 等。这些面向批处理的应用程序是非交互式的、需要长时间运行,这些任务通常需要大量计算,同时可以按顺序或者并行执行,并可以通过特定的事件启动或者定时调度。批处理较适合选择闲置的时间进行处理,这样可以有效利用计算机资源。
以前,对于批处理程序没有标准的 Java 编程模型。现在,批处理应用程序为 Java 平台提供了如图 2 非常容易理解的模型。批处理过程包括任务、步骤、存储库、读取 - 处理 - 写入模式和工作流等。
如图 2 所示,一个任务 job 代表一系列执行离散业务流程但又密切相关的步骤。步骤可以按顺序或者并行执行。同时,在同一个工作流,当前步骤是可选的,基于前一步骤的运行结果决定当前步骤将被执行或者跳过。另外,步骤可以根据实际的需要被重新执行。存储库 (repository) 存储了当前任务的信息,比如任务的最后执行时间。通过操作员 (operator) 可以对任务进行排序、开始、停止、暂停和取消操作。
图2. 用步骤描述工作

Java EE 8 新功能展望
就在Java 9发布的同一天,也就是9月21日,Oracle还同时宣布了GlassFish 5.0(Java EE 8开源参考实现)的一般可用性,以及Java EE 8总括规范和所有底层规范(JAX-RS 2.1,Servlet 4.0,CDI 2.0,JSON-B 1.0, Bean Validation 2.0等)已经确定并获得批准!
在不久的将来,您可以使用GlassFish 5.0和Java EE 8应用程序服务器。Java EE 8在开发周期之前就从Java.net基础设施迁移到了GitHub,虽然这一举措难度很大,但是更利于开发者使用。
简单了解一下Java EE 8真正的贡献者包括:
所有JCP规范领导和所有专家组成员
参与制定不同的参考实现包括java EE的所有人员
不同的Java EE实现者
整个Java EE社区
还有很多其他人的贡献,例如Oracle GlassFish团队以及管理构建基础架构的团队。
当然,这只是Java EE 8的开始,相信未来在Eclipse基金会、Red Hat和IBM的帮助下会更加开放。David Delabassee表示现。在的目标是在即将推出的GlassFish 5发行版中认证Java SE 9。
据Oracle官方称,Java是世界上最受欢迎的编程语言,每年有超过1200万开发人员运行Java和超过10亿次下载。Java也是云的第一大开发者选择,拥有超过210亿个云端连接的Java虚拟机。

Java EE新功能全列表:

Java Web学习总结(41)——Java EE 8 新功能展望相关推荐

  1. java web学习笔记(持续更新)

    java web学习笔记 一.Java Web简介 二.认识Servlet 1.什么是Servlet? 2.请求路径 3.tomcat 4.Servlet的使用 三.Servlet简单应用 1.创建S ...

  2. java web学习项目20套源码完整版

    java web学习项目20套源码完整版 自己收集的各行各业的都有,这一套源码吃遍所有作业项目! 1.BBS论坛系统(jsp+sql) 2.ERP管理系统(jsp+servlet) 3.OA办公自动化 ...

  3. 2019年Java Web学习笔记目录

    Java Web学习笔记目录 1.Java Web学习笔记01:动态网站初体验 2.Java Web学习笔记02:在Intellij里创建Web项目 3.Java Web学习笔记03:JSP元素 4. ...

  4. Java Web学习笔记

    什么是JavaWeb? Java Web,是用Java技术来解决相关web互联网领域的技术栈.web包括:web服务端和web客户端两部分.Java在客户端的应用有Java Applet,不过使用得很 ...

  5. Java Web项目中缺少Java EE 6 Libraries怎么添加

    Java Web项目中缺少Java EE 6 Libraries怎么添加 具体步骤如下: 1.项目名称上点击鼠标右键,选择"Build Path-->Configure Build P ...

  6. Java Web 学习路线

    Java Web 学习路线 实际上,如果时间安排合理的话,大概需要六个月左右,有些基础好,自学能力强的朋友,甚至在四个月左右就开始找工作了. 大三的时候,我萌生了放弃本专业的念头,断断续续学 Java ...

  7. Java Web 学习路线(2018)

    实际上,如果时间安排合理的话,大概需要六个月左右,有些基础好,自学能力强的朋友,甚至在四个月左右就开始找工作了. 大三的时候,我萌生了放弃本专业的念头,断断续续学 Java Web 累计一年半左右,总 ...

  8. Java Web学习日记(一)

    Java Web 1.概述 用java技术来解决相关的web互联网的技术栈. 静态Web * html ,css * 每个人访问的都是相同的 动态Web * 商城网站,新闻网站 * 不同的人不同地点. ...

  9. JAVA技术交流(学习群):51194570;JAVA技术交流(应用群):51194804

    JAVA技术交流(学习群):51194570;--Java技术学习交流平台 JAVA技术交流(应用群):51194804 --专注Java EE技术研究与应用 有兴趣的朋友+

最新文章

  1. displaytag 导出
  2. WIN XP 命令汇总
  3. Hybrid App 跨平台热更新方案实践 附带源码
  4. 场地测量的方法和程序_建筑施工测量的内容与方法
  5. sql server配置管理器在哪里看ip_微服务管理平台nacos虚拟ip负载均衡集群模式搭建...
  6. 我们究竟还要学习哪些Android知识?面试真题解析
  7. 论文笔记:Matrix Completion in the Unit Hypercube via Structured Matrix Factorization
  8. Redis 如何保持和 MySQL 数据一致
  9. thinkphp加锁抢购商品
  10. JS中utf8和GBK的字符编码转换
  11. 竞赛发布|100万奖金寻DT时代“最强大脑”!
  12. android 如何 查看内存使用详情,android 查看内存使用情况
  13. APPCAN学习笔记006_创建第一个APPCAN应用
  14. mysql索引使用b_mysql索引的数据结构,为什么用b+树
  15. 火车售票系统html模板,火车售票系统完整代码.doc
  16. 计算机组成原理笔记(王道考研) 第三章:存储系统
  17. 一款png生成webp,gif, apng,同时支持webp,gif, apng转化的工具iSparta
  18. php技术创新:利用动态404页面实现全站自动静态化
  19. 亲测有效IEEE数据库论文免费下载
  20. 2017中国IP指数盛典:一场IP界的“华山论剑”,你敢赴约吗?

热门文章

  1. 块级、行内元素水平垂直居中方法
  2. DBMS连接不上 —— 在与 SQL Server 建立连接时出现与网络相关的或特定于实例的错误。
  3. xshell连接成功但无法输入命令_如何解决cisco设备无法进入系统问题?
  4. 基于hadoop构建对象存储系统_Hadoop社区正式支持腾讯云对象存储COS
  5. 红外报警c语言,基于单片机的红外报警系统设计 (毕业论文).docx
  6. 查看linux上卸载mysql数据库_linux卸载mysql数据库
  7. 实时帧数手机_RTX 3080 有多大升级必要?绝地求生帧数实测-RTX 3080 ——快科技(驱动之家旗下媒体)-...
  8. 华为做raid5步骤_华为手机这个功能真棒!一键将录音转为文字!快快用起来吧...
  9. foreach循环符合就不往下走了_游泳池循环方式及循环周期
  10. 什么是预热 压测_全链路压测探索实践之路