第 5 章 Jakarta Enterprise Beans 子系统调优

JBoss EAP 可以缓存 Jakarta Enterprise Beans,以节省初始化时间。这通过使用 bean 池来完成。

JBoss EAP 中有两个不同的 bean 池:bean 实例池和 bean 线程池

适当的 bean 池大小取决于您的环境和应用程序。建议您测试不同的 bean 池大小,并在可模拟您预期实际状况的开发环境中执行压力测试。

5.1. Bean 实例池

Bean 实例池用于无状态会话 Bean(SLSB)和消息 Driven Beans(MDB)。默认情况下,SLSB 使用实例池 default-slsb-instance-pool,MDB 使用实例池 default-mdb-instance-pool

bean 实例池的大小限制了一次可以创建的特定企业 bean 的实例数量。如果特定企业 bean 的池已满,客户端将阻断并等待实例可用。如果客户端没有在池的 超时 属性中设置的时间内获取实例,则会引发异常。

bean 实例池的大小是使用 derived -size 或 max- pool-size 来配置的。您可以使用以下值之一 配置 池大小:

  • from-worker-pools,这表示池的最大大小源自系统上配置的所有工作程序池的总线程大小。
  • from-cpu-count,这表示最大池大小派生自系统上可用的处理器总数。请注意,这不一定是 1:1 映射,并且可能会由其它因素进行增强。

如果未定义 derived-size,则 max-pool-size 的值用于 bean 实例池的大小。

注意

derived -size 属性覆盖 max-pool-size 中指定的任何值。gene-size 必须未定义,才能使 max-pool-size 值生效。

您可以将企业 Bean 配置为使用特定的实例池。这样,可以更精细地控制每种企业 bean 类型的可用实例。

5.1.1. 创建 Bean 实例池

本节介绍如何使用管理 CLI 创建新的 bean 实例池。您还可以从 Configuration 选项卡导航到 Jakarta Enterprise Beans 子系统,然后使用管理控制台配置 bean 实例池,然后选择 Bean Pool 选项卡。

要创建新实例池,请使用以下命令之一:

  • 创建带有派生最大池大小的 bean 实例池:

    /subsystem=ejb3/strict-max-bean-instance-pool=POOL_NAME:add(derive-size=DERIVE_OPTION,timeout-unit=TIMEOUT_UNIT,timeout=TIMEOUT_VALUE)

    以下示例创建一个名为 my_derived_pool 的 bean 实例池,其最大大小从 CPU 数派生,超时为 2 分钟:

    /subsystem=ejb3/strict-max-bean-instance-pool=my_derived_pool:add(derive-size=from-cpu-count,timeout-unit=MINUTES,timeout=2)
  • 创建具有显式最大池大小的 bean 实例池:

    /subsystem=ejb3/strict-max-bean-instance-pool=POOL_NAME:add(max-pool-size=POOL_SIZE,timeout-unit=TIMEOUT_UNIT,timeout=TIMEOUT_VALUE)

    以下示例创建一个名为 my_pool 的 bean 实例池,其超时时间最多为 30 秒:

    /subsystem=ejb3/strict-max-bean-instance-pool=my_pool:add(max-pool-size=30,timeout-unit=SECONDS,timeout=30)

5.1.2. 指定实例池应该使用

您可以通过使用 @org.jboss.ejb3.annotation.Pool 注释,或通过修改 Bean 的 jboss-ejb3. xml 部署描述符来设置特定 bean 将要使用的特定实例池。如需更多信息,请参阅 开发 Jakarta 企业 Bean 应用程序 中的 jboss-ejb3.xml 部署描述符参考

5.1.3. 禁用默认的 Bean 实例池

可以禁用默认的 bean 实例池,这导致企业 bean 默认不使用任何实例池。相反,当线程需要在企业 Bean 上调用方法时,会创建新的企业 bean 实例。如果您不想对创建的企业 bean 实例数量有任何限制,这可能很有用。

要禁用默认的 bean 实例池,请使用以下管理 CLI 命令:

/subsystem=ejb3:undefine-attribute(name=default-slsb-instance-pool)
注意

如果 bean 配置为使用特定的 bean 实例池,禁用 default 实例池不会影响 bean 使用的池。