![](/img/trans.png)
[英]How does the session scope of a bean work in a Spring MVC application?
[英]How does a session bean work?
假設我在應用程序中部署了一個有狀態會話Bean。 在我的客戶端應用程序中,我嘗試在JNDI的幫助下使用此會話bean。 在獲得bean的存根(而不是實際bean本身)並初始化了bean的某些字段之后,我嘗試使用JNDI第二次獲取該bean。
那么我將從應用程序服務器獲得什么bean? 是兩次相同的bean,還是我將使用bean的第二個實例? 如果我將兩次獲得相同的bean,如何從應用程序服務器中獲得同一bean的兩個不同實例? 我只是對bean本身感到困惑。 如果可能,請提供一些資源。
假設您通過JNDI獲得了對遠程bean實例的引用。 現在,讓我們說,你調用的遠程豆,兩個業務方法methodA
和methodB
。
有狀態和無狀態Bean之間的(主要)區別是:
methodA
和methodB
的 , 但不保證完全相同的bean實例在服務器端運行。 methodA
和methodB
保證是完全相同的bean實例在服務器端運行。 從客戶端方面,請注意,您所擁有的只是對服務器端一個晦澀對象的引用。 在那個“存根”上調用多個方法-即使它是同一個存根對象-也不保證您將在服務器端處理完全相同的對象, 除非您的bean是有狀態的。
現在,更具體地說,是您的問題。 您說您在服務器上部署了一個有狀態的bean,並且通過JNDI獲得了對bean實例的引用。 為此,必須在EJB的home接口上使用create
方法。 create
方法向您返回了一個存根,該存根映射到服務器端的一個實例。
下次您在home接口上調用create
時,將在服務器端得到一個指向不同 bean的不同存根。
如果要保持對上一個bean的訪問,則需要以某種方式保留對該遠程對象的引用。
有狀態會話Bean是企業Bean(EJB組件),充當使用它的客戶端的服務器端擴展。 有狀態會話Bean由客戶端創建,並且僅對該客戶端有效,直到客戶端連接斷開或顯式刪除該Bean。
這意味着,對於相同的客戶端,無論您打算從服務器獲取多少次,都必須返回相同的實例。 否則,您將無法依賴狀態。
另請參閱Oracle文檔 。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.