【发布时间】:2014-10-28 13:22:15
【问题描述】:
有没有办法获得对@SessionScoped bean 的引用并从@ApplicationScoped bean 调用它的方法?
BeanManager.getContext() 在请求期间有效,但在请求之外看起来却不起作用。我在GlobalHttpSessionController 中保留了一个活动的 HttpSessions 列表,但这似乎没有任何帮助。谢谢你们的cmets。
@ApplicationScoped
public class MyAppScopedClass {
@Inject
GlobalHttpSessionController globalHttpSessionController;
@Inject
BeanManager beanManager;
public void updateSessions() {
// List of active user sessions
List<HttpSession> session = globalHttpSessionController.getSessions();
Set<Bean<?>> set = beanManager.getBeans(UserSessionBean.class);
for (Bean bean : set) {
((UserSessionBean) beanManager.getContext(bean.getScope()).get(bean, beanManager.createCreationalContext(bean))).method();
}
}
}
【问题讨论】:
-
我可以看到你想要做什么。如果您的应用程序分布在两台或多台服务器上,您是否考虑过这将如何正常工作?
-
我知道这不会扩展。是的,我正在尝试以某种方式实现全局事件。
-
你可以试试javax.enterprise.event中的Java EE事件处理机制。
-
@SteveC,很遗憾,CDI 事件从 ApplicationScoped 到 SessionScoped 不起作用。