在我的应用程序中,我有一个作为 SLSB 实现的“ worker ”池。
我在 glassfish-ejb-jar.xml
中定义了一些与池初始化相关的属性,如下所示:
<glassfish-ejb-jar>
<enterprise-beans>
<ejb>
<ejb-name>Worker</ejb-name>
<jndi-name>Worker</jndi-name>
<bean-pool>
<steady-pool-size>10</steady-pool-size>
<resize-quantity>2</resize-quantity>
<max-pool-size>30</max-pool-size>
<pool-idle-timeout-in-seconds>300</pool-idle-timeout-in-seconds>
</bean-pool>
</ejb>
</enterprise-beans>
</glassfish-ejb-jar>
实际上,池已启动并且尺寸正确。
唯一的一点是初始化不是在启动时发生,而是在一段时间之后发生。 这实际上给我带来了一些问题,客户端尝试使用该池但发现它未初始化。
是否有任何方法可以在启动时触发池初始化,或者这完全留给容器?
最佳答案
Q: Is there any way to trigger the pool initialization at startup or this is entirely left to the container?
是的。这取决于您使用的 Java EE 版本:
Java EE 5 (EJB 3.0) 及更早版本 - 使用启动 servlet,即在 web 中将参数
配置。在该 servlet 的 load-on-startup
设置为 1 的 servlet .xmlinit
方法中,您将实例化您的 Worker bean,一切都会在启动时发生。 servlet 配置示例:
<servlet>
<servlet-name>MyStartupServlet></servlet-name>
<servlet-class>your.package.MyStartupServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
Java EE 6 (EJB 3.1) - 对 Singleton bean 使用 @Startup
注释。来自 doc :
The EJB container is responsible for determining when to initialize a singleton session bean instance unless the singleton session bean implementation class is annotated with the javax.ejb.Startup annotation. In this case, sometimes called eager initialization, the EJB container must initialize the singleton session bean upon application startup
关于jakarta-ee - 无状态 session Bean 池初始化何时发生?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13269618/