2014-12-15 6 views
0

Я создаю платформу обмена документами под Java EE, JSF/Primefaces и спящий режим. Для каждого объекта данных (документ, репозитории и пользователей) я создал List<Event> events; для хранения различных событий (создание пользователей, модификация документов и т. Д.).Вызывает EJB внутри другого EJB здоровым?

Чтобы уважать многоуровневую архитектуру, у меня есть слой модели, где я определяю объекты данных, бизнес-уровень, где я определяю свои сеансовые компоненты (которые содержат логику) и уровень представления, где определены представления моего приложения.

Я создал сессионный компонент для каждого объекта данных, чтобы закодировать его обработку. Таким образом, у меня есть EventsSessionBean обрабатывать упорства и выборку событий до тех пор, как UserSessionBean, DocumentSessionBean и т.д.

При создании пользователя, например, мне нужно, прежде чем сохраняться UserCreated события в базе данных. Следовательно, я должен назвать метод public Event createEvent(String label); в 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; 
} 

Это неправильно думать, что UserSessionBean при работе с событиями действует на то, что находится вне его сферы?

+0

Это абсолютно здорово. –

+0

Имея только отредактированное описание кода, невозможно сказать, здорово или нет. Разумеется, совершенно нормально вызывать EJB из EJB (на самом деле - вы должны), но это не значит, что любой код, который у вас есть, делает правильные вещи. – Gimby

+0

@Gimby, что вы думаете? – Hichamov

ответ

1

В этом нет ничего плохого, это обычная практика. Еще один подход (погода может быть применена или не зависит от ваших требований и бизнес-логики) будет иметь очередь сообщений (MQ), которую вы использовали бы для таких задач. Например, ваш UserSessionBean добавит сообщение в очередь, когда пользователь будет создан, а некоторые message driven bean (MDB) получит это сообщение и вызовет EventSessionBean, чтобы сохранить это событие.

Но, как я уже сказал, это зависит от вашего требования, если это можно использовать хорошо или нет.

+0

Большое спасибо. Мои требования довольно свободны, я буду смотреть на подход MDB (никогда не с одним сотрудником) – Hichamov

Смежные вопросы