2014-12-05 47 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