无状态EJB:池化和生命周期
無狀態EJB池和生命周期的摘要視圖(注釋)。 對新手有用。 。 。 。 。
EJB池:快速概述
- EJB實例存儲在稱為EJB池的位置–這不過是內存中的緩存 。
- 無狀態EJB通常按需實例化,即,當客戶端調用Bean上的方法時。
- 但是,大多數應用程序服務器還提供了一種功能,可以對其進行配置,以便在啟動時可以使用一定數量的實例(例如,在Weblogic中)填充EJB池,這可以在weblogic-ejb-jar.xml中通過聲明以下內容進行配置:空閑池中的初始bean中的確切數字。
合并收益
- 性能提升
- 客戶端不需要等到實例化bean即可為請求提供服務
無狀態Bean生命周期
NON_EXISTENT –在這種情況下,bean在EJB池中尚不存在(尚未實例化)
不活動 –在這種狀態下,EJB實例已經存在于EJB池中,但沒有為客戶端請求提供服務
BUSY(忙) –調用EJB實例以服務于客戶端請求,結果,它進入BUSY狀態。
為了服務客戶端請求,將調用一個EJB實例,結果,該實例進入BUSY狀態。 EJB可以從INACTIVE或NON_EXISTENT狀態進入BUSY狀態
SLSB狀態轉換
不忙-顧名思義,池中選擇了不活動的bean來滿足客戶端調用
NON_EXISTENT變為BUSY –創建了一個新的EJB實例來滿足客戶請求
EJB可以從繁忙狀態回到不活動狀態,即,在處理了客戶端請求之后,實例又回到了池中
在某些情況下,還可以通過配置超時來破壞 EJB實例,該超時迫使應用程序服務器刪除池中在特定時間間隔內處于非活動狀態的所有EJB實例。 但是,應用服務器確實要確保EJB實例數量不低于允許的實例的最小數量(可配置屬性-上面已讀)
注意 :這樣做主要是為了節省池中的EJB所消耗的內存量,因為它們被緩存在那里。 如果有許多未使用的實例,可以將它們刪除以優化內存消耗。 容器可以按需創建新實例
客戶端在無狀態Bean上調用方法時會發生什么?
場景1 :容器實例化bean的新實例。
可能的原因是
- 開始時, EJB池中沒有bean –在服務器啟動時,未指示App Server合并默認數量的bean
- EJB池中的所有Bean都在忙于處理來自客戶端的請求,但是池中的Bean總數小于允許的最大實例數(配置參數)
場景2 :容器返回了bean的現有實例
可能的原因
- 池中有一定數量的EJB實例可用,并且它們不處于BUSY狀態,即它們不參與服務客戶機請求。 容器剛剛返回一個這樣的實例
- 池中有一定數量的EJB實例,但是它們都處于BUSY狀態,并且已經達到了池中最大允許的bean數。 客戶端應用程序必須等待,直到一個這樣的Bean變為可用并可以滿足客戶端請求為止
方案3 :客戶端請求不是服務(收到異常)
可能的原因
如果已經達到池中允許的最大數量的Bean,并且在特定時間范圍內所有BUSY Bean都不可用。
翻譯自: https://www.javacodegeeks.com/2014/05/stateless-ejbs-pooling-and-lifecycle.html
總結
以上是生活随笔為你收集整理的无状态EJB:池化和生命周期的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 95555是哪个银行?
- 下一篇: liberty是什么币?