2016-07-19 18 views
0

私は、春のバッチチャンクプロセス内のリスナーに関して、本当に厄介な問題があります。ItemWriteListenerとChunkListnerのリスナーの問題

マイチャンク構成は以下の通りである:

<batch:chunk 
     reader="processMidxDbItemReader" 
     processor="midxItemProcessor" 
     writer="midxCompositeItemWriter" 
     processor-transactional="false" 
     reader-transactional-queue="false" 
     skip-limit="${cmab.batch.skip.limit}" 
     commit-interval="#{jobParameters['toProcess']==T(de.axa.batch.ecmcm.cmab.util.CmabConstants).TYPE_POSTAUSGANG ? '${consumer.global.pa.midx.readCount}' : '${consumer.global.pe.midx.readCount}' }" 
     cache-capacity="20"> 
    <batch:skippable-exception-classes> 
     <batch:include class="de.axa.batch.ecmcm.cmab.util.CmabProcessMidxException" /> 
    </batch:skippable-exception-classes> 
    <batch:retryable-exception-classes> 
     <batch:include class="de.axa.batch.ecmcm.cmab.util.CmabTechnicalMidxException" /> 
     <batch:include class="de.axa.batch.ecmcm.cmab.util.CmabTechnicalException" /> 
    </batch:retryable-exception-classes> 
    <batch:retry-listeners> 
     <batch:listener ref="logRetryListener"/> 
    </batch:retry-listeners> 
    <batch:listeners> 
     <batch:listener> 
      <bean id="midxProcessSkipListener" class="de.axa.batch.ecmcm.cmab.core.batch.listener.CmabDbSkipListener" scope="step"> 
       <constructor-arg index="0" value="#{jobParameters['errorStatus']}" type="java.lang.String"/> 
      </bean> 
     </batch:listener> 
     <batch:listener> 
      <bean id="cmabChunkListener" class="de.axa.batch.ecmcm.cmab.core.batch.listener.CmabChunkListener" scope="step"/> 
     </batch:listener> 
    </batch:listeners> 
</batch:chunk> 

midxProcessSkipListenerはすべてオーバーライドメソッドでItemProcessListenerとItemWriteListenerを実装しています。 cmabChunkListener BeanはChunkListenerを実装しています。

だから、私の問題です: 書き込みエラーが発生した場合、私は

  • a)は、 "cmabChunkListener" のafterChunkError
  • Bと呼ばれている...と予想されます) "midxProcessSkipListener" のonWriteErrorが呼び出されます。

しかし、残念なことにとなります。afterChunkErrorメソッドが呼び出されます。 onWriteErrorメソッドは無視されますか?

cmabChunkListener私の設定(上記参照)にコメントすると、midxProcessSkipListeneronWriteErrorが実際に呼び出されます。

この現象の原因は何ですか?なぜChunkプロセス内に2つの別々のリスナーを持つことができないのですか? 私の目的は、の両方のメソッドが呼び出されます。

ご協力いただければ幸いです。

事前に感謝します。好奇心のうち

よろしく、

ボーデStockschlaeder

+1

あなたはスタックトレースを追加することができますか? –

+0

こんにちは、プロセスがエラーをスローしないので、スタックトレースはありません。私はchunkListenerが登録されている限り、onWriteErrorメソッドが呼び出されないことを観察しています。そして、これは私が理解しようとしている問題です。 – bonaly

+0

'logger.error("例外発生 "、e)'または 'e.printStackTrace()'でエラーを記録してから、ここに出力を追加できますか?現実的には、何らかの方法でログに記録せずに例外を「食べる」ことはめったにありません –

答えて

0

:私の場合はソリューションは、チャンクの構成のうち、リスナーを定義することであるバッチタスクレット内を意味します。

    </batch:chunk> 
        <batch:listeners> 
         <batch:listener ref="midxStepListener"/> 
         <batch:listener> 
          <bean id="cmabChunkListener" class="de.axa.batch.ecmcm.cmab.core.batch.listener.CmabChunkListener" scope="step"/> 
         </batch:listener> 
        </batch:listeners> 
      </batch:tasklet> 
     </batch:step> 

このソリューション

は、応答のための

それでも感謝:-)私のために働きました。

敬具、 ボードー

関連する問題