【问题标题】:CDI Events, scope of their propagationCDI 事件,其传播范围
【发布时间】:2011-10-13 17:05:39
【问题描述】:

这是我经常遇到的一个问题,我认为也许 CDI 事件可以帮助我,但我不确定。

我有两个用户在一个网站上进行交互,我希望他们共享一个 bean 的实例,这样他们就可以共享一个活动。到目前为止,我知道如何做到这一点的唯一方法是将数据推送到数据库,然后使用两个不同的 bean,每个用户一个,持续检查更改。

我的问题是,如果 sessionscoped bean 观察到一个事件,当我触发它时,每个用户的每个 sessionbean 都会得到通知吗?还是只有活动用户的会话 bean?因为那时我可以使用观察者来为两个用户保持对象同步。但是我真的不认为这是它的工作方式,因为如果我有 1000 个会话触发一个事件,则会在 1000 个方法调用中产生......

我的另一个解决方案是一个巨大的应用程序范围的 bean,它为两个用户保存活动对象,然后对其所做的任何更改都可以传达给用户,但是,我仍然必须扫描这个对象,我是否遗漏了什么?

【问题讨论】:

    标签: java session cdi


    【解决方案1】:

    您可以通过拥有一个所有会话都可以看到并将其用作“缓存”的@ApplicationScoped bean 来解决这个问题。任何会话都可以触发一个事件,@ApplicationScoped bean 可以@Observe 它,您可以将此 bean 的引用注入您的 @SessionScoped 用户 bean。因为@ApplicationScoped 在技术上在所有登录用户 CurrentContext 中都可用,所以它可以接收来自任何会话的事件。

    【讨论】:

      【解决方案2】:

      您不会像那样免费获得它,因为当事件被触发时,当前线程只有一个会话处于活动状态,并且获得了调用观察者方法的实际对象[如果非静态]来自活动上下文。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-01-20
        • 1970-01-01
        • 2015-08-13
        • 2013-04-30
        • 1970-01-01
        相关资源
        最近更新 更多