簡體   English   中英

sessionscoped托管bean與有狀態ejb

[英]sessionscoped managed bean vs stateful ejb

如果我的@ManagedBean@SessionScoped ,為什么我會使用@Stateful EJB? 我之前用過購物車並保持會話狀態,但由於托管bean將在用戶會話期間保存,我可以在那里存儲狀態,然后調用SLSB以獲取業務邏輯。 那是對的嗎? 如果是,那么有狀態的ejbs將留給更具體的應用程序,例如何時需要交易等?

通常,無狀態會話bean可用於許多業務問題。

有狀態並不一定意味着只有遠程服務器保持狀態,盡管這肯定是其中一個選項。 遠程Swing客戶端可以首先將一堆數據發送到有狀態會話bean,保留存根,然后發送一些操作此數據的命令。 這使客戶端不必每次都發送相同(大量)的數據。

在遠程用例中,當使用Web客戶端(瀏覽器)時,它確實在某種程度上反映了HTTP會話的使用。 主要區別在於會話是每個bean,而在HTTP會話中,會話是許多bean共享的范圍。 由於HTTP會話基於cookie,並且cookie對於整個瀏覽器的域是全局的,因此HTTP會話不能直接支持來自同一客戶端的多個會話(例如,每個選項卡或每個窗口)。 這對於有狀態會話bean來說是微不足道的。

然而...

與遠程EJB通信的遠程Swing客戶端並不常見。

在您在問題中描述的上下文中,您通常會使用本地EJB,並且您將在HTTP會話中存儲大多數狀態(小心共享!)以及這些日期在視圖范圍或會話范圍中。

那么,最后,何時在這種情況下使用有狀態會話bean?

一個重要的用例是JPAextended persistence context 通常使用事務范圍的實體管理器,當實體跨越EJB方法調用的事務邊界時,它將被分離。 如果您希望(樂觀地)在用戶交互之間鎖定實體,這是不可取的。 你將失去鎖定。

使用擴展的持久性上下文,當您從調用有狀態會話bean返回時,實體保持連接並且鎖有效。 這對預覽功能非常有用,以確保在預覽后沒有其他人對實體進行任何更改。 或者對於購物車而言,您確實要確保該物品在購物車中不能出售給其他任何人。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM