2012-04-27 138 views
1

我想處理一個登錄的情況如下:從無狀態Bean返回有狀態的Java Bean?

  1. 客戶端連接到一個無狀態的Java Bean(SLJB),並試圖登錄;
  2. 如果登錄成功,SLJB向用戶返回有狀態Java Bean(SFJB),以便客戶端可以繼續使用該應用程序。

我目前在做第二個步驟爲:

return new StatefulBean(some params); 

這是做正確的方式?它似乎並不在我身上,因爲我得到的例外:

Class org.eclipse.persistence.internal.jpa.EntityManagerImpl is not Serializable 

當運行我的應用程序,我認爲它涉及到描述的方法。

將SLJB的引用返回給客戶端的正確方法是什麼?

回答

3

首先,這是完全錯誤的:

new StatefulBean(some params) 

EJB容器負責創建和銷燬bean的實例,你永遠不應該手動創建它們。

在你的場景中,我會反轉這個流程:客戶端連接到可能無狀態會話bean的狀態bean作爲助手。不需要傳遞bean,客戶端總是使用相同的bean。

+0

問題是這就是我的要求是如何制定的;有沒有辦法使用指定的工作流程? – adrianp 2012-04-27 18:27:43

+0

@adrianp也許你的要求應該不會被這樣制定? – 2012-04-27 20:06:39

1

正如Tomasz所言,您可能需要重新思考您的流程。這就是說,通過使用我們在啓動時分配給每個bean的可移植JNDI名稱執行JNDI查找,您可以獲得新的有狀態實例。