2010-08-27 303 views
4

我已經閱讀了關於有狀態和無狀態會話bean的各種書籍以及它們如何工作。我想知道這些ejbs和使用普通java類的真正用途。基本上你什麼時候去尋找無國界的ejbs,你什麼時候去尋找有狀態的ejbs。我想要一個實時應用程序。EJB無狀態會話bean和有狀態會話bean

+0

你是指無狀態和有狀態的ejb之間的區別? – mhshams 2010-08-27 19:08:12

+0

@shamsi不完全,但沒有理論答案。 – 2010-08-27 19:12:09

+0

[Stateless and Stateful Enterprise Java Beans]可能的重複(http://stackoverflow.com/questions/2351220/stateless-and-stateful-enterprise-java-beans) – 2010-08-28 02:24:58

回答

10

這些類型的ejbs的使用通常在服務層作爲服務類。

EJB3無狀態和有狀態Bean實際上是POJO(有一些註釋),他們沒有與普通類的任何大的差別。

但在使用的術語,他們有一定的能力,你不能在正常上課找到像:

  • 它們可以被遠程調用(RMI例如協議)。
  • 他們可以使用應用程序服務器上下文資源,如數據庫連接和事務。

無狀態或有狀態: - 如果一個任務或進程可以在一個單一步驟中進行(通過一個方法調用)無狀態就像是一個認證過程 正確的選擇 - 如果任務需要一系列的方法調用(多於一個),並且您需要保留先前的結果以在下次調用中使用它們,然後進行有狀態。 像一個裝運過程(選擇項目,添加/刪除,然後做交易)

http會話或有狀態?

EJB可以在應用程序服務器提供服務,他們可能像一個正常的Swing應用程序或者......不同類型的客戶,這樣你就可以在HTTP會話在這些情況下,不中繼。

如果你的應用服務器和Web服務器是不同的(分佈式)它不是好主意,將數據保存在HTTP會話和合格/從應用服務器(網絡開銷)getback到/。

+1

保持狀態,我們可以使用http會話 – 2010-08-27 19:29:27

+0

@Suresh:是的,這也是事實,它取決於你選擇正確的地方來保持國家。 – mhshams 2010-08-27 19:33:23

+0

你什麼時候去http會話vs有狀態也是無狀態的 – 2010-08-27 19:37:07

1
  • 無狀態會話bean很輕便:它們不存儲有關特定用戶的信息。它們通常以靜態方式使用。例如,客戶端要求產品信息將與無狀態會話bean進行通信。 (「你要的產品‘YXZ’的價格,在這裏你去!」)然而

  • 有狀態會話bean記得是客戶信息。它們包含有關用戶操作的數據。例如,讓我們說一個用戶通過購物車。這些步驟將存儲在有狀態的會話bean中(例如,在付款步驟用戶)。


你真的需要在任何網站類型都是會話bean。除非你的網站是如此基本,以至於無狀態會話bean(真正的只讀網站)可以完成任何事情。

任何網站,跟蹤通過cookies用戶,將需要有狀態會話bean。但請注意,您可以決定在會話bean中放入很少的會話信息,並將該信息存儲在數據庫中。但是你仍然需要一些會話管理。

+0

我已經閱讀過無處不在。但是我想知道你什麼時候會喜歡,以及使用它們的經驗。 – 2010-08-27 19:14:30

+1

我們可以使用httpsession來維護客戶端狀態。 – 2010-08-27 19:23:09

0

開發商寧願保持在現代企業應用程序的Web層的狀態。我從來沒有見過使用有狀態會話Bean的真實世界Web應用程序。這也是一個可擴展性問題。

0

一個示例是一個購物車有狀態會話bean,用於跟蹤客戶的產品選擇並在需要時執行銷售。