Jave EE 6 特性:依赖注入、Bean 验证和 EJB 增强

  • Srini Penchikala
  • 王丽娟

2009 年 12 月 13 日

话题:JavaDevOps语言 & 开发架构文化 & 方法

Java EE的最新版本提供了几项新特性,包括依赖注入、Bean 验证,以及EJBServletsJSFJSP技术方面的增强。Sun 于上周四发布了 Java EE 6。本文概述了最新版本的几个新特性。在后续新闻中,我们将对这些特性进行详细报道。

Java EE 6 平台的三个主要目标是灵活的技术堆栈、增强的可扩展性、易于开发。

技术堆栈:

Java EE 6 引入了功能子集(Profile)和 Java EE 平台配置的概念,用来为应用指定特定的类。Profile 可以包含 Java EE 的技术子集,也可以同时包含或只包含那些已通过 JCP,但尚不属于 Java EE 平台的技术。新版本带有一个名叫Web Profile的 Profile,它是用于 Web 应用开发的 Java EE 平台子集。Web Profile 是 Java EE 的轻量级版本,只包含大多数 Web 应用所需要的技术,而没有 Web 应用通常不会用到的企业级技术。

增强的可扩展性:

与先前版本相比,新版本还包括更多的扩展点和服务供应商接口。这能让 Java 开发人员以标准的方式往 Java EE 6 实现中插入其它技术和框架。

易于开发:

开发人员可以使用注解定义 Web 组件,比如使用 @WebServlet 定义 Servlet、使用 @WebFilter 定义 Servlet 过滤器。新版本标准化了一组用于依赖注入的注解,使得可注入的类在多个框架之间更容易移植。新版本还简化了 Java EE 应用打包的要求。举例来说,你可以在 Web 归档文件(WAR)中直接添加 EJB,不用再像以前那样先把 EJB 打包到 Java 归档文件(JAR)中,再将 JAR 文件打包到企业级归档文件(EAR)中。

Java EE 6 的新特性主要分为四类:展现、依赖注入和数据验证、组件模型和服务、持久化。

展现:

Java EE 6 相当一部分的增强都在展现(Web)层。可扩展性方面的两个关键改进是 Web 片段和共享框架的可插拔,它们由新的 Servlet 3.0(JSR 315)提供。Servlet 3.0 还支持异步处理和注解。支持异步处理后,Servlet 的线程就不用像以前那样了——收到来自资源的响应之后才能继续处理请求。这能允许聊天室之类的应用有长客户端连接。

Java EE 6 Web 层的另一个技术是 JSF 技术的最新版本——JSF 2.0(JSR 314)。JSF 2.0 借助 Facelet、模板化和复合组件简化了页面和组件的编写。它还提供内置的 Ajax 和注解支持。新版本还包括 JSP 2.2 规范。

依赖注入和数据验证:

Java EE 平台的上下文和依赖注入(CDI,JSR 299 规范)为 Java EE 组件提供了一组服务。这些服务允许 EJB 和 JSF 等 Java EE 组件能被注入,也允许通过触发和观察事件进行交互。CDI 还统一、简化了 EJB 和 JSF 的编程模型,使得 EJB 能在 JSF 应用中替代 JSF Managed Bean。

新的 Bean 验证规范(JSR 303)让验证更为简单,并减少了重复和错误。它提供了一个标准的验证框架,同一组验证规则在框架中可由应用的所有层(Web 层、控制层、服务层和领域层)共享。

组件模型和服务:

在服务器端,Java EE 6 发布了 EJB 3.1(JSR 318)和 Java API for RESTful Web Services 规范(JAX-RS,JSR 311)。EJB 3.1 中的改进有:

  • 无接口视图:简化了 EJB 的编写,只需要一个 Bean,无需再编写单独的业务接口。
  • 单例:使用@Singleton注解的单例设计能让你在一个 EJB 的多个实例之间、或应用的多个 EJB 之间轻松共享状态。
  • 异步会话 Bean 调用:利用@Asynchronous注解,会话 Bean 的方法就可以被异步调用了。
  • 简化的打包:EJB 以前必须打包在 JAR 文件里,新的打包机制打破了这一限制。EJB 现在能直接放到 WAR 文件中。
  • EJB 精简版:该模型是 EJB 3.1 的子集,Java EE 功能子集可包含它。

JAX-RS 规范可用来开发符合REST风格软件架构的轻量级 Web Service。它提供了在 Java 中构建 RESTful Web Service 的 API、注解及相关的类和接口。

持久化:

持久化模块包括 JPA 2.0(JSR 317),JPA 2.0 对 JPQL 有几点增强,还提供了新的 Criteria API,可动态创建基于对象的查询。JPA 2.0 还有一个元模型 API,能让开发人员动态访问数据库的元模型信息。JPA 2.0 添加了 @ElementCollection、@CollectionTable 两个注解,以支持新的集合映射:其中 @ElementCollection 用来指定集合中的基本对象或嵌套对象,这些对象存储在一个单独的表中,这个表叫 collection table;@CollectionTable 则用来指定 collection table 的有关细节,比如列信息。

在 Java 网站上可以下载最新的 Java EE 6 SDK。要想了解 InfoQ 对 Java EE 6 发布和新特性的更多报道,请移步至此

查看英文原文:Java EE 6 Features: Dependency Injection, Bean Validation and EJB Enhancements

JavaDevOps语言 & 开发架构文化 & 方法