Enterprise JavaBeans组件慨述(6)
布署和使用 Enterprise JavaBeans 组件
本文的第 3 部分说明 Enterprise JavaBeans 组件的部署过程,部署并不仅仅是安装,因为它通常还涉及代码生成。部署还使用了一个非凡的部署描述符文件,此文件支持控制企业级 bean 行为(如某个 bean 是否需要事务)的参数。bean 部署的这一特性支持 bean 行为的说明性、纲领性规范的 EJB 目标。第 3 部分还比较了持久性的两种主要类型,bean 治理式持久性和容器治理式持久性,并讨论了 EJB 组件与 CORBA 的关系。同时还给出了一个简单的三层 EJB 应用程序。
部署过程
Enterprise JavaBeans (EJB) 组件是在称为部署的特定过程中安装的。由容器组件提供对部署过程的支持。在高级别上,部署由下列步骤组成:
bean 的开发人员创建必需的类文件、接口文件和控制信息。
容器分析输入文件并生成必要的类。
容器将条目添加到指向本地对象的 JNDI 命名空间中。
EJB 组件的开发人员编写 bean 的 Java 源文件,此文件包含为这个 bean 提供功能的业务逻辑方法,还包括 ejbCreate() 方法。bean 类还必须实现 javax.ejb.SessionBean 接口或 javax.ejb.EntityBean 接口。此外,bean 的开发人员编写接口文件,定义对 javax.ejb.EJBHome 接口和 javax.ejb.EJBObject 接口的扩展。EJBHome 接口的扩展,称为 bean 的本地接口,包含一个创建方法,并且假如 bean 是一个实体 bean,它还会包含一个 finder 方法。EJBObject 接口的扩展,称为 bean 的远程接口,指定在 bean 本身中定义的业务逻辑方法。
bean 的开发人员提供由部署描述符、环境属性和清单式文件组成的控制信息。
部署描述符是 javax.ejb.deployment.SessionDescriptor 对象或 javax.ejb.deployment.EntityDescriptor 对象的序列化实例。
环境属性作为键-值对存储在一个文件中,可通过 java.util.Properties 对象访问此文件。
清单式文件是标识企业级 bean 及其相关文件所必需的。
企业级 bean 的类文件、这两个接口的类文件、部署描述符文件、环境属性文件和清单式文件都是使用名为 ejb-jar 的文件格式归档的。所生成的 ejb-jar 文件提供给容器,作为部署过程的输入。
在部署时,容器分析 ejb-jar 文件的内容,并采取必要的操作使此 bean 可用。这些操作包括:生成实现 bean 的本地和远程接口的新 Java 类,将本地接口实现绑定到 JNDI 命名空间中,生成桩模块和 skeleton helper 类,后者是支持 RMI 通信所必需的。容器也可以生成 bean 的子类,并入容器专用的代码,以方便对 bean 的治理。部署时由容器生成的类通常是容器专用的,而不像 EJB 组件本身那样具有可移植性。
持久性、事务和安全
在为 EJB 组件提供持久性、事务和安全服务方面,EJB 容器可扮演主要角色。是将这些服务的职责指定给容器,还是假定职责由 bean 自身负责,EJB 规范为 bean 的开发人员提供了灵活性。例如,对实体 bean 的持久性支持既可以由 bean 治理,也可以由容器治理。假如 EJB 组件开发人员选择使用容器治理式持久性,他们就会在部署描述符中添加一个称为 containerManagedFields 的属性。根据 EJB 规范:
“containerManagedFields 属性的值是一个实例字段列表,企业级 bean 提供者希望,容器通过从数据库加载或将其存储到数据库,来治理这些实例字段。企业级 bean 代码不应该包含任何数据库访问调用 -- 数据库访问调用将由容器工具在部署时生成。
“专用于提供容器治理式持久性支持的容器,通常将提供丰富的部署时工具,以答应企业级 bean 部署者建立实例字段到基础数据源的映射。一般认为,尽管容器提供者的工具简化了映射进程,但映射进程仍可能涉及到 bean 部署者(即映射进程不是全自动的)。”(Enterprise JavaBeans Specification 1.0)
除了支持容器治理式持久性以外,EJB 体系结构还支持容器对事务的治理。该规范规定:
“Enterprise JavaBeans 是一种高级组件框架,它试图使应用程序开发人员不面对系统的复杂性。因此,大多数企业级 bean 及其客户机不需要通过程序访问事务治理。”(Enterprise JavaBeans Specification 1.0)
当 bean 的开发人员依靠容器进行事务治理时,就称为容器治理式定界,容器使用在部署时提供的事务属性: