2014-12-05 49 views
0

我的問題是架構連接EJB 3.0及更高版本與多層應用程序。演示層中的Enity類?

背景:你認爲什麼是最好的解決辦法是通數據從數據庫在會話外觀給表示層?分離的實體類將爲我提供有吸引力的解決方案,但在這種情況下,它們應該在會話外觀方法中指定爲參數類型。因此,還應該將表示層或任何其他客戶端的enity類作爲想要連接到會話外觀的jar。不知怎的,我不覺得這是正確的方式,因爲他們包含更多的表現層應該知道,但我不確定,因爲他們是分離和輕量級的類,也代表了關係,也包含相關的集合類可以節省傳輸對象的大量工作來重新包裝它們。

問:預EJB 3.0,在enity豆的時代,數據應該已經在傳輸對象重新包裝和傳輸對象彙編程序設計pattarn也可能被用於構建複雜的數據結構建模nm或1-n關係。然而,實體類更輕,我們可以避免重新包裝。 你打算如何將數據提供給表示層,你通常如何做?

非常感謝您的回覆。親切的問候,Tamas

+0

爲什麼不走了分層架構:模型(實體) - 服務/業務(EJB3) - 控制器(類似JSF託管的bean) - 演示 – Hichamov 2014-12-05 09:42:58

+0

嗨Hichamov,感謝您的快速響應。你能否提供一些細節?有了這個解決方案,也應該以某種方式從實體獲取數據到控制器/ JSF。或者我誤解你的建議。再次感謝,Tamas – Tamas 2014-12-05 09:47:51

+0

由於我給了更多的細節,我寫了一個答案。 – Hichamov 2014-12-05 10:09:42

回答

1

好的,所以我會基於我的JSF經驗回答。首先在模型層中創建實體,然後在服務層中創建EJB,以訪問實體管理器中的實體(持久性上下文:https://docs.oracle.com/html/E13981_01/usclient005.htm)。在JSF的情況下,每個服務器頁面(.xhtml)都具有對託管bean的訪問權限(如下所示:http://docs.oracle.com/javaee/6/tutorial/doc/bnaqm.html)。託管bean可以訪問EJB(請看這裏的CalculatorBean:http://tomee.apache.org/examples-trunk/jsf-managedBean-and-ejb/README.html)。

這樣你就有了一個非常好的分層架構,鬆耦合和更容易維護。但請記住,我只是回答JSF環境。

編輯

如果你的意思是如何訪問EJB的(有狀態,無狀態或singleton)的實體類的數據,那麼你將有機會管理EJB的實體和填充他們/找到他們/ perist他們/使用一個EntityManager

EJB例如更新它們:

@Stateless

public class EmployeeDemoSessionEJB implements EmployeeDemoSession

{

  @PersistenceContext 

     EntityManager em; 

     public void createEmployee(String fName,String lName){ 

         Employee e = new e(); 

         e.setFirstName(fName); 

         e.setLastName(lName); 

         em.persist(e); 
     } 

}

認爲它像一個堆棧:Web頁面管理的bean會話bean實體 希望對大家有所幫助

+0

嗨Hichamov,再次感謝您的迴應。我已經瀏覽了您發佈的鏈接,並且還爲答案添加了讚揚詞。但是,這並不回答原來的問題。
使用CalculatorBean示例,原始問題是,如何通過會話Bean(SessionFacade,在我的情況下)檢索數據,並在您的示例中進行添加。如果您使用實體類作爲最適合的方法參數,則表示層即使用會話bean實例的類也必須知道與數據庫相關的實體類。 – Tamas 2014-12-06 13:06:08