Java 在另一个EJB中调用EJB是否健康?
我正在JavaEE、JSF/Primefaces和hibernate下创建一个文档共享平台。对于每个数据对象(文档、存储库和用户),我创建了一个Java 在另一个EJB中调用EJB是否健康?,java,hibernate,jsf,jakarta-ee,primefaces,Java,Hibernate,Jsf,Jakarta Ee,Primefaces,我正在JavaEE、JSF/Primefaces和hibernate下创建一个文档共享平台。对于每个数据对象(文档、存储库和用户),我创建了一个事件列表以存储各种事件(用户创建、文档修改等) 为了尊重分层体系结构,我有一个定义数据对象的模型层、一个定义会话bean(包含逻辑)的业务层和一个定义应用程序视图的表示层 我为每个数据对象创建了一个会话bean来编码其处理。因此,我有一个EventsSessionBean来处理事件的持久性和获取,只要UserSessionBean,DocumentSes
事件列表代码>以存储各种事件(用户创建、文档修改等)
为了尊重分层体系结构,我有一个定义数据对象的模型层、一个定义会话bean(包含逻辑)的业务层和一个定义应用程序视图的表示层
我为每个数据对象创建了一个会话bean来编码其处理。因此,我有一个EventsSessionBean
来处理事件的持久性和获取,只要UserSessionBean
,DocumentSessionBean
等
例如,在创建用户时,我需要在创建之前将UserCreated
事件保存在数据库中。因此,我必须调用方法public Event createEvent(字符串标签)来自EventsSessionBean
的UserSessionBean
中的code>
这是一种“健康”的编码方式吗?恐怕我的责任混淆了
代码段:
//Class definition
@PersistenceContext
private EntityManager em;
@EJB
private EventSessionBeanLocal eventService;
public static final String EVENT_USER_CREATION = "UserCreated";
public RepositoryOwner createRepositoryOwner(/* username, email, ..etc*/){
Event event = eventService.createEvent(EVENT_USER_CREATION);
RepositoryOwner newUser = new RepositoryOwner();
LinkedList<Event> events = new new LinkedList<>();
events.add(event);
newUser.setEvents(events);
//Set other user attributes
newUser = em.merge(newUser);
return newUser;
}
//类定义
@持久上下文
私人实体管理者;
@EJB
private EventSessionBeanLocal eventService;
公共静态最终字符串事件\u USER\u CREATION=“UserCreated”;
public RepositoryOwner createRepositoryOwner(/*用户名、电子邮件等*/){
Event-Event=eventService.createEvent(事件\用户\创建);
RepositoryOwner newUser=新RepositoryOwner();
LinkedList事件=新建LinkedList();
事件。添加(事件);
newUser.setEvents(事件);
//设置其他用户属性
newUser=em.merge(newUser);
返回新用户;
}
当处理事件时,认为UserSessionBean
作用于超出其范围的事情是错误的吗?这没什么错,这是常见的做法。另一种方法(是否可以应用它取决于您的需求和业务逻辑)是使用消息队列(MQ),您可以将其用于此类任务。例如,在创建用户时,UserSessionBean
会向队列中添加一条消息,有些人会得到该消息,并调用EventSessionBean
来持久化该事件
但是,正如我所说的,这取决于您的要求,这是否可以很好地使用。这是完全健康的。只有对代码进行了修订的描述,就不可能说实际执行的操作是否健康。当然,从EJB内部调用EJB是完全可以的(事实上,您应该这样做),但这并不意味着您拥有的任何代码都在做正确的事情。@Gimby您怎么看?@Hichamov Flat简单代码,可读性强,能够以可重用的方式正确地分离关注点。我不明白你为什么怀疑眼前的事情。我最关心的是我每一颗豆子的责任。在这个问题上,我很容易想到,UserSessionBean
正在处理超出其范围的事件创建。我的要求非常宽松,我将研究MDB方法(从不使用MDB)