当前位置: 首页 > 图灵资讯 > 技术篇> 全面研读 EJB 2.0(2)

全面研读 EJB 2.0(2)

来源:图灵教育
时间:2024-02-22 14:37:30

  全面研读 EJB 2.02001-04-05· --·wsdn

  EJB 1.1 中的 CMP 模型   在 EJB 1.1 中,bean 开发人员负责将军 bean 类的持久性字段声明为 Java 基本类型或可序列化类型。下面的示例显示了一个 Employee 企业级 bean 类,它是按 EJB 1.1 定义的,带有几个 CMP 字段:   // Employee bean 类   public class EmployeeBean implements   java.ejb.EntityBean {   // 实例字段   EntityContext ejbContext;   file:// 容器管理的字段   public int identity;   public String firstName;   public String lastName;   public double salary;   public Address address;   public Integer ejbCreate(int id, String fname,String lname){    identity = id;    firstName = fname;    lastName = lname;    return null;    }    ...       // Address 从属类   public class Address implements Serializable{   public String street;   public String city;   public String state;   public String zip;  }   当关系数据库用于持久性时,基本字段如 identity、firstName、lastName 和 salary,它们很容易持久,因为它们很好地映射成 SQL 类型,如 INTEGER、CHAR 和 DOUBLE。   在 EJB 1.1 中,CMP bean 的 XML 提供部署描述符 cmp-field 元素,用来标记这个 bean 类中的持久性字段(容器管理字段)。   在 EJB 1.1 中,CMP bean 的 XML 提供部署描述符 cmp-field 用来识别这个元素 bean 类中的持久性字段(容器管理字段)。如下所示,cmp-field 元素用于区分写入数据库的字段和不写入数据库的字段。

  例如,ejbContext 这个字段不包含在容器管理的字段列表中,因此它不是一个持久的字段。            EmployeeEJB     ...   Container   ...   identity   firstName   lastName   salary   address    ...   容器提供者提供工具,用来将 bean 持久字段映射到数据库表中,通常每个字段都映射到数据库表中 bean 对应一个表。但是,可序列化的类型,如 Address,持久化难度大。但是,可序列化的类型,如 Address,持久化难度大。在 EJB 1.1 在中间,没有标准的方法将可序列对象映射到关系数据库。虽然 Address 类有自己的字段集,但是 XML 部署描述符没有提供将这些字段映射到数据库的机制。在大多数情况下,人们希望将可序列化的对象(如 Address)作为二进制类型(有时称为二进制类型(有时称为二进制类型) blob 类型)在数据库表中持续存在。

  由于实体 bean 数据方案逐渐复杂,因此问题也变得严重。例如,Employee bean 可能有很多相似之处 Address 子对象,如 Benefits 和 JobPosition。这些子对象被称为从属对象,可以在关系数据库中形成跨表的复杂对象图。另外,EJB 1.1 中的 CMP 在很大程度上,持久性和其它性都不够。 bean 的关系。在 EJB 1.1 中间,如果一个 bean 准备和另一个一起维护 bean 容器会自动将主关键字或句柄作为链接。与某些其它 bean 这种关系的性质可能是双向的,也可能取决于一些不容易用主要关键词或句柄表示的字段,以保持这种关系 bean 上述方法已被证明是一种远未完善的机制。   EJB 2.0 的 CMP 模型   在 EJB 2.0 中,CMP 实体 bean 与持久性管理器签订新合同,使您能够在实体中工作 bean 包括定义更复杂、更可移植的关系 bean 与 bean 之间、bean 从属对象之间,甚至从属对象与从属对象之间的关系。

  持久性管理器是新加入的 Enterprise JavaBeans 在部署过程中。容器制造商,或专门从事特定数据库的持久性制造商,将能够提供这种持久性管理器。其思路是用于管理 bean 关系机制与容器分离,容器只负责安全、事务和资源的管理。这种职责的分离使得不同的持久管理器能够与不同的容器一起工作。它也使实体 bean 在不同 EJB 在各种持久管理器之间,制造商之间具有更强的可移植性。   假如你用过或学过 Thought Inc. 可自动生产 EJB 1.1 容器生成 BMP(bean 管理的持久性)bean 的产品 CocoBase,您已经熟悉了如何工作持久性管理器工具。CocoBase 根据 bean 从对象到关系的部署者提供的映射信息 BMP bean 生成所有数据库访问逻辑。在 EJB 2.0 持久性管理器可以根据部署描述符,bean 生成抽象持久性方案和部署者完成的工作提供的信息 CMP 与数据库相关的实体映射。然而,持久性管理器并不局限于关系数据库。它也可以是对象数据库和遗留的系统 ERP 系统(如 SAP)开发持久性管理器。

  为了将持久管理器从容器中分离出来,必须定义 bean 与持久管理器的合同。该合同在新的抽象持久性方案中表现出来。这个方案是通过部署描述符中的一组新的 XML 元素和 CMP 实体 bean 定义了一组代码习语。在 EJB 2.0 中,CMP bean 该类声明为抽象类,其持久性字段和关系字段采用抽象读写方法进行访问,而这两种方法的方法特征映射为 XML 部署描述符中的特定元素。

  在部署该 bean 根据持久性管理器工具,您将使用它 XML 部署描述符和 bean 类,具体实现这种抽象 bean 类及其从属对象类。具体实现将包括数据访问代码,该代码将在运行时进行 bean 在数据库中实际读写状态。在运行过程中,容器使用由持久管理器工具生成的子类,而不使用 bean 提供者定义的抽象类。

  bean 类别的继承层次结构   为了丰富讨论,在这里提供一个 CMP 实体的例子更具体地说明了抽象的持久性方案是如何工作的。