Richard Monson-Haefel
OpenEJB 首席设计师
2000 年 6 月
新的 EJB 2.0 规范不仅仅是一个新的阶段性发行版,它加入了许多引人注目的变动,包括 CMP 组件模型中的一些变动和一种新的 bean 类型,它们将增强您在开发应用程序时的灵活性和可移植性。请率先了解此新规范的功能,本月已发布了它的公开草案。
6 月 2 号发布的 Enterprise JavaBeans 2.0 不仅是一个阶段性发行版,而且是该规范的一个新版本。整个规范有 500 多页,比以前的 EJB 1.1 规范长了 200 页 (66%)。该规范中最重要的变动是对容器管理的持久性 (CMP) 所作的更改,以及引入了一种全新的 bean 类型,即 MessageDrivenBean
。
EJB 2.0 中的大量更改都集中在一种新 CMP 组件模型的定义中。它完全不同于旧的 CMP 模型,因为它引入了一个全新的成员,即持久性管理器,并引入了全新的方式来定义容器管理的字段,以及定义这些字段与其它 bean 和从属对象的关系。
MessageDrivenBean
(消息 bean)的引入也是非常重要的。消息 bean 体现出 JMS (Java Message Service)与 EJB 相集成,以创建出一种全新的 bean 类型,它设计用来处理异步的 JMS 消息。这种振奋人心的新型 bean 为 JMS 客户机提供一种组件模型,允许将它们部署到 EJB 容器系统的丰富而强健的环境中去。
对该规范还作了许多较小的其它更改。这些其它更改虽然也重要,但它们主要是涉及使该规范更严格,以便消除多义性,并使这些组件具有更高的可移植性。本文集中讨论 EJB 2.0 中引入的新 CMP 和消息 bean 组件模型。
我将提供几个具体的例子,所以读者应该很容易跟上并理解它。但是,EJB 初学者可能发现这个材料比较困难,因为它假定读者已对 EJB 有了基本的了解。有关 EJB 的详细信息,请参阅参考资料。
抽象持久性方案
为了理解抽象持久性方案是如何工作的,以及它为什么重要,我将为您快速地回顾一下在 EJB 1.1 中是如何处理 CMP 的,随后再讨论在 EJB 2.0 中如何定义它。
为了使讨论更充实,这里提供一个 CMP 实体的示例,它更具体地说明了抽象持久性方案是如何工作的。
在此 bean 的 XML 部署描述符中,抽象的持久性方案声明容器管理的各个字段和各种关系。
实体 bean 类和从属类都遵循相同的抽象持久性方案。下面是如何将 ContactInfo
对象定义为从属对象类的示例。
尽管容器管理的关系字段没有表露给客户机,但您仍然可以从远程接口直接使用容器管理的持久性字段。请注意,用来访问 firstName
和 lastName
的容器管理的持久性字段是在远程接口中使用的。
与另一个 bean 的一对多关系表示为 java.util.Collection
类型或 java.util.Set
类型,而一对一关系则使用该 bean 的远程接口类型。
除了通过抽象持久性方案定义持久性之外,EJB 2.0 还提供了一种新的查询语言,用来说明持久性管理器应该如何实现 CMP 中的各种查找方法。
EJB QL 和查找方法
EJB QL 语句是在实体 bean 的部署描述符中声明的。使用 EJB QL 非常简单。作为一个例子,Employee
bean 的本地接口可以按以下方式声明:
findByZipCode()
方法用来获得具有某个邮政编码的所有 Employee
bean。这将使用部署描述符中的下列 EJB QL 来表达。
FROM contactInfo WHERE contactInfo.zip = ?1
该语句本质上是表示“选择其邮政编码等于 zipcode
参数的所有 Employee
bean”。
|
在上面的声明中,两种选择方法运行于不同的范围。ejbSelectInvestmentsInEntity()
仅在当前的 Employee
bean 实例上执行,所以它只返回雇员的风险投资。
|
另一方面,ejbSelect<METHOD>
方法的范围则是全局性的,所以同一个查询将返回整个企业内所有雇员的全部风险投资。
选择方法的 EJB QL 语句要求使用 SELECT
子句,因为它们能够返回范围更广的各种值。
|
下面是 MarketingBean
类的定义,这个类使用发布给订单主题的消息。
- "A Beginner's Guide to Enterprise JavaBeans," Mark Johnson(JavaWorld,1998 年 10 月):
- Richard Monson-Haefel 的 EJB 开发者网站,EJBNow.com
- EJB 2.0,规范
- Thought 的 CocoBase
- IBM 的 MQ Series
- BEA 的 WebLogic JMS Service
- Progess Sonic MQ
Richard Monson-Haefel 所写的其它文章:
- "Create forward-compatible beans in EJB, Part 1"(JavaWorld,1999 年 12 月)
- "Create forward-compatible beans in EJB, Part 2"(JavaWorld,2000 年 1 月)
作者简介
Richard Monson-Haefel 是最近发布的 Enterprise JavaBeans 第二版的作者。他是 OpenEJB 的首席设计师(OpenEJB 是一种开放源代码的 Enterprise JavaBeans 2.0 容器),他曾经以设计师身份为 Enterprise JavaBeans、CORBA、Java RMI 以及其它 Java 方案提供咨询。Monson-Haefel 还维护着一个网站,供人们讨论 Enterprise JavaBeans 和相关的分布式计算技术。可以通过 richard.monson-haefel@javaworld.com 与 Richard Monson-Haefel 联系。