2011-08-31 79 views
2

我知道无状态EJB是存储在一个池,并根据需要实例化,我的问题是,当有更多的EJB的依赖关系会发生什么,比如像这样的东西:无状态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实例(或者根据需要创建)。 (2 Master_EJB + 1 EJB_A + 1 EJB_B)或6(2 Master_EJB + 2 EJB_A + 2)如果从这两个调用中,只需要EJB_A,而其他只需要EJB_B, EJB_B)?

回答

2

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

如果无状态,答案取决于使用的容器/池类型和近期情况(请求数,服务器负载等)。 如果有状态和容器将实例化2个Master_EJB实例,那么EJB_A的两个实例将被实例化,并且实例化两个EJB_B实例。

请记住,容器可能创建两个Master_EJB实例 - 这同样取决于容器本身和目前的状况(还有,容器可以决定只使用一个Master_EJB实例来处理请求)。

+0

对不起,我错过了那些信息,所有这些信息都是无状态的 – jasalguero

+0

在这种情况下,它取决于容器(如我在回答中所述):) –

+0

我用Java visualVM进行了一次简单的测试,至少在Jboss 5.1中是不创建所有实例,只创建所需的实例。非常感谢您的回答 – jasalguero