【问题标题】:Stateless EJB with more injected EJBs instances具有更多注入 EJB 实例的无状态 EJB
【发布时间】:2011-08-31 11:43:16
【问题描述】:

我知道无状态 EJB 存储在池中并根据需要进行实例化,我的问题是,当有更多 EJB 依赖项时会发生什么,例如这样的:

@Remote
@Stateless
public class Master_EJB{
     @EJB
     private EJB_A ejb_A;

     @EJB
     private EJB_B ejb_B;
}

EJB_A 和 EJB_B 也是无状态的 EJB。

在最坏的情况下,如果同时有两个请求,服务器将从池中检索两个 Master_EJB 实例(或在需要时创建)。

但是如果从这两个调用中,一个只需要 EJB_A 而另一个只需要 EJB_B,则需要多少个实例:4 (2 Master_EJB + 1 EJB_A + 1 EJB_B) 或 6 (2 Master_EJB + 2 EJB_A + 2 EJB_B )?

【问题讨论】:

    标签: java jakarta-ee ejb stateless-session-bean


    【解决方案1】:

    EJB_A 和 EJB_B 是无状态的还是有状态的?

    如果是无状态的,答案取决于使用的容器/池类型和最近的情况(请求数、服务器负载等)。 如果有状态和容器将实例化 2 个 Master_EJB 实例,则将实例化两个 EJB_A 实例,同时实例化两个 EJB_B 实例。

    请记住,容器可能创建两个 Master_EJB 实例 - 这又取决于容器本身和当前情况(同样,容器可能决定仅使用一个 Master_EJB 实例来处理请求)。

    【讨论】:

    • 对不起,我错过了那个信息,它们都是无状态的
    • 在这种情况下,它取决于容器(如我的回答中所述):)
    • 我通过一个简单的测试检查了 Java visualVM,至少在 Jboss 5.1 中并没有创建所有实例,只创建了需要的实例。非常感谢您的回答
    猜你喜欢
    • 2012-02-04
    • 1970-01-01
    • 2023-03-31
    • 1970-01-01
    • 2015-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多