【问题标题】:@Observes in sessionscoped bean?@Observes 在 sessionscoped bean 中?
【发布时间】:2011-06-29 16:39:30
【问题描述】:

以下情况可能吗?

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

是否调用了正确的“SessionBean”实例?是否调用所有实例?我在文档中找不到任何内容。

【问题讨论】:

    标签: events java-ee-6 observer-pattern cdi


    【解决方案1】:

    “正确的实例”是一个有点误导的措辞。

    会发生什么:

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

    更多详情请关注spec

    所以,回答你的问题:

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

    (*):如果调用例如由远程 ejb 调用触发,则您既不能假定活动会话也不能假定活动会话...

    【讨论】:

      猜你喜欢
      • 2014-10-20
      • 1970-01-01
      • 2011-03-23
      • 2012-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多