1

異なるセッション インスタンスの 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イベントが呼び出された後、送信されます。

ここで、セッション 1 とセッション 2 のオブジェクトhandleFun内のメソッドでこのイベントを処理したいと考えています。EventHandler

4

1 に答える 1

1

これには特別な注意点があります。 に を登録EventHandlerしたのでmessanger、 にイベントを送信させることができます。また、this登録に使用するためEventHandler、スコープ付きプロキシとの干渉はありません(使用する場合)。

ただし、次の点に注意してください。

  • セッションが破棄されたときは登録を解除することを忘れないでくださいEventHandler(たとえば、@PreDestroyメソッド内) 。
  • スレッドセーフに注意する
  • スコープ付きプロキシを使用するEventHandler他のスコープ付き Bean を参照し、それらを内部で使用すると、問題が発生します。はセッション コンテキストの外で実行されるため、プロキシの背後にあるスコープ Bean は使用できません。sessionhandleFun()handleFun()session
于 2012-10-02T17:41:59.560 に答える