@Observes在sessionscoped bean中?

nog*_*awa 2 events cdi java-ee-6 observer-pattern

以下情况可能吗?

"SessionService"是一个无状态EJB,它触发一个事件"LoggedInEvent".调用具有观察LoggedInEvent的非静态方法的SessionScoped(Weld)bean"SessionBean",并为该特定用户初始化一些内容.

是否调用了"SessionBean"的正确实例?所有实例都被调用了?我在文档中找不到任何内容.

jan*_*oth 6

"正确的实例"是一种略带误导的措辞.

这是怎么回事:

  1. SessionService被调用(可能是一个Web请求触发).
  2. 如果它触发它LoggedInEvent,则以同步方式调用所有已注册的观察者(意味着SessionService在所有观察者终止之前不会终止).
  3. 每个包含(非静态)观察者方法的bean都将被实例化(假设bean范围是活动的 - 它通常位于标准Web环境(*)中).这将是你的情况SessionBean.如果 - 且仅当 - SessionBean已经在您的活动会话中实例化(当然只有一个会话活动关于Web请求),那么当然会使用此实例.

规范中的更多细节.

那么,回答你的问题:

是的,将调用正确的实例.为什么?因为容器的责任是确保只有一个SessionBean-instance与活动会话范围相关联.

(*):如果调用是由远程ejb调用触发的,则既不能采用活动会话也不能采用活动会话...