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

标签 java jakarta-ee glassfish ejb

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

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

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

请帮助我。

最佳答案

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

EJB 池设置为:

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

对于中等负载的系统,将此属性设置为大于零的数字。值大于零可确保始终有池实例来处理传入请求。

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

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

池大小调整数量:服务器为缓存提供服务时要创建或删除的 Bean 数量。有效值从 0 到 MAX_INTEGER,默认值为 16。相应的 EJB 部署描述符属性是 resize-quantity。

当您更改最大池大小时,请务必重新校准池大小调整量,以保持平衡。一般来说,最大池大小越大,池调整大小的数量也越大。

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

如果池中的 Bean 数量多于最大池大小,则池会按照池空闲超时指定的时间间隔,按照池调整大小数量的步骤,恢复到初始池大小和最小池大小。如果调整大小的数量太小并且空闲超时太大,您将不会看到池足够快地恢复到稳定大小。

关于java - GlassFish 4 (EJB3) - 无状态 bean 生命周期,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28254632/

相关文章:

Java泛型继承神秘错误

java - Eclipse识别包

java - Pulsar 客户端线程平衡

java - 如何记录新创建的日志文件?

glassfish - 什么是 Glassfish "osgi-cache"?

java - 从一个 Liferay 插件项目调用另一个 Liferay 插件项目

java - Spring 看不到 servlet-context 和 contextConfigLocation bean 之间的 bean

servlets - 如何在 WAR 中使用注释定义 servlet 过滤器的执行顺序

java - RMI、EJB 和回调

java - 无法在 Glassfish 中获取 Oracle 连接