gpt4 book ai didi

java - 在另一个 EJB 中调用一个 EJB 是否健康?

转载 作者:行者123 更新时间:2023-12-01 12:07:20 25 4
gpt4 key购买 nike

我正在 Java EE、JSF/Primefaces 和 hibernate 下创建一个文档共享平台。对于每个数据对象(文档、存储库和用户),我创建了一个 List<Event> events;存储各种事件(用户创建、文档修改等)。

为了尊重分层架构,我有一个模型层,用于定义数据对象,一个业务层,用于定义 session bean(包含逻辑),以及表示层,用于定义应用程序的 View 。

我为每个数据对象创建了一个 session bean 来对其处理进行编码。所以我有一个EventsSessionBean处理事件的持久化和获取只要 UserSessionBean , DocumentSessionBean等等

例如,在创建用户时,我需要保留 UserCreated之前数据库中的事件。因此,我必须调用方法 public Event createEvent(String label);UserSessionBean来自EventsSessionBean .

这是一种“健康”的编码方式吗?我担心我的职责混杂在我的 bean 之间。

代码片段:

//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;
}

这样认为UserSessionBean是错误的吗?处理事件时正在处理超出其范围的事情?

最佳答案

这没有什么问题,这是常见的做法。另一种方法(是否可以应用它取决于您的需求和业务逻辑)是拥有一个用于此类任务的消息队列 (MQ)。例如,您的 UserSessionBean 会在创建用户时向队列添加一条消息,以及一些 message driven bean (MDB)将获取该消息,并调用 EventSessionBean 来持久化该事件。

但是,就像我说的,这个能用好不好,就看你的需求了。

关于java - 在另一个 EJB 中调用一个 EJB 是否健康?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27485111/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com