GlassFish 4 (EJB3) - 无状态 bean 生命周期

GlassFish 4 (EJB3) - stateless bean lifecycle

根据official documentation,无状态 EJB 有两种状态:不存在和就绪。但这就是它关于生命周期的全部内容。

我使用 glassfish 4,我需要确切地知道

  1. 当创建无状态 EJB 实例时 - 在域启动时或当我将我的 EJB 注入到某个点时或?
  2. 当未使用的无状态 EJB 被销毁时 - 在域停止或空闲时间后或?

请帮帮我

我认为有必要阅读 http://docs.oracle.com/cd/E18930_01/html/821-2431/abeea.html 中的以下 glassfish 设置:

EJB 池设置为:

初始和最小池大小: 池中维护的 bean 的初始和最小数量。有效值为0到MAX_INTEGER,默认值为8。对应的EJB部署描述符属性为steady-pool-size。

将此 属性 设置为大于零的数字以适度加载系统。具有大于零的值可确保始终有一个池化实例来处理传入请求。

最大池大小: 可以创建以满足客户端请求的最大连接数。有效值从零到 MAX_INTEGER。默认值为 32。零值表示池的大小没有限制。潜在的暗示是 JVM 堆将被池中的对象填充。对应的EJB部署描述符属性是max-pool-size.

设置此 属性 以代表系统的预期高负载。非常大的池会浪费内存并会降低系统速度。由于争用,一个非常小的池也很低效。

Pool Resize Quantity:服务器正在为缓存提供服务时要创建或删除的 bean 数量。有效值从零到 MAX_INTEGER,默认值为 16。对应的 EJB 部署描述符属性为 resize-quantity。

请务必在更改最大池大小时重新校准池调整大小数量,以保持平衡。通常,更大的最大池大小应该有更大的池调整大小。

池空闲超时:允许无状态会话 Bean、实体 Bean 或消息驱动 Bean 在池中空闲的最长时间。这段时间之后,如果该 bean 是无状态会话 bean 或消息驱动程序 bean,则该 bean 将被销毁。这是对服务器的提示。默认值为 600 秒。对应的 EJB 部署描述符属性为 pool-idle-timeout-in-seconds.

如果池中的 bean 多于最大池大小,池将以池空闲超时指定的间隔按池调整大小数量的步长排回到初始和最小池大小。如果调整大小的数量太小而空闲超时时间太长,您将不会看到池足够快地恢复到稳定大小。