EJB 服务器为使用 EJB 组件的应用程序提供操作环境,并供应所有必需的服务,来支持 EJB 体系结构。打包 EJB 服务器软件并没有预先规定的方式。一种方法是将它作为一项功能增强包括到应用程序服务器中,这就是在 IBM WebSphere Application Server, Advanced Edition, Version 2.0 中采用的方法。
EJB 组件并不在 EJB 服务器的顶部直接执行。一个称为 EJB 容器的中间软件组件在 EJB 服务器环境中运行,从而又为这些 bean 自身提供操作环境。EJB 容器对 EJB 应用程序是完全透明的,但是在支持 bean 操作方面起着关键性的作用。
为了使 enterprise bean 能充当可重用的软件组件,它们对特定的服务器或平台功能不能有内建的相关性。服务器端功能的几种常见类型已经被从 bean 设计中“分离出去”,而将此功能的责任转移给了容器组件。例如,容器将被用来接管安全性、并发性、事务处理、交换到辅助存储器和其它服务的责任,从而使 bean 免受服务器相关性的制约,并将按业务逻辑来优化,而不是按服务逻辑来优化。
EJB 白皮书这样描述容器的作用:
“EJB 容器管理部署于其中的 enterprise bean。客户机应用程序并不直接与 enterprise bean 进行交互。相反,客户机应用程序通过由容器生成的两个封装接口( EJB Home 接口和 EJB Object 接口)与 enterprise bean 进行交互。当客户机使用封装接口调用各种操作时,容器截获每个方法调用,并插入管理服务。”(Thomas, Enterprise JavaBeans Technology: Server Component Model for the Java Platform)
可以期望 EJB 容器软件一般都会随 EJB 服务器软件一起提供,尽管规范允许分离这些组件。除了提供对运行时服务(如事务处理和安全性)的访问以外,还期望 EJB 容器包括各种必要工具,来支持 enterprise bean 的安装、操作和管理。例如,需要有工具解释 EJB jar 文件的内容,有工具生成数据库访问,来获得容器提供的持久性,有工具监视正在运行的 bean 的行为,以及实现安全性等。
Bean 风格
EJB 组件分为两种主要类别 -- 会话 bean 和实体 bean。根据 bean 处理状态、事务和持久性的方式这些类别还可以进一步细分。会话 bean 通常具有以下属性:
- 代表单个客户机执行
- 可以是事务性的
- 可以更新共享数据库中的数据
- 生存期相对较短
- 其生存期通常就是客户机的生存期
- 任何持久性数据都由 bean 管理
- 可以依容器的判断予以删除
- 会在 EJB 服务器失败时被删除
实体 bean 通常具有以下属性:
- 代表数据库中的数据
- 是事务性的
- 允许多个用户共同访问
- 可以长期存在
- 持久性数据可以由容器管理
- 在 EJB 服务器失败后能继续生存
EJB 规范对会话 bean 和实体 bean 的说明如下:
“对于客户机,会话 enterprise bean 是一种非持久性的对象,它实现某些在服务器上运行的业务逻辑。想像一个会话对象的一种方式是:会话对象是运行在服务器上的客户机程序的逻辑扩展。会话对象不在多台客户机之间共享。
“对于客户机,实体 enterprise bean 是一种持久性对象,它代表一个存储在持久性存储器(例如,一个数据库)中的实体的对象视图,或者是一个由现有企业应用程序实现的实体。”( Enterprise JavaBeans Specification 1.0)
用一种粗略的说法,会话 bean 代表这样的操作,它检索或存储数据以满足用户请求;而实体 bean 则代表一种数据集,可以访问这些数据集来满足用户请求。
会话 bean
最简单的一种 Enterprise JavaBeans 组件就是无状态的会话 bean。因为这些 bean 没有可以区分它们的状态,所有的实例都是完全相同的。容器管理无状态会话 bean 的生存周期,其方式是通过创建足够数目的此种 bean 来适应客户机工作负荷,并在不需要它们时将其删除。






