如何在Spring中使用Observer模式实现轮询

时间:2011-06-27 09:13:19

标签: spring polling observer-pattern session-bean

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

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

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

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

非常感谢任何帮助。谢谢。

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

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

1 个答案:

答案 0 :(得分:0)

如何使用已知JSF和Spring会话bean的对象作为观察者?您需要在每个请求上轮询该对象。但在这种情况下,您可能只是轮询原始来源。