2014-09-12 72 views

回答

2

節6.6.3。 (鈍化能力的依賴關係)CDI規範指出,無論您聲明無狀態bean是否可序列化,容器都保證無狀態bean是鈍化功能。

規範的第6.6.5節指出,如果鈍化作用域(例如,'@SessionScoped')聲明依賴於非鈍化能力依賴關係,則會在部署時發生錯誤。

容器如何處理重新激活依賴於實現。當代理被反序列化時,它可以使無狀態bean可序列化,或者可序列化的代理和對bean的引用。

+0

>當對代理進行反序列化時,對bean的引用被更新了 - 我還沒有調查過每一個EJB實現代理,但從概念上講,我不認爲代理擁有對實際無狀態bean的引用,而只是從池中獲取它的代碼。也就是說,對同一個代理的每個其他調用都可能會轉到不同的bean實例,因此代理保留對特定實例的引用沒有多大意義。 – 2014-09-13 10:05:32

2

添加到maress的答案;因爲一個無狀態bean實際上是無狀態的客戶端,所以容器不一定需要序列化任何東西。

對無狀態bean的任何其他調用都可以轉到不同的bean實例,或者其他任何調用都可以創建新的bean實例(如果我沒有弄錯,這是WildFly 8中的默認行爲)。

正如Maress提到的那樣,技術上可以使代理可序列化,但代理通常不會從系統範圍池(可以爲零大小)獲取實際bean *並將所有方法調用委託給該代理。

*)作爲技術細節;代理可能不會直接調用實際的bean,而是調用實際實際Bean之前的攔截器鏈。

相關問題