我對Java EE 6的讀一本書,我會見了以下幾個部分:會話狀態
「無狀態:會話bean包含方法之間沒有會話狀態,任何 實例可以用於任何客戶端。「
「有狀態:會話Bean包含會話狀態,必須跨單個用戶的方法保留 。」
什麼是 「會話狀態」 是什麼意思?有人用真實世界的例子來解釋它嗎?
在此先感謝。
二,爲什麼豆類的分類如此重要?它無論是對於初學者還是對初學者都沒有提供正確的解釋 非常感謝你,我得到了邏輯上的區別,但是爲什麼這種行爲如此重要?
我對Java EE 6的讀一本書,我會見了以下幾個部分:會話狀態
「無狀態:會話bean包含方法之間沒有會話狀態,任何 實例可以用於任何客戶端。「
「有狀態:會話Bean包含會話狀態,必須跨單個用戶的方法保留 。」
什麼是 「會話狀態」 是什麼意思?有人用真實世界的例子來解釋它嗎?
在此先感謝。
二,爲什麼豆類的分類如此重要?它無論是對於初學者還是對初學者都沒有提供正確的解釋 非常感謝你,我得到了邏輯上的區別,但是爲什麼這種行爲如此重要?
最基本的,「會話狀態」是指實例字段的值。
對於無狀態會話bean,容器並不能保證以後的方法調用將使用相同的EJB實例(從池),因此你不能想當然地認爲,當你調用一個bean的方法,你放置的價值觀,仍然會在那裏當你再次調用該方法(或bean的另一種方法)時。
對於有狀態會話Bean,後續調用將使用相同的EJB實例容器擔保,因此可以保持實例字段的值。
舉一個例子起見,假設你有一個具有增量()和檢索()方法的bean。增量增加存儲值,並檢索獲取當前存儲值。
對於一個無狀態會話bean,如果你調用increment()方法5次,不能保證當你做一個retrieve()時,你會得到一個5.它取決於EJB的容器將分配給您的電話。所以如果你被分配了一個新的EJB實例,那麼你會得到一個零。容器還沒有清理你的EJB實例也是可能的,所以有可能得到一個5,但不能保證。
對於有狀態會話bean,如果您調用increment方法5次,當您檢索值時,您將得到一個5.容器保證第一次調用時使用的EJB將用於所有隨後的調用。
一個會話狀態的一個真實世界的例子就是購物車。用戶可以逐個添加多個商品到購物車,然後致電結帳。所有增加的時間會在那裏
假設車是有狀態的,即它會保持會話狀態。
cart.add(item1); // suppose cart keep tracks of item by adding it to ArrayList
cart.add(item2);
cart.checkOut(); // at this stage both item1 and item2 would be there in ArrayList.
如果購物車是無狀態的,每次通話都將獨立於以前的通話,並且在結帳時它什麼也沒有。
關於你的第二點 的區別是必要的,因爲在這兩種豆類的行爲差異。維護狀態需要資源,因此有狀態bean不像無狀態bean那樣可伸縮。
至於問題的第二部分,從Java EE 6教程中,你可以閱讀以下內容:
當toUse會話Bean
如有以下狀態會話bean是適當的條件是真的。
- bean的狀態表示bean和特定客戶端之間的交互。
- bean需要在方法調用中保存有關客戶端的信息。
- bean在客戶端和應用程序的其他組件之間進行調解,向客戶端呈現簡化的視圖。
- 在幕後,bean管理幾個企業bean的工作流程。
要提高性能,可以選擇無狀態會話bean,如果它具有任何這些特性。
- 該bean的狀態沒有針對特定客戶端的數據。
- 在單個方法調用中,bean爲所有客戶端執行通用任務。例如,您可以使用無狀態會話bean發送確認在線訂單的電子郵件。
- 這個bean實現了一個web服務。
感謝您的時間和精力,如果你有時間你能解釋一下我的第二個II。題 ? – cscsaba 2011-03-01 14:08:23