2011-12-29 30 views
3

我想複製MVC設計模式。這就是我所做的,我有一個處理所有請求的servlet。在這裏,是注入的ejbs。所以在這個控制器/ servlet中用@EJB標註聲明7到15個ejbs。每次在servlet上完成請求時,EJB是否會注入servlet?

我只想問,例如,1個用戶調用maincontroller/servlet。 ejbs是否只在該調用中注入,或者每次用戶調用servlet時,它們是否每次都被注入?或者在第一次創建servlet時注入ejbs?

+0

感謝編輯@DataNucleus – 2011-12-30 05:56:09

回答

2

注入在創建對象時完成,並且自從Servlet容器通常(但不是強制的 - 在單線程模型的情況下)創建一個servlet的單個實例,然後在單獨的線程,在你不使用SingleThreadModel的情況下,你的情況下的EJB應該被創建一次。

+0

謝謝。明確表示 – 2011-12-29 04:59:41

+1

這是不正確的。 SingleThreadModel僅意味着servlet一次只能提供一個線程。 servlet容器將始終只創建一個servlet的實例(單線程模型或不)。 – Kal 2011-12-29 05:08:48

+2

@Kal檢查Servlet規範 - SRV.2.2.1它說---「使用SingleThreadModel接口保證只有一個線程在 時間將在給定的servlet實例的服務方法中執行,這對於 備註非常重要該保證僅適用於每個servlet實例,因爲容器 可能會選擇合併這些對象「這基本上意味着可能有多個實例 – Nrj 2011-12-29 05:53:17

2

在創建對象時注入資源(因爲您無法注入靜態字段,而僅注入成員變量)。

對於servlet,servlet類由servlet容器加載,然後創建一個實例。此時,@EJB or @Resource被注入。然後容器調用init()方法

+0

感謝您的澄清,並且只是爲了確保在servlet創建後(如此ejbs)得到它的正確性,那麼,如果有10個用戶可以訪問該servlet,那麼在創建過程中創建或注入ejb不會再發生,因爲它已經在創建它的第一個地方完成了。 – 2011-12-29 04:34:06

+1

是的。除非它們是有狀態的會話bean。在這種情況下,你會有儘可能多的會話。 – Kal 2011-12-29 05:04:39