EJB 3.1 会给我们带来什么

虽然之前关于 EJB 3.1 的文章已经有不少了,但我还是忍不住要在写点关于这方面的东西。

 

EJB 3.1 提供了哪些新的特性,多数人已经很清楚了。这些特性总结一下,多数都是为了进一步简化编程模型而服务。有些是提供了新功能(easy packing、EJB Lite、embeddable EJB Container),另一些是使已有的功能能够更容易地被实现(可选的 session bean 接口、Timer、异步 session bean)


再简单回顾一下这些新特性(不完全)

  • 可选的本地接口
    这个就不用多说了
  • Timer Service
    用法很简单,就是使用 Annotation 进行配置(自从 Java SE 5 开始,Annotation 真是风靡整个 Java 世界呀)来实现任务的定时调用。当然,功能不会很强大,但对一般的应用也够用了。

  • 异步 Session Bean
    异步的任务在企业应用中很常用。过去 Java EE 是通过消息驱动 Bean 实现的(据说比较麻烦,但我没做过,也不知道到底有多麻烦了),现在可以通过在 Session Beans 的方法上添加 @Asynchronous 来实现。这样在调用到加了异步注释的方法是并不会阻塞在那里。
          异步的 Session Beans 方法可以返回空值或者实现了 Future 接口的类。后者可以用来检查异步调用的状态。

  • EJB Lite
    虽然 EJB 3.0 已经将编程模型变得非常简单了,但是对于大多数 Web 项目而言,EJB 3.0 提供的很多特性还是不会用到的。既然如此,那就出一个 EJB 的简化版本,将这些大多数项目很少会用到的特性去掉。于是,EJB 3.1 加入了 EJB Lite 这个新特性。
          其实,EJB Lite 反映了 Java EE 6 中一个比较大的变化。Java EE 6 将提供一种规模介于像 Tomcat 这种只支持 Servlet 与 JSP 的实现(Profile A)和像 JBoss 这种完全实现 Java EE 的实现(Full Platform)之间的实现(Profile B)。Profile B 除了会支持 Servlet 和 JSP 以外,还会支持 JTA 1.1、JPA 2.0、EJB Lite、JSF 2.0* 和 Web Beans 1.0*,后两个加星号是因为这两个规范是否要加入 Profile B 尚有争议。无论如何将在 Java EE 6 中加入的 Profile B 将会使非常受欢迎的一个变化。关于 Java EE 6 的 Profiles,请详见这篇文章“链接 ”。
          再回到 EJB Lite 身上,需要注意的是 EJB Lite 非常可能不会支持 Asychronous Session Bean 这个特性,也不会支持 Timer 特性。这两个特性都挺不错的。当然了,如果支持的特性太多了,也就不能被称为 EJB Lite 了。不过,现在还只是草案阶段,一切还没有最终确定。

  • Embeddable EJB Container
    嵌入式的 Java EE 容器也有不少,现在终于要作为一个标准了。作用主要有两个:1. 简化 EJB 应用的单元测试;2. 为像 Tomcat 这样的 Servlet 容器提供支持 EJB 的能力。最初嵌入式的容器可能只需支持 EJB Lite,以后可能会支持全部的 EJB 特性。
     
  • Easy Packing
    不用再将 EJB 打成 JAR 包了,直接放在 WEB-INF/classes 就行了。这对 Java EE 程序员来说再熟悉不过了。结合上两个新特性,Tomcat + 支持 EJB Lite 的嵌入式容器 + Easy Packing,一个 Java WEB 项目就可以轻轻松松使用 EJB 了。


这些特性会带来怎样的变化

 

      以往一个使用了 EJB 的 Java EE 项目都需要分别将项目打包成若干 WAR 和 EJB JAR 包,并组合为一个 EAR 包。从测试、开发和部署讲,这种方式都要比只使用 Servlet 和 JSP 的项目复杂了很多。这也是 Spring 出现之后能够迅速流行的一个重要原因。但是由于 Spring 先天过于简单的 Bean 声明周期管理和 Bean 单一的 Context(只有 Singleton 和 Prototype 两种,虽然在 2.0 版本后提供了 Request 和 Session 两种新的 Context,但这远远不够,看看 Seam 和即将发布的 Web Beans 1.0 中的 Context 吧),并且缺乏 Java EE 容器的支持,所以在企业应用开发里面 Spring 显得有点发力(所以 SpringSource 也推出了自己的服务器,并且从 3.0 开始,Spring 要开始支持 Java EE 的规范了,当然怎么个支持法还不得而知)。

 

      Java EE 的多数技术都很好,但过去由于他们用起来很麻烦,所以很多人对其避而远之。EJB 3.1 的主要的一个趋势就是简化编程模型(Java EE 6 也是如此)。可以想像,今后很可能出现名为 JBoss Lite 之类的支持 Java EE 6 中 Profile B 的平台(JBoss Lite 这个名字当然是我 YY 的)。在这个平台上开发和部署的难易程度应该和在 Tomcat 无太大差别。在这个平台上,你可以以过去在 Tomcat 上开发应用的方式开发 使用了 EJB(Lite)、JSP、Web Beans 等技术的 Web 项目,然后以 WAR 包的形式部署。这种方式太诱人了。希望我的 YY 能够成真(非常有可能)。

 

      之前有简单应用 JBoss Seam 的经历,Seam 提供了很多之前使用 Spring 时不曾敢想像的特性(技术的发展就应该如此)。同时,Seam 中的很多思想也很不错。但是由于 Seam 是基于 JSF 和 EJB 的,所以对于很多 Seam 的应用,你都不得不将其部署为 EAR 项目,这对中小的 Java EE 企业应用是很痛苦的。人都是懒得嘛,呵呵。(虽然 Seam 也可以不使用 EJB,但是这是否会失去很多诱人的特性呢?我觉得是肯定的,但我没有细究过这个问题,所以只好用不十分肯定的语气回答了)。在 Java EE 6 推出之后,Seam 项目将非常可能像使用 Spring 的项目一样简单,同时提供更多更企业级的特性。打个 WAR 包足以。

 

      同时,由于从 Spring 3.0 开始逐渐支持 Java EE 6(也是随着 Java EE 在不断增强功能的情况下也在不多地降低门槛,使得讲究简单的 Spring 也开始支持 Java EE 了),这使得 Spring 带有了越来越的企业应用开发框架的特质(虽然 Spring 本身有些先天不足,但后天很是努力呀)。

 

      总之,Java EE 和 Seam 会更加的简单(当然,Seam 本身就很容易入门,也很易用);Spring 这样的“非正统”的 Java EE 框架会更加的功能强大。看来 Java EE 领域的09年会好戏不断呀(虽然有金融危机)。

 

 

 

最后,来点参考文章

你可能感兴趣的:(java,spring,ejb,企业应用,seam)