【问题标题】:How to implement polling in Spring together with Observer patternSpring中如何与观察者模式一起实现轮询
【发布时间】:2011-06-27 09:13:19
【问题描述】:

我正在尝试实现一个通过线程异步执行轮询然后通知观察者列表的服务。

架构如下:多个并发jsf会话bean可以注册到单例服务,并在有新数据更新可用时由线程通知。收到通知后,每个 jsf 会话 bean 通过访问其他 会话范围的 spring bean(它们是在 context.xml 中定义的服务)执行一些操作。

我现在面临的问题是更新线程无法访问那些会话范围的spring bean,因为它们的代理无法从更新线程解析,这是可以理解的,因为线程是在应用程序上下文之外实例化的并且没有可用 bean 的可见性。但是,我该如何在 Spring 中实现这样的机制呢?

我还尝试使用任务执行器 bean,希望 Spring 以某种方式使其成为当前上下文的一部分,但它失败了(通知的 jsf 会话 bean 调用的会话范围的 spring bean 无法解析)。

任何帮助将不胜感激。谢谢。

编辑:添加了有关通信流程的更多信息。

每次新用户生成新会话时,都会创建相应的 jsf 会话 bean。这个bean(一旦绑定到http会话)然后注册到一个spring服务(一个单例)。当至少一个 jsf 会话 bean 被注册时(因此当至少有一个观察者时),该服务将激活轮询机制。当服务发现有新的更新可用时,它会通过调用他们的“update()”方法通知注册的观察者。在此方法中,每个观察者(或 jsf 会话 bean)将通过其他一些可用作代理的 Spring 会话 bean 执行一些操作。这就是“通信”失败的地方,因为原始轮询线程(更新服务中的那个)不知道如何解决 spring 代理。有没有办法让轮询线程可以使用这些信息?谢谢。

【问题讨论】:

    标签: spring polling observer-pattern session-bean


    【解决方案1】:

    使用一个既是 JSF 又是 Spring 会话 bean 的对象作为观察者怎么样?您需要在每个请求上轮询该对象。但在这种情况下,您不妨只轮询原始来源。

    【讨论】:

    • 感谢您的回复。我没有完全明白你说的。我已经用我的网络应用程序中的通信流的更多细节编辑了上述问题,所以也许你可以看看它并告诉我。谢谢!
    猜你喜欢
    • 2011-12-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-29
    相关资源
    最近更新 更多