EJB 容器

Enterprise JavaBeans (EJB) 容器为应用程序服务器中的企业 Bean 提供运行时环境。容器处理应用程序服务器中企业 Bean 操作的各个方面,并充当 Bean 中用户编写的业务逻辑与应用程序服务器环境中其他方面之间的中介。

可以在单一容器中安装一个或多个 EJB 模块,每个模块可以包含一个或多个企业 Bean。

EJB 容器为企业 Bean 提供了许多服务,其中包括:
  • 根据需要启动、落实和回滚事务。
  • 维护企业 Bean 实例池以备入网请求之需,在非活动池与活动状态之间切换这些实例,从而确保满足 Bean 的线程条件。
  • 最重要的是,能够使实体 Bean 实例变量中的数据与持久存储器中存储的相应数据项自动同步。

通过在 Bean 进入和退出活动状态时动态地维护一组活动 Bean 实例,并使 Bean 状态与持久存储器同步,容器使应用程序能够管理的 Bean 实例数远远超出能够在应用程序服务器内存中同时存放的 Bean 实例数。从这个角度看,EJB 容器提供了与操作系统中的虚拟内存类似的服务。

WebSphere® Application Server 使用实体 Bean 管理数据库中的数据时提供了很大的灵活性。实体 EJB 的 Activate at 和 Load at 配置设置指定,如何以及何时从企业 Bean 的相应数据库行数据中装入数据以及对该数据进行高速缓存。这些配置设置提供了用于指定企业 Bean 高速缓存选项 A、B 或 C(由 EJB 1.1 规范定义)的能力。可以使用组装工具来配置这些设置。要了解更多有关如何使用组装工具的信息,请参阅组装工具信息中心

在事务之间,可以对实体 Bean 的状态进行高速缓存。EJB 容器支持选项 A、B 和 C 高速缓存。
  • 使用选项 A 高速缓存时,应用程序服务器将假定实体 Bean 用于单一容器。该 Bean 的客户机必须将其请求定向到该容器中的 Bean 实例。实体 Bean 对底层数据库拥有独占访问权,即,如果使用选项 A 高速缓存,那么无法克隆该 Bean,该 Bean 也无法参与工作负载管理。
    如果您打算使用只读方案,那么产品将提供选项 A 实体 Bean 的高性能备用变体。此高速缓存选项被称为多线程只读。与标准选项 A 行为相似,EJB 容器继续激活该 Bean(仅激活一次),并将它保持在活动的状态,直到 EJB 容器的活动的实例高速缓存需要空间为止。然而,EJB 容器的以下行为与标准选项 A 不同:
    • EJB 容器定期地重新装入持久存储 Bean 的状态,以响应调用它的方法的用户来检取从最后一次装入该 Bean 以来可能对持久存储做的任何更改。您可以通过 Bean 的部署描述符中的重新装入时间间隔设置来配置此功能。有关更多信息,请参阅“开发只读实体 Bean”主题。
    • 在事务结束的时候,Bean 的状态不会被 EJB 容器编写为持久存储,而且不调用 Bean 的 ejbStore() 方法。
    • EJB 容器允许对同一 Bean 实例中的多个客户机(线程)的方法调用。这与 Bean 内部的标准 EJB 组件不同。您在开发 Bean 时必须记住这一点,并且必须确保 Bean 的业务方法中的任何逻辑都具有整体线程安全性。
  • 使用选项 B 高速缓存时,在整个事务中实体 Bean 在高速缓存中一直保持活动状态,但在每种方法调用开始时要重新装入。
  • 使用选项 C 高速缓存(缺省选项)时,总是在每个事务开始时从数据库重新装入实体 Bean。客户机可尝试访问该 Bean,并在配置为主管该 Bean 的任何容器上启动新的事务。这类似于为 HTTP 会话描述的会话集群工具,其中实体 Bean 的状态在共享数据库中维护,需要时任何服务器都可访问。

选项 A 通过在事务作用域外部对数据库数据进行高速缓存来最大程度地提高企业 Bean 性能。通常,仅当 EJB 容器对给定数据库具有独占访问权时,选项 A 才适用。否则,数据完整性将受到影响。选项 B 更主动地对实体 EJB 对象实例进行高速缓存,这导致其性能优于选项 C,但内存使用量也更大。选项 C 是最常用的实体 EJB 现实世界配置,并且是缺省设置。

Activate at 设置指定激活企业 Bean 并将其放入高速缓存的时间点。从高速缓存中除去以及钝化也由此设置管理。有效值是 OnceTransactionOnce 设置表示在服务器进程中第一次访问 Bean 时将其激活,并由容器确定何时(例如在高速缓存变满时)将其钝化并从高速缓存中除去。Transaction 设置表示在事务启动时将 Bean 激活,而且在事务结束时将其钝化并从高速缓存中除去。缺省值是 Transaction

Load at 设置指定 Bean 何时从数据库装入其状态。此属性的值暗指了容器对数据库是具有独占访问权还是共享访问权。有效值是 ActivationTransaction。 Activation 表示在激活 Bean 时将其装入,并表示容器对数据库具有独占访问权。Transaction 表示在事务启动时装入 Bean,并表示容器对数据库具有共享访问权。缺省值是 TransactionActivate atLoad at 属性的设置控制了所使用的落实选项。对于选项 A(互斥数据库访问权),请使用 Activate at = OnceLoad at = Activation。此选项将避免调用 ejbLoad 函数,而是对所有访问 Bean 实例的事务进行序列化,从而减少了数据库输入/输出。选项 A 在高速缓存中维护较多的对象,因此内存使用量较大,但可以缩短响应时间(如果 Bean 实例通常不会被多个事务同时访问)。
要点: 如果正在使用 WebSphere WebSphere Application Server Network Deployment 并且已启用工作负载管理,那么无法使用选项 A。

必须使用导致使用选项 B 或 C 的设置。对于选项 B(共享数据库访问权),请使用 Activate at = OnceLoad at = Transaction。选项 B 在高速缓存中维护较多的对象,因此内存使用量较大。但是,由于每个事务都将创建自己的对象副本,因此在任何给定时间,内存中可能存在某个实例的多个副本(每个事务一个),从而要求在每个事务中访问数据库。如果某个企业 Bean 包含对 ejbActivate 函数的大量调用,那么使用选项 B 可能非常有益,这是因为所需的对象已在高速缓存中。否则,此选项与选项 A 相比好处并不大。对于选项 C(共享数据库访问权),请使用 Activate at = TransactionLoad at = Transaction。此选项在高速缓存中维护较少的对象,因此内存使用量较少。但是,在任何给定时间,内存中可能存在某个实例的多个副本(每个事务一个)。此选项可以减少同时被访问但并非同时被更新的企业 Bean 实例的事务争用情况。

此产品支持在多个应用程序服务器之间克隆有状态会话 Bean 的主对象。然而,它不支持克隆有状态会话 Bean 的特定实例。每个特定有状态会话 Bean 的实例可以仅存在于一个应用程序服务器中,并仅由导向该特定应用程序服务器的请求访问。有状态会话 Bean 的状态信息不能跨多个服务器集群成员进行维护。然而,启用有状态会话 Bean 故障转移以及配置 EJB 容器以使用内存到内存复制可以将有状态会话 Bean 故障转移复制到集群中的其他服务器,以便如果有状态会话 Bean 的主服务器出于某种原因而停止,那么备份服务器可以发生故障转移。有关有状态会话 Bean 故障转移的更多信息,请参阅“EJB 容器的有状态会话 Bean 故障转移”。

缺省情况下,EJB 容器以快速启动方式运行。EJB 容器启动逻辑将延迟装入和处理除下列 EJB 类型以外的所有 EJB 类型:消息驱动的 Bean(这些 Bean 在消息被发布到这些 Bean 之前必须已存在)、启动 Bean(必须在服务器启动时处理这些 Bean)以及您指定要在服务器启动时进行初始化的 EJB 类型。

所有其他 EJB 初始化将延迟到第一次使用 EJB 类型时进行。使用本地接口时,第一次使用 EJB 类型是对此类型执行 InitialContext.lookup() 方法。对于远程接口,这是对 EJB 或者它的 Home 调用第一种方法。


指示主题类型的图标 概念主题



时间戳记图标 最近一次更新时间: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cejb_ecnt
文件名:cejb_ecnt.html