技术开发 频道

了解 Java EE 5

  【IT168 技术文章】

         引言

  纵观 Java Platform, Enterprise Edition (Java EE) 规范的历史可以看出,每次重大修订都是由一个重要主题推动的。例如,第一次发布 J2EE™ 1.2 时,伴随的重要主题是首次将单独的规范绑定在一起,后来,在 J2EE 1.4 中,关注的重要主题则是 Web 服务。图 1 显示了 Java EE 的摘要历史,列出了每个版本的重要功能以及促成每次修订的一些重要外部影响。

  图 1. Java EE 的历史

  与一些新技术的大多数早期版本一样,Java EE 规范的以前版本中存在一些“难点”,其中包括:

  业务逻辑编程的复杂性。

  持久性编程模型的复杂性和性能。

  表示层/逻辑混合。

  Web 服务的类型、复杂性、文档模型、扩展和性能。

  多成员团队开发。

  漫长的编辑-编译-调试周期。

  这时,毫无疑问,Java EE 5 规范的主题就是简化,这一目标已通过改善以下领域的开发体验得到实现:

  简化业务逻辑开发。

  简化测试和依赖关系管理。

  简化 O/R 持久性。

  增强 Web 服务编程模型。

  Java EE 5 中的许多升级都受到商业和开放源代码领域创新技术的影响,例如 Hibernate、Spring、Service Data Object (SDO) 以及其他技术。另外,还预期对规范的级别进行升级,做一些小幅度的改进。

  为您使用 Java EE 5 做准备,本文重点介绍新规范的一些主要功能,如 EJB 3.0、Java Persistance Architecture (JPA)、Web 服务、JAX-WS 及其他一些内容,然后简单地介绍我们对 Java EE 6 的一些可能的预期。

  EJB 3.0

  对于 Java EE 5 中的所有技术增强而言,Enterprise JavaBean™ (EJB) 3.0 是最为显著的,已对它的外观进行了很大的更改,明显简化了开发。EJB 3.0 规范已拆分为三个子规范:

  EJB 3.0 简化 API:定义用于编码 EJB 组件(特别是会话 Bean 和消息驱动的 Bean)的新简化的 API。

  核心契约和要求:定义 Bean 和 EJB 容器之间的 EJB 契约。

  Java 持久性体系结构 API:为持久性定义新实体 Bean 模型。

  下一部分描述 EJB 3.0 和 JPA API 的更新。

  EJB 3.0 简化

  POJO(传统 Java 对象)是最近经常提到的一个术语,它是指编写为简单 Java 类的代码。由于 EJB 2.x 程序要求您扩展特定的类、提供多个接口并编写部署描述符,因此它们被视为“重载”的 Java 对象,而不再是简单的对象;而且,还需要 J2EE 容器来运行和测试它们。EJB 3.0 的更改包括:

  EJB 组件不再要求主接口。另外,不再需要 EJB 组件提供不同的接口或扩展任何特定于 EJB 的类。

  J2SE 5.0 标注现在是实现 EJB 3.0 组件的一个主要辅助方法。通过指定特殊的标注,开发人员可以创建 EJB 组件的 POJO 类,并将其作为 XML 的备选方案。

  EJB 3.0 引入了业务接口概念,而非单独的远程和本地接口。下面给出了它的一个示例:

  清单 1

1 public interface Stock
2
3   {
4
5   public double getQuote(String symbol);
6
7   }
8
9

  您的 Bean 类可以实现以下接口:

  清单 2

1 @Stateless public class StockBean implements Stock
2
3   public double getQuote(String symbol)
4
5   {
6
7   return 100.33;
8
9   }
10
11   }
12
13

  在上面的示例中,@Stateless 标注意味着此类现在是一个无状态的会话 Bean,并且使用业务接口来调用它。还可以在不实现特定接口的情况下对无状态会话 Bean 进行编码,而且可以通过容器生成一个:

  清单 3

1 @Stateless public class StockBean
2
3   public double getQuote(String symbol)
4
5   {
6
7   return 100.33;
8
9   }
10
11   }
12
13

  缺省情况下,除非特别标注,否则,所有公共方法都包括在业务接口中。例如,如果使用 @BusinessMethod 至少指定一个方法,则只有使用 @BusinessMethod 指定的方法才包括在业务接口中:

  清单 4

1 @Stateless public class StockBean
2
3   @BusinessMethod public double getQuote(String symbol)
4
5   {
6
7   return 100.33;
8
9   }
10
11   }
12
13

  现在已经创建了一个接口,那么如何指定一个方法是远程的还是本地的?当然,可以使用一个标注:

  清单 5

1 @Stateless public class StockBean
2
3   @Remote public double getQuote(String symbol)
4
5   {
6
7   return 100.33;
8
9   }
10
11   }
12
13

  您可以标注业务接口或者 Bean 类本身。当选择生成业务接口时,在 Bean 类上启用标注非常有用。

0
相关文章