2009-11-13 44 views
3

通常情況下,我們使用singleton實例作爲business/dao層。在EJB的情況下彙集無狀態會話bean的原因是什麼?爲什麼要使用無狀態bean?

+0

這裏見相關的問題:http://stackoverflow.com/questions/134791/why-pool-stateless-session-beans – Joel 2009-11-13 11:18:10

回答

3

名稱中的「無狀態」是指會話對話狀態,即在該會話期間保留的bean的調用之間持續存在的狀態。但是,無狀態會話bean仍然可以擁有實例變量。這些實例變量不應與會話狀態相關,而是在客戶端之間「共享」。

換句話說,無狀態會話bean不保證線程安全。

因此,容器應該確保一次只有一個線程正在執行無狀態會話bean的給定實例,因此需要一個線程池。

+3

我認爲實例變量在調用之間保留它們的值 - 實例只是住在游泳池裏。它們可以用於緩存非會話資源。同意Session Beans明確地不是線程安全的,當按照EJB編程模型使用時,容器確保一次一個線程/請求由一個實例提供服務。 – djna 2009-11-13 10:54:50

+0

好點,我已經編輯了相應的答案。 – skaffman 2009-11-13 11:03:44

+0

arg,對不起,我也是。 – djna 2009-11-13 11:08:14

2
  • 因爲他們建造昂貴,通常需要訪問外部資源,如數據庫,消息隊列等。
  • 因爲你不想被創造了他們的無限數量的,否則你將耗盡資源
  • 使容器可以管理線程安全的,你
相關問題