2016-11-08 2 views
1

J'utilise une route multicast dans Camel avec deux pipelines. Un pipeline ajoute les données dans la base de données et d'autres certaines opérations d'écriture sur un fichier. Mon exigence d'annuler le processus complet en cas de défaillance ou d'erreur. J'ai annulé avec succès les insertions db, mais je n'ai pas réussi à trouver un moyen d'annuler les opérations d'écriture effectuées sur le fichier. Quelqu'un peut-il m'aider avec le processus de retour en arrière. Voici mon contexte de la route:Comment faire pour restaurer les écritures de fichier lors de l'utilisation de la transaction Apache Camel?

<routeContext id="s1Route" xmlns="http://camel.apache.org/schema/spring"> 
    <route id="sRoute"> 
     <from uri="activemq:queue:{{s.queue}}" /> 
     <log message="Message received from myprocess queue is ${body}"></log> 
     <unmarshal ref="gsonUnmarshelling"></unmarshal> 
     <bean beanType="com.***.upload.***.GetMyBean" 
      method="process(com.**.upload.beans.MyEvenets,${exchange})" /> 
     <log message="Multicasting data ${body} to file system and database" /> 
     <multicast parallelProcessing="true"> 
      <pipeline> 
       <choice> 
        <when> 
         <simple>${properties:s.write.file} == true</simple> 
         <setHeader headerName="path"> 
          <simple>${properties:s.write.folder}</simple> 
         </setHeader> 
         <log message="Going to write to file : ${body}"></log> 
         <bean beanType="com.***.upload.processors.ToFile" 
          method="process(${exchange},com.***.upload.beans.MyFile)" /> 
         <to uri="file://?fileExist=Append"></to> 
        </when> 
       </choice> 
      </pipeline> 
      <pipeline> 
       <log message="Going to insert in database"></log> 
       <transform> 
        <method ref="insertBean" method="MyBatchInsertion"></method> 
       </transform> 
       <choice> 
        <when> 
         <simple>${in.header.myCount} == ${properties:batch.size}</simple> 
         <to uri="sql:{{sql.my.insertBatch}}?batch=true"></to> 
         <log message="Inserted rows ${body}"></log> 
        </when> 
       </choice> 
      </pipeline> 
     </multicast> 
    </route> 
</routeContext> 

Répondre