@在会话中观察到已处理的bean



下面的场景可能吗?

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

是否调用了"SessionBean"的正确实例?是否调用了所有实例?我在文件中找不到任何东西。

"正确的实例"是一个有点误导性的措辞。

结果是:

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

规范中的更多细节

所以,为了回答你的问题:

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

(*):例如,如果调用是由远程ejb调用触发的,那么您既不能假设是活动会话,也不能假定是活动会话。。。

最新更新