1、EJB 容器
Enterprise Bean 是在称作 EJB 容器的特殊环境中运行的软件组件。容器容纳和管理 Enterprise Bean 的方式与 Java Web 服务器容纳 Servlet 或 HTML 浏览器容纳 Java Applet 的方式相同。Enterprise Bean 不能在 EJB 容器外部运行。EJB 容器在运行时管理 Enterprise Bean 的各个方面,包括远程访问 bean、安全性、持续、事务、并行性和资源的访问与合用。 EJB容器不允许客户机应用程序直接访问 Enterprise Bean。当客户机应用程序调用 Enterprise Bean 上的远程方法时,容器首先拦截调用,以确保持续、事务和安全性都正确应用于客户机对 bean 执行的每一个操作。容器自动为 bean 管理安全性、事务和持续,bean 开发人员不必将这种类型的逻辑写入 bean 代码本身中。Enterprise Bean 开发人员可以将精力集中于封装商业规则,而容器处理其它一切。 如同 Java Web 服务器管理许多 Servlet,容器同时管理许多 bean。为减少内存消耗和处理,容器合用资源并非常小心地管理所有 bean 的生命周期。当不使用某个 bean 时,容器将它放在池中以便另一个客户机重用,或者可能将它驱逐出内存,仅当需要时再将它调回内存。由于客户机应用程序不能直接访问 bean -- 容器位于客户机和 bean 之间 -- 因此客户机应用程序完全不知道容器的资源管理活动。 例如,未在使用的 bean 可能被驱逐出服务器内存,而它在客户机上的远程引用却丝毫不受影响。客户机在远程引用上调用方法时,容器只需重新实例化 bean 就可以处理请求。客户机应用程序并不知道整个过程。 Enterprise Bean 依赖容器来获取它的需求。如果 Enterprise Bean 需要访问 JDBC 连接或另一个 Enterprise Bean,那么它需要利用容器来完成此项操作;如果 Enterprise Bean 需要访问调用者的身份、获取它自身的引用或访问特性,那么它需要利用容器来完成这些操作。Enterprise Bean 通过以下三种机制之一与容器交互:回调方法、EJBContext 接口或 JNDI。· 回调方法:
每个 bean 都会实现EJB接口的子类型,该接口定义了一些方法,称作回调方法。每个回调方法在 bean 的生命周期期间向它提示一个不同事件,当容器要合用某个 bean、将其状态存储到数据库、结束事务、从内存中除去该 bean 等操作时,它将调用这些方法来通知该 bean。回调方法可以让 bean 在事件之前或之后立即执行内部调整。· EJBContext:每个 bean 都会得到一个 EJBContext 对象,它是对容器的直接引用。EJBContext 接口提供了用于与容器交互的方法,因此那个 bean 可以请求关于环境的信息,如其客户机的身份或事务的状态,或者 bean 可以获取它自身的远程引用。· Java 命名和目录接口 (JNDI):JNDI 是 Java 平台的标准扩展,用于访问命名系统,如 LDAP、NetWare、文件系统等。每个 bean 自动拥有对某个特定命名系统(称作环境命名上下文 (ENC))的访问权。ENC 由容器管理,bean 使用 JNDI 来访问 ENC。JNDI ENC 允许 bean 访问资源,如 JDBC 连接、其它 Enterprise Bean,以及特定于该 bean 的属性。 2、 Enterprise Bean 为创建 EJB 服务器端组件,Enterprise Bean 开发人员提供了两个定义 bean 商业方法的接口,以及真正的 bean 实现类。然后客户机使用 bean 的公共接口来创建、操作 bean,以及从服务器除去 bean。实现类,将被称作 bean 类,在运行时被实例化,且成为分布式对象。 Enterprise Bean 存活在 EJB 容器中,客户机应用程序通过网络利用其远程和本地接口访问它们。远程和本地接口暴露了 bean 的能力,并提供了创建、更新、交互和删除 bean 所需的全部方法。bean 是一个服务器端组件,它表示一个商业概念。Enterprise Bean的组成部分:
(1)企业级Bean类(2) EJB对象(3) Home对象(4)本地接口(5)部署描述(6)供应商特有文件(7)Ejb-jar文件3、远程和本地接口
远程和本地接口表示 bean,但容器不允许从客户机应用程序直接访问 bean。每次请求、创建、或删除 bean 时,容器都会管理整个过程。 本地接口表示组件的生命周期方法(创建、破坏、查找),而远程接口表示 bean 的商业方法。 远程和本地接口分别扩展javax.ejb.EJBObject 和javax.ejb.EJBHome 接口。 这些 EJB 接口类型定义了一组标准的实用程序方法,并为所有远程和本地接口提供了常用基本类型。 客户机使用 bean 的本地接口来获取对 bean 的远程接口的引用。远程接口定义了诸如用于更改客户名称的读方法和写方法的商业方法,或用于执行任务的商业方法,如使用 HotelClerk bean 在旅馆预定房间。以下是如何从客户机应用程序访问 Customer bean 的示例。在这种情况下,本地接口是 CustomerHome 类型,而远程接口是 Customer 类型。 远程接口定义了 bean 的商业方法,这些方法特定于 bean 表示的商业概念。远程接口是从 javax.ejb.EJBObject 接口划分出的子类,而这个接口又是 java.rmi.Remote 接口的子类。现在,讨论商业方法及其含义。 远程接口定义了读方法和写方法,用于读取和更新有关商业概念的信息。这代表一种 bean,叫作实体 Bean,它表示持久商业对象(数据存储在数据库中的商业对象)。实体 Bean 表示数据库中的商业数据,并添加特定于该数据的行为。 在运行时,应用程序使用远程和本地接口访问 Enterprise Bean。本地接口允许应用程序创建或定位 bean,而远程接口允许应用程序调用 bean 的商业方法。4、商业方法
商业方法还可以表示 bean 执行的任务。虽然实体 Bean 通常都会有面向任务的方法,但是任务通常代表另一种 bean,称作会话 Bean。会话 Bean 不表示类似于实体 Bean 的数据。它们表示执行服务(如在旅馆预定房间)的商业进程或代理程序。 有两种基本的 Enterprise Bean:实体 Bean,表示数据库中的数据,以及会话 Bean,表示进程或充当执行任务的代理程序。在构建 EJB 应用程序时,您会创建许多 Enterprise Bean,每一个都表示不同的商业概念。每个商业概念都将由实体 Bean 或会话 Bean 表示。您将根据如何使用商业概念来选择它将成为哪种 bean。5、实体 Bean
对于每一个远程接口都有一个实现类,在远程接口中定义了真正实现商业方法的商业对象。这就是 bean 类;bean 的关键元素。6、会话 Bean
HotelClerk bean 是一个会话 Bean,它在许多方面都类似于实体 Bean。会话 Bean 表示一组进程或任务,它将代表客户机应用程序执行这些进程或任务。会话 Bean 可以使用其它 bean 来执行任务或直接访问数据库。一小段代码就可以显示会话 Bean 能完成这两件事。7、生命周期方法
除了远程接口,所有 bean 都还有一个本地接口。本地接口提供了用于创建、破坏和定位 bean 的生命周期方法。这些生命周期行为独立于远程接口,因为它们表示不特定于单个 bean 实例的行为。以下是 Customer bean 的本地接口的定义。它扩展了 javax.ejb.EJBHome 接口,而该接口扩展了 java.rmi.Remote 接口。 EJB技术是基于其它两项技术的: Java RMI-IIOP和JNDI. Java RMI-IIOPSHI是J2EE真正实现强大的网络功能的机制。它允许编写分布式对象,可以使对象在内存中,跨Java虚拟机和跨物理设备进行通信。 在Java中,RMI-IIOP不是执行远程方法调用的唯一选择,也可以使用Java远程方法调用(RMI)。 RMI是Java中实现远程方法调用的最初方式。RMI使用java.rmi包, RMI-IIOP同时使用java.rmi包和javax.rmi包。 JNDI是Java命名和目录接口,可以使用JNDI查找一台打印机的位置,也可以用它来定位一个对象或连接一个数据库。 JNDI被广泛用于EJB、RMI-IIOP、JDBC等,它是通过网络查询的标准方法。