2011-07-02 49 views
2

我們在無狀態EJB中有概念池。使用 池有什麼好處?我的理解是它可以節省創建對象的時間。 這是正確的嗎?如果是,創建對象或從現有池中獲取對象的性能是否存在顯着差異?這個池是否用於其他任何目的 比這個?在java或EJB中彙集概念?

回答

0

池可用於共享有限的資源(如數據庫連接)和重新使用創建和/或銷燬昂貴的對象。當與EJB結合使用時,它可以限制整個系統的負載,這在運行服務器時非常有用。根據類似的question的接受答案,它也有助於線程安全。

當注入各種資源和其他EJB(帶有註釋)時,創建(或設置)EJB會很昂貴,這在我的經驗中是常見的情況。然而,例如JBoss似乎重複這個過程,即使對於合併的EJB也是如此(請參閱Tom Anderson在類似question中的回答)。

如果池中的常見EJB經常被注入到其他EJB中,那麼當系統真正忙時,其他EJB將不得不等待公共EJB變爲可用。池中的普通EJB隨後充當共享有限資源。缺點是當普通的EJB不可用時(有時是由基礎設施中的混亂造成的),您可以在意外的地方得到超時異常(例如50秒後)。

我有一些JBoss服務器的經驗,它具有無狀態EJB的池機制。在該JBoss服務器中,有一個常用的EJB頻繁使用數據庫連接。如果大量工作同時進入系統,負載將會很高,但受到池化機制的限制。如果池化機制太多限制最大負載,則可以通過增加最大池大小來增加最大負載。