第 5 章 EJB 子系统调整


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 实例池的大小限制了一次可以创建的特定 EJB 的实例数量。如果特定 EJB 的池已满,客户端将阻止并等待实例可用。如果客户端没有在池的 超时 属性中设置的时间内获取实例,则会引发异常。

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 值生效。

您可以将 EJB 配置为使用特定的实例池。这样,可以更精细地控制可供各个 EJB 类型使用的实例。

5.1.1. 创建 Bean 实例池

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

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

  • 创建带有派生最大池大小的 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 将要使用的特定实例池。如需更多信息,请参阅 开发 EJB 应用中的 jboss-ejb3.xml 部署描述符参考

5.1.3. 禁用默认的 Bean 实例池

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

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

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

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

Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。 了解我们当前的更新.

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.