Я разрабатываю приложение, использующее поток JSF для управления виртуализованной деятельностью, которая может быть запущена зарегистрированным пользователем.Внедрение FlowScoped bean в веб-службу REST на Джерси
Одна страница потока нуждается в пользовательском JavaScript-коде, написанном в AngularJS, поэтому я создал небольшую службу REST Джерси для обмена данными между AngularJS и компонентом (очевидно, услуга должна вызываться только тогда, когда пользователь использует эту страницу потока) ,
Внутри службу мне нужен боб FlowScoped, но если я пытаюсь сделать
@Path("rest")
@RequestScoped
public class MyResource {
@Inject
MyFlowScopedBean myFlowScopedBean;
// ...
}
следующим исключение отбрасывается:
exception java.lang.NullPointerException at com.sun.faces.flow.FlowCDIContext.getCurrentFlow
Итак, я использую сеанс контекстного боб связанный пользователю для извлечения бина с использованием следующего обходного пути:
@Named
@FlowScoped("myFlow")
public class MyFlowScopedBean {
@Inject
UserDataBean userDataBean;
@PostConstruct
public void init() {
userDataBean.setMyFlowScopedBean(this);
}
// ...
}
@Named
@SessionScoped
public class UserDataBean {
private MyFlowScopedBean myFlowScopedBean;
public getMyFlowScopedBean() {
return myFlowScopedBean;
}
public setMyFlowScopedBean(MyFlowScopedBean myFlowScopedBean) {
this.myFlowScopedBean = myFlowScopedBean;
}
// ...
}
@Path("rest")
@RequestScoped
public class MyResource {
@Inject
UserDataBean userDataBean;
private MyFlowScopedBean getMyFlowScopedBean() {
return userDataBean.getMyFlowScopedBean();
}
// ...
}
Есть ли лучшее способ сделать это? И, что более важно, следует ли мне это делать или я нарушаю некоторые лучшие практики/соглашения?
(я развертывание на Glassfish 4.1)
Спасибо!
JAX-RS и JSF - полностью независимые каркасы, имеющие свои разные цели и не могут взаимодействовать друг с другом в любом случае на стороне сервера. Дизайн проваливается и может потребоваться пересмотреть. – Tiny
Я видел различные примеры CDI и Rest services mixed (также в книге JBoss Weld есть заключительная глава, посвященная AngularJS). Мне нужна только одна страница моего потока, используя JavaScript + REST вместо подхода JSF. – xonya