jakarta-ee - 无状态 session Bean 池初始化何时发生?

标签 jakarta-ee glassfish-3 ejb-3.1

在我的应用程序中,我有一个作为 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 中将参数 load-on-startup 设置为 1 的 servlet .xml 配置。在该 servlet 的 init 方法中,您将实例化您的 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/

相关文章:

java - 计划任务执行两次

java - jpa必须为序列号字段定义一个非只读映射

java - 在 JSP 中创建动态框架

java - weblogic服务器发布失败

java - 无法从servlet到jsp获取对象

java - Java 运行时环境 : SIGSEGV (0xb) at pc=0x00002b2f7e9b2744, pid=28778,tid=1138739520 检测到 fatal error

GlassFish:如何设置 Access-Control-Allow-Origin header

debugging - 无法在带有 glassfish 服务器的 ubuntu 上使用 intelliJ 在 Debug模式下运行 Web 应用程序

ejb - @Stateless bean 和 @EJB 保证是唯一的 ejb 实例吗?

java - 如何使 Jersey @RolesAllowed 与 @Stateless 一起工作?