我的问题是架构与 EJB 3.0及更高版本相关的多层应用程序。
背景:您认为通过会话外观将数据从数据库传递到表示层的最佳解决方案是什么?分离的实体类将为我提供一个有吸引力的解决方案,但在这种情况下,它们应在会话外观方法中指定为参数类型。因此,还应将enity类作为要连接到会话Facade的jar提供给表示层或任何其他客户端。不知怎的,我不觉得这是正确的方式,因为它们包含更多的表示层应该知道,但我不确定,因为它们是分离和轻量级的类,并代表关系,也包含相关的类的集合,可以使用传输对象来重新编写它们。
问题: Pre-EJB 3.0,在enity bean时代,数据应该在Transfer Objects中重新包装,而Transfer Object Assembler设计pattarn也可以用于构建复合体用于建模nm或1-n关系的数据结构。但是,实体类的重量更轻,我们可以省去这种重新排序。 您建议将数据提供给表示层,您通常如何做?
非常感谢您的回复。亲切的问候,Tamas
答案 0 :(得分: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(有状态,无状态或单例)中访问您的实体类数据,那么您将必须管理EJB中的实体并填充它们/找到它们/ perist it /使用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);
}
}
把它想象成一个堆栈:从托管bean到会话bean到实体的Web页面 希望它能帮助