我不知道......比方說,我在EJB 3.1 2個無狀態bean:@EJB的無狀態bean保證是唯一的ejb實例?
@Stateless Class1的
@EJB MyUniqueInstanceBean uniqueBean1;
2.
@Stateless
Class2
@EJB MyUniqueInstanceBean uniqueBean2;
是uniqueBean1和uniqueBean2保證是MyUniqueInstanceBean的唯一實例?
我不知道......比方說,我在EJB 3.1 2個無狀態bean:@EJB的無狀態bean保證是唯一的ejb實例?
@Stateless Class1的
@EJB MyUniqueInstanceBean uniqueBean1;
2.
@Stateless
Class2
@EJB MyUniqueInstanceBean uniqueBean2;
是uniqueBean1和uniqueBean2保證是MyUniqueInstanceBean的唯一實例?
如果MyUniqueInstanceBean是無狀態它不在你的手中,調用uniquebean1和uniquebean2實際調用同一個實例。在EJB 3.1規範這種雜糅了下面的話:
因爲無狀態會話bean的所有實例都是等價的, 容器可以選擇委託客戶端調用的方法,以任何 可用實例。這意味着,例如,容器可能會將來自同一個事務 中同一客戶端的請求委託給不同的實例,並且容器可能會將來自多個事務的請求 交織到同一實例。
如果MyUniqueInstanceBean是有狀態,可以保證uniquebean1和uniquebean2不是指同一個實例。再從規格:
當客戶端通過依賴 注入或JNDI查找獲得 參考有狀態會話bean實例的會話bean實例的生命開始時,或當客戶機調用創建的會話Bean的home方法接口。這會導致容器在會話bean類上調用newInstance以 創建一個新的會話bean實例。
如果您正在使用辛格爾頓,則都指向同一個實例,因爲只有一個實例:
一個單獨的會話bean是一個會話Bean組件,每個應用程序 實例化一次。在分佈在許多虛擬機上的容器爲 的情況下,每個應用程序將爲每個JVM擁有一個單一實例的 。
感謝您的澄清。我懷疑有狀態將保證Class1和Class2的唯一實例。 – user899757
當調用2個不同的無狀態bean的客戶端是同一個客戶端時,如何在2個不同的無狀態bean中使用相同的有狀態bean實例? – jch
1.編輯您的問題以便讓您的代碼格式化,並且在必要時不要忘記使用括號(MyUniqueInstanceBean是在Class1和Class2中注入的?)。 2.答案取決於你如何定義MyUniqueInstanceBean:答案是肯定的,當且僅當它是一個Singleton – perissf