如何在Spring中与Observer模式一起实现轮询



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

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

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

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

任何帮助都将不胜感激。非常感谢。

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

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

使用一个同时被称为JSF和Spring会话bean的对象作为观察者怎么样?您需要在每次请求时轮询该对象。但在这种情况下,你还不如调查一下原始来源。

最新更新