2012-03-30 27 views
0

いくつかのイベントをリッスンして処理するリスナークラスを実装しています。このイベントの処理がうまくいく場合、このイベントは決して再度通知されませんが、何らかの例外イベントが発生した場合、MyBeanImplementationクラスに再度通知され、処理が再試行されます。Beanの複数のインスタンス

以下のコードは正常に動作しますが、このイベント処理には時間がかかることがありますので、
1.複数のリスナーが必要です。
2.サービスの呼び出し回数を制限します。スレッドプールを使用している可能性があります。

どのように各イベントを別々に処理する複数のリスナーを持つことができますか?私は春には新しく、これが可能かどうかはあまり考えていません。

相続人は一例です。

//春の構成:

<bean id="MyBean" class="MyBeanImplementation"> 

//サンプルクラス

public class MyBeanImplementation implements EventListener { 

    @override 
    public processEvent(Event event) throws EventProcessFailureException { 
     try { 
      // Validate event 
      validateEvent(event); 
      // Call another service to store part of information from this event 
      // This service takes some time to return success 
      boolean success = makeCallToServiceAndStoreInfo(event); 
      if(!success) { 
       throw new EventProcessFailureException("Error storing event information!"); 
      } 
     } catch (Exception e) { 
      throw new EventProcessFailureException(e); 
     } 
    } 

} 


おかげで

答えて

0

基本的に、あなたが紹介しStrategy patternを使用することができます他のリスナーはディーに再演する共有イベントとは別の方法です。物語の反対側に

<bean id="compositeStrategyListener"> 
    <property name="listeners"> 
    <list> 
     <ref bean="strategy1Listener" /> 
     <ref bean="strategy2Listener" /> 
     <ref bean="strategy3Listener" /> 
    </list> 
    </property> 
</bean> 

、:

<bean id="strategy1Listener" /> 
<bean id="strategy2Listener" /> 
<bean id="strategy3Listener" /> 

その後、あなたは他のリスナーを反復処理し、イベントを通過し、それらがイベントを処理できるようにする複合リスナーを導入することができますあなたが/を生成したオブジェクトがイベントを発行していますので、

<bean id="eventGenerator"> 
    <property name="eventListener" ref="compositeStrategyListener" /> 
</bean> 

を、今eventGeneratorは、生成されたイベントのトンを出版しますo compositeStrategyListnerは、それが持っているリスナーを反復処理し、それぞれ異なる方法でイベントを処理することができます。

Spring Task Executionを利用して、イベント処理のタスクの実行方法を構成することもできます。

+0

ありがとうございました。あなたの最初のアプローチは私のケースでは動作しません。異なるイベントリスナを実装する必要はないからです。しかし、Springのタスク実行を使用する2番目のアプローチは、私のユースケースでは良いようです。私は仕事のエグゼキュータを試み、それが私のために働くかどうかを見ます。 – AndyT

0

春のGoogleグーバイベントバスライブラリを一緒に使用しないのはなぜですか?リスニングイベントに必要なすべてのものを処理します。

関連する問題