0

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

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

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

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

任何帮助将非常感激。谢谢你。

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

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

4

1 回答 1

0

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

于 2011-06-27T13:49:00.587 回答