本节书摘来异步社区《Java EE 7精粹》一书中的第1章,第1.3节,作者:【美】Arun Gupta,更多章节内容可以访问云栖社区“异步社区”公众号查看。
1.3 Java EE 7有什么新功能
为改善平台的功能性和丰富性,增加了一些新的规范。为使平台更简单、更易用,修订了几个现有的组件规范。
1.3.1 新的规范
新规范的主要功能描述如下。
1.Java API for WebSocket
通过声明方式注解一个POJO或者通过编程方式实现接口来定义一个WebSocket的客户端和服务器端点。
提供服务器特定的配置,比如在容器的URI空间中、端点支持的子协议中,以及应用程序所需的扩展中标识WebSocket端点的映射。
提供客户端特定的配置,比如提供自定义配置的算法。
启用在JDK或Web容器上打包和部署。
允许与现有的Java EE技术集成。
2.Java API for JSON Processing
流式API用于提供以流的方式解析和生成JSON。
对象模型API用于创建随机访问和树状结构来表述内存中的JSON数据。
3.Batch Applications for Java Platform
使用XML模式的作业规范语言(Job Specification Language)来描述批处理作业,定义了完整的作业执行顺序。
使用接口、抽象类和字段注释来定义批处理编程模型的功能。
提供了Chunked和Batchlet两种作业处理方式。
4.Concurrency Utilities for Java EE
提供了Java EE应用程序组件的并发能力,而不影响容器的完整性。
定义了托管对象:ManagedExecutorService、ManagedScheduledExecutorService、ContextService和ManagedThreadFactory。
1.3.2 更新的规范
更新后,规范的主要功能描述如下。
1.Java API for RESTful Web Services
提供了一个新的客户端API,用于访问网络资源和提供与JAX-RS的providers整合。
支持在客户端API和服务器API之间的异步处理。
定义了消息过滤器和实体拦截器作为定制客户端和服务器两端的请求/响应处理的扩展点。
引入QS因子作为服务器端新的内容协商。
字段、属性和使用@HeaderParam、@QueryParam等注解注入的参数可以使用声明式验证。资源类可以使用约束注解。
2.Java Message Service
为使JMS API更简单和易用,做出了多处修改。例如,Connection、Session和其他对象的close方法现在实现了java.lang.Autocloseable接口,可以在Java SE 7的try-with-resources语句中使用。增加了无需提供冗余参数创建会话的新方法。增加了getBody的新方法,允许应用程序直接从Message获取消息体,而无需首先将其转换为适当的子类型。
消息生产者现在可以指定一个在指定的时间间隔之后才被传送的消息。
增加了允许应用程序异步发送消息的发送方法。
JMS提供者现在必须设置JMSXDeliveryCount消息属性。
3.Expression Language
表达式语言(EL)是一个独立的规范,它可以使用ELProcessor在Java EE容器之外配置和使用。
表达式语言包含了lambda语法。现在,使用lambda表达式可以支持一套完整的集合操作,如map和过滤器。
除了通常的算术和比较操作符,还加入了新的操作(比如赋值运算符和字符串连接运算符),使表达式语言更具表现力。
4.Enterprise JavaBeans
对EJB 2.1、EJB QL和基于JAX-RPC的Web服务端点和客户端视图的支持现在是可选的。
使用没有方法的消息监听器接口,增强了消息驱动Bean(MDB)的约束。MDB暴露所有公共方法作为消息监听器方法,这将允许为将来的更多的MDB自定义资源适配器。
使用清晰的规则为EJB精简版容器定义了EJB API组来支持其他的API组,有助于定义如何将超越EJB精简版的EJB功能正式地加入到不支持完整功能的Java EE Profile的产品中。
EJB精简版包含了异步会话Bean调用和非持久性的EJB定时器服务。
增加了一个选项来禁用有状态会话Bean的钝化。
5.Servlets
定义了使用HttpUpgradeHandler升级现有的HTTP连接到不同的协议的标准机制。
为异步Servlet提供了非阻塞请求和响应处理。
定义了HTTP方法被覆盖的规则。
6.JavaServer Faces
Faces Flow封装了与应用程序定义的入口点和出口点相关的视图、页面。
资源库约束使开发人员能够以可重用的和可互换的方式,将Facelet模板应用到整个应用程序。
HTML5友好的标记允许几乎完全控制视图中每个元素的用户体验。
无状态视图意味着开发人员不再需要保存UIComponentstate,这允许应用程序使用JavaScript组件来代替JSF管理状态。
7.Java Persistence
可以通过使用javax.persistence.schema-generation.*属性来创建数据库和表。
非同步的持久化上下文意味着一个持久化上下文无需登记在一个事务中,这样的持久化上下文可以显式地加入事务。
Criteria API支持批量更新/删除。
可以使用FUNCTION调用预定义和用户定义的函数。
可以使用StoredProcedureQuery和@NamedStoredProcedureQuery调用存储过程。
8.Interceptors
使用InterceptorBinding关联拦截器是现在这个规范而不是CDI的一部分。
@AroundConstruct指定了一个拦截器方法来接收目标类构造子被调用时的回调。
通过增加构造子级别的拦截器,方法级的拦截器可以扩展到生命周期的回调。
使用拦截器绑定,优先级范围可以专用于拦截器排序。
9.Contexts and Dependency Injection
在Java EE中,为使用作用域注解的Bean和EJB自动启用CDI。
@Priority注解支持全局排序和启用拦截器、装饰器和Alternative。
@Vetoed注解简化了编程式的禁用类。
10.Bean Validation
验证约束可以应用到任意方法和构造子的参数和返回值。
增加和重新设计了CDI集成点。
当验证级联触发时,可以改变目标组。
11.Java Transaction
应用程序可以使用@Transactional,在类级别和方法级别以声明方式控制CDI管理的Bean和Java EE规范的托管Bean的事务边界,方法级别的注解会覆盖类级别定义的注解。
@TransactionScoped是一个新的CDI作用域,将Bean实例生命周期的作用域定义为当前的JTA事务。
12.JavaMail
@MailSessionDefinition和@MailSessionDefintions定义了使用JNDI注册的MailSession。
13.Java EE Connector Architecture
提供@AdministeredObjectDefinition、@AdministeredObjectDefintions、@Connector FactoryDefinition和@ConnectorFactoryDefinitions来定义连接器管理的对象和将在JNDI中注册的工厂。
本文仅用于学习和交流目的,不代表异步社区观点。非商业转载请注明作译者、出处,并保留本文的原始链接。