根据official documentation无状态EJB有两种状态:不存在和就绪。但这就是关于生命周期的全部内容。
我使用 glassfish 4,我需要确切地知道
- 何时创建无状态 EJB 实例 - 在域启动时或当我将 EJB 注入(inject)到某个点时?
- 当未使用的无状态 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/