Я разрабатывал свое первое приложение Java EE, в котором есть несколько классов сущностей JPA, каждый из которых имеет соответствующий класс EJB для работы с бизнес-логикой. Что я сделал, так это изменил один из этих bean-компонентов с Stateless на SessionScoped, так что я могу использовать его, чтобы позволить пользователю работать с последовательностью полей формы, все из которых отображаются в форме JSF.
Однако я начинаю думать, что это явно неправильно, поскольку я делаю такие вещи, как реализация методов, таких как "submitStep1" и "goBackToStep2", в моем EJB. Эти методы устанавливают индикаторы, которые используются элементами рендеринга различных тегов на странице JSF, поэтому они представляют собой «логику представления».
Мой вопрос: как мне реструктурировать мой код? Я думаю, что у меня должен быть только один компонент SessionScoped (или это должно быть с состоянием?), Который имеет дело с логикой представления моей страницы JSF и может использовать все другие ejbs (и, соответственно, мои классы JPA). Этот bean-компонент будет находиться на уровне представления моего приложения, а это означает, что для уровня бизнес-логики не потребуются Session Bean Scope Scoped.
Теперь все это имеет смысл для меня, и это то, что я, вероятно, собираюсь сделать. Однако причина моего вопроса в том, что на моих страницах JSF xhtml я часто использую теги JSF EL для ссылки на содержимое EJB. Есть ли какие-либо подводные камни, связанные с JPA, на которые нужно обратить внимание при написании классов уровня презентации?
Я знаю, что мой вопрос довольно расплывчатый и не имеет отношения к конкретному примеру. И хотя я узнал довольно много о бинах Stateful v Stateless на этом и других сайтах, я просто хочу знать, что моя предполагаемая структура - лучшая.