Шаблон, который вы используете, кажется, не имеет большого смысла.Не должно быть проблем с внедрением EJB-компонентов в bean-объект области видимости.
В зависимости от типа используемого EJB-компонента (без сохранения состояния, с сохранением состояния или синглтоном) удерживаются разные вещи.
Если userService и emailService не имеют состояния (они, скорее всего, должны быть), вы ничего не получите, используя бин, который сначала вводится в бин области приложения.А именно, внедряется не сам бин, а прокси-сервер, и каждый запрос к нему в любом случае направляется к другому реальному экземпляру бина (см. http://en.wikipedia.org/wiki/Enterprise_JavaBean#Stateless_Session_Beans).
Если userService и emailService с состоянием, вы получаете одинпример, но я очень сомневаюсь, что вам нужно делиться фактическими данными между каждым пользователем в вашем приложении. Но даже если вы этого захотите, только один пользователь (поток) может одновременно получить доступ к бину с отслеживанием состояния.
Еслиэти сервисы одноэлементные, вы можете просто сразу внедрить их в bean-объект области видимости. Абсолютно нет причин использовать bean-объект приложения.
Кроме того, ServicesUtil.getUserService()
является статическим методом, поэтому использование этогополучить внедренную услугу хрупко. Если вы хотите использовать это (не следует, но предположим), ServicesUtil
следует ввести в UserHandler
.
Тогда, похоже, вы путаете CDI и JSFУправляемые компоненты. Я согласен, что это сбивает с толку, но в настоящее время так оно и есть. @ViewScoped
не работает в комбинации с компонентами CDI. От вашей трескиНеясно, является ли @ManagedBean
вариантом JSF или вариантом Java EE / CDI.В этом случае это должно быть javax.faces.bean.ManagedBean
, если вы хотите использовать область просмотра.