2011-08-31 76 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