Jsf 从MDB激发的CDI事件不应在SessionScoped bean中捕获

Jsf 从MDB激发的CDI事件不应在SessionScoped bean中捕获,jsf,events,timer,ejb,cdi,Jsf,Events,Timer,Ejb,Cdi,从EJB计时器触发的CDI事件有问题 关键是,save事件可以通过手动用户操作触发(例如,从CDI SessionScoped bean方法触发)。在这种情况下,所有注册的观察者都应该捕捉到它。但是,如果从计时器触发的CDI事件被SessionScoped bean捕获(这无论如何都不是必需的),则会抛出一个异常,无法找到活动上下文 所以。。。如果事件是由EJB计时器触发的,我如何告诉CDI事件机制只有应用程序处理的bean才能捕获该事件?使用此stackoverflow帖子中描述的限定符: (

从EJB计时器触发的CDI事件有问题

关键是,save事件可以通过手动用户操作触发(例如,从CDI SessionScoped bean方法触发)。在这种情况下,所有注册的观察者都应该捕捉到它。但是,如果从计时器触发的CDI事件被SessionScoped bean捕获(这无论如何都不是必需的),则会抛出一个异常,无法找到活动上下文


所以。。。如果事件是由EJB计时器触发的,我如何告诉CDI事件机制只有应用程序处理的bean才能捕获该事件?

使用此stackoverflow帖子中描述的限定符:

(不确定它是否真的是重复的,但我想是的)

我找到了解决方案

@Observes包含参数“notifyObserver”。如果您将其设置为receivement.If_存在,CDI将不会在HTTP请求之外创建SessionScoped bean(如果没有)

因此,EJB计时器触发的事件不会被SessionScoped bean捕获(因为它不存在),而手动触发的事件将被捕获,因为SessionScoped bean存在一个实例