Spring,JSF,如何在两个不同会话的bean之间发送事件

时间:2012-10-02 17:18:39

标签: spring

我想在不同会话实例的bean之间发送事件或消息。

发送事件的服务:

@Service
@Scope("singleton")
public class ServiceA
{
   void methodA()
   {      
      ...
      messanger.post(new ReloadColorsEvent());  
   }
}
处理事件的

Bean:

 @Bean
 @Scope("session")
 public class EventHandler() 
 {
    @PostContruct
    void registerEvents()
    {
      messanger.register(this);
    }   

    void handleFun(ReloadColorEvent reloadColorEvent)
    {   ... 
    }
 }

假设我们有2个已登录用户。因此,创建了2个会话(会话1 会话2 )。第1节和第2节拥有EventHandlers。 调用methodA后,将发送事件。

现在,我想在session1和session2的handleFun对象中通过EventHandler方法处理此事件。

1 个答案:

答案 0 :(得分:1)

关于它的特别之处 - 因为您在EventHandler注册了messanger,所以您可以向其发送事件。由于您使用this注册EventHandler,因此不应干扰范围代理(如果您使用它们)。

但请注意以下内容:

  • 会话被销毁时不要忘记取消注册EventHandler(例如,在@PreDestroy方法中)
  • 照顾线程安全
  • 如果您的EventHandler引用其他session - 使用作用域代理的作用域bean并且您在handleFun()中使用它们,则会遇到问题。由于handleFun()在会话上下文之外执行,session - 代理服务器后面的作用域bean将无法使用