events - @在 session 范围 bean 中观察?

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

以下情况可能吗?

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

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

最佳答案

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

发生的事情是这样的:

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

更多详细信息请参阅 spec .

那么,回答你的问题:

是的,将调用正确的实例。为什么?因为容器有责任确保只有一个 SessionBean 实例与事件 session 范围关联。

(*):如果调用是由远程 ejb 调用触发的,则您既不能假定事件 session ,也不能假定事件对话...

关于events - @在 session 范围 bean 中观察?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6524170/

相关文章:

events - 使用向上和向下键时,如何在 GWT CellTable 中获取选定的行?

javascript - 如何检测浏览器中是否支持箭头键的按键?

java - 在哪里可以找到 Java EE 6 XML 库

java - MVVM 设计模式是否强制 ViewModel 和 View 具有 Observable 和 Observer 关系?

wpf - 不可变状态 - 有效地将更改传播到 GUI

java - Java 9 中不推荐使用 Observer。我们应该使用什么来代替它?

c# - asp.net 中的鼠标滚动单击事件使用 c#(不是 Javascript)

JavaScript jQuery 每秒触发一次点击

java - spring配置文件的关系?

java - 将 HTTP Request.login 与 JBoss/JAAS 一起使用