簡體   English   中英

會話bean如何工作?

[英]How does a session bean work?

假設我在應用程序中部署了一個有狀態會話Bean。 在我的客戶端應用程序中,我嘗試在JNDI的幫助下使用此會話bean。 在獲得bean的存根(而不是實際bean本身)並初始化了bean的某些字段之后,我嘗試使用JNDI第二次獲取該bean。

那么我將從應用程序服務器獲得什么bean? 是兩次相同的bean,還是我將使用bean的第二個實例? 如果我將兩次獲得相同的bean,如何從應用程序服務器中獲得同一bean的兩個不同實例? 我只是對bean本身感到困惑。 如果可能,請提供一些資源。

假設您通過JNDI獲得了對遠程bean實例的引用。 現在,讓我們說,你調用的遠程豆,兩個業務方法methodAmethodB

有狀態和無狀態Bean之間的(主要)區別是:

  • 如果你的bean是無狀態的,則methodAmethodB 但不保證完全相同的bean實例在服務器端運行。
  • 如果你的bean是有狀態的,則methodAmethodB保證完全相同的bean實例在服務器端運行。

從客戶端方面,請注意,您所擁有的只是對服務器端一個晦澀對象的引用。 在那個“存根”上調用多個方法-即使它是同一個存根對象-也不保證您將在服務器端處理完全相同的對象, 除非您的bean是有狀態的。

現在,更具體地說,是您的問題。 您說您在服務器上部署了一個有狀態的bean,並且通過JNDI獲得了對bean實例的引用。 為此,必須在EJB的home接口上使用create方法。 create方法向您返回了一個存根,該存根映射到服務器端的一個實例。

下次您在home接口上調用create時,將在服務器端得到一個指向不同 bean的不同存根。

如果要保持對上一個bean的訪問,則需要以某種方式保留對該遠程對象的引用。

  • 如果您使用的是EJB 2.x,則不應將存根“緩存”在任何地方。 相反,獲取對Bean句柄的引用,並將該句柄存儲在某處。
  • 如果使用的是EJB 3.x,則只需存儲對存根的引用。

有狀態會話Bean是企業Bean(EJB組件),充當使用它的客戶端的服務器端擴展。 有狀態會話Bean由客戶端創建,並且僅對該客戶端有效,直到客戶端連接斷開或顯式刪除該Bean。

這意味着,對於相同的客戶端,無論您打算從服務器獲取多少次,都必須返回相同的實例。 否則,您將無法依賴狀態。

另請參閱Oracle文檔

暫無
暫無

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

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