2013-09-22 86 views
0

每當我讀到ejb使用的客戶端時,我不明白他們認爲客戶端是什麼。ejb客戶端的生命週期java ee 7

對於ejb,客戶的壽命是多少?這取決於如何獲得bean引用,如jndi或注入。

它是否對齊到一個http會話,如果是的話這與jndi有什麼關係?

客戶端會話何時以ejb開始和結束,具體取決於獲取參考的方式?

根據是否從java ee 7容器調用se來改變嗎?

編輯:我想我應該更具體。有狀態會話bean維持狀態,但在什麼情況下維護狀態。例如,如果我獲得了參考,是否僅在由該參考創建的呼叫之間保持狀態?

此外,會話的概念以及在所有類型的ejbs中如何考慮獨特的客戶端?

感謝:-)

回答

2

會話bean的客戶端是通過注入或通過JNDI查找獲取對會話bean的引用的任何對象。客戶端的生存時間不依賴於引用的會話bean。客戶端擁有自己的,以某種方式管理的生命週期,會話bean擁有自己的獨立生命週期。會話bean的生命週期取決於其類型。有三種類型的會話bean:

@Singleton bean生命週期非常簡單,只有一個bean在應用程序的整個生命週期中被實例化。

@Stateful豆住,只要它的客戶的生活,所以它的壽命我的變化。那麼,由於鈍化機制,這在技術上並不正確,但從開發人員的角度來看,您可以認爲這是事實。

的應用服務器創建的部署時間@Stateless豆池。創建的實例分佈在許多客戶端,並由不同的客戶重複使用。這裏重要的是,只有一個客戶端可以使用一個bean實例。

1

我會盡力給你我的這個它來自於與EJB(即使不深)工作的意見,我想有來自其他用戶的反饋建設性。 會話有兩種風格:ejb會話和「其他」(客戶端)會話。 客戶端是指查找並使用您提供的遠程接口的任何實體,也可能是本地接口,在這種情況下,客戶端和ejb在同一個JVM中運行。

ejb會話是指由EJB容器管理的會話。 不管是否被調用,當你的statefull ejb被查找並創建時,會話開始,當然這發生在服務器端。 ejb有特定的方式來註釋會話的持續時間。在此會話過期後,您無法再訪問此類EJB實例,因此客戶端不會再引用服務器中的某些內容。

另一方面,客戶端擁有自己的會話,它獨立於EJB會話,除非您希望兩者相關。假設您的EJB正在管理您的客戶端的登錄名,在ejb超時之後,您的客戶端將不再被記錄。但這並不意味着你的客戶端會話超時,可能會話更長。

想想擁有一個具有表示層和邏輯層的2層體系結構。通過jsf進行演示,這些演示具有自己的會話管理概念,並通過EJB在不同的服務器上實現自己的會話管理。

你希望兩個會話是相互關聯的,但它們並不相同。您可以設法在ejb超時後終止http/Servlete會話,但它們處於兩種不同的環境中,並且與兩種不同的事情有關。