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

时间:2014-12-15 13:24:05

标签: java hibernate jsf java-ee primefaces

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

为了尊重分层体系结构,我有一个模型层,我在其中定义数据对象,一个业务层,我定义我的会话bean(包含逻辑)和表示层,其中定义了我的应用程序的视图。

我为每个数据对象创建了一个Session bean来编码它的处理。因此,只要EventsSessionBeanUserSessionBean等,我就有DocumentSessionBean来处理事件的持久性和提取。

例如,在创建用户时,我需要先在数据库中保留UserCreated事件。因此,我必须在public Event createEvent(String label);的{​​{1}}中调用方法UserSessionBean

这是一种“健康”的编码方式吗?我担心我的豆子之间会有责任。

代码段:

EventsSessionBean

认为//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; } 在处理事件时是否采取了超出其范围的事情,这是错误的吗?

1 个答案:

答案 0 :(得分:1)

这没有错,这是常见的做法。另一种方法(可以应用或不应用的天气取决于您的要求和业务逻辑)将具有您将用于此类任务的消息队列(MQ)。例如,您的UserSessionBean会在创建用户时向队列添加消息,而某些message driven bean (MDB)会收到该消息,并调用EventSessionBean来保留该事件。

但是,正如我所说,这取决于你的要求是否可以很好地使用。