IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Spring Java Discussion :

Spring batch rollback KO [Batch]


Sujet :

Spring Java

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Points : 117
    Points
    117
    Par défaut Spring batch rollback KO
    Bonjour,

    Je suis en train de développer un batch avec Spring Batch.

    Je suis en phase de tests et j'ai remarqué qu'en cas d'exception, aucun rollback ne s'effectue.

    J'explique la situation.

    Dans mon reader, je récupère les données nécessaires.
    Dans mon writer, je les parcours pour créer un XML et un fichier texte et à la fin je les flague et je crée un historique.

    Or après la création de l'historique, je fais exprès de lever une exception pour qu'il rentre dans le catch. Et dans le catch, je flague à Error et je crée un historique à Error.

    Et en base, j'ai deux historiques, celui qui correspond au cas où tout s'est bien passé, et un historique dans l'exception

    Voici le code de mon writer
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
        @Override
        protected void doWrite(List<? extends XXPP> arg0) throws Exception {
     
            XXPP xxItem = (XXPP) arg0.get(0);
            List<File> files = new ArrayList<File>();
     
            if (xxItem != null && xxItem.getXX() != null && !xxItem.getXX().isEmpty()) {
     
                try {
                    /*---------------------------------------------*/
                    /*-------CREATE AND COPY A XML FILE -----------*/
                    /*---------------------------------------------*/
                    //Create the xml content
                    String xmlFile = fileServiceXML.create(xxItem);
     
                    //copy the content in xml file
                    FilesUtility.copyXMLFileWithTimestampName(xmlFile, Utility.getSubFolderAccounting());
     
                    log.info(xmlFile);
     
                    /*--------------------------------------------------------------------*/
                    /*-------CREATE AND COPY A RECONCILIATION FILE (FLAT FILE) -----------*/
                    /*--------------------------------------------------------------------*/
                    //create a bean from the database object
                    FitAccountingReconciliationBean reconcilationBean = Utility.createReconciliationBean(xxItem);
     
                    //create the text content
                    String reconciliatonFile = fileServicesReconFile.create(reconcilationBean);
     
                    //copy the content in text file
                    files.add(FilesUtility.copyTextFileWithTimestampName(reconciliatonFile, Utility.getSubFolderAccounting()));
     
                    log.info(reconciliatonFile);
     
                    /*------------------------------------------------------------------------------*/
                    /*-------------UPDATE STATUS AND TRANSACTION_DATE OF FIT_ACCOUNTING ------------*/
                    /*------------------------------------------------------------------------------*/
                    dao.updateStatusAndDate(Utility.searchListTechnicalIds(xxItem), Constants.STATUS_SEND);
     
                    /*---------------------------------------*/
                    /*-------------ADD A HISTORY ------------*/
                    /*---------------------------------------*/
                    dao.addTransactionHistoryByTechnicalIds(Utility.searchListTechnicalIds(xxItem), Constants.STATUS_SEND);
     
                    throw new Exception();
     
                } catch (Exception e) {
                    //if error, all data will fixe with status "error"
                    log.error("Exception",e);
                    dao.updateStatusAndDate(Utility.searchListTechnicalIds(xxItem), Constants.STATUS_ERROR);
     
                    /*---------------------------------------*/
                    /*-------------ADD A HISTORY ------------*/
                    /*---------------------------------------*/
                    dao.addTransactionHistoryByTechnicalIds(Utility.searchListTechnicalIds(xxItem), Constants.STATUS_ERROR);
                }
            }
        }
    A votre avis, doit-on rajouter quelque chose dans un fichier de configuration ou une annotation ?

    Là je ne vois pas du tout.

    Pour info, pour mon DAO, j'utilise getSimpleJdbcTemplate().update

    Merci d'avance pour votre aide.

  2. #2
    Membre régulier
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    358
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 358
    Points : 117
    Points
    117
    Par défaut
    c'est bon j'ai trouvé.

    Dans ma conf xml, j'ai changé ma datasource pour utiliser une connexion xa.

    ça fonctionne parfaitement.

    par contre, je rencontre un pb désormais.

    J'en ai profité pour changer la structure de mon batch.

    Maintenant mes requêtes sql je les ai mises dans un fichier xml.

    Dans une requête sql, je dois passer en paramètre une liste dans la clause where.

    mais il me sort ça comme message :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    com.ibm.db2.jcc.am.SqlSyntaxErrorException: [jcc][1091][10824][4.9.78] Conversion de données non valide : L'instance de paramètre [2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18] n'est pas valide pour la conversion demandée. ERRORCODE=-4461, SQLSTATE=42815
    voici ma requête sql
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    <bean id="statusItemWriter" parent="abstractJdbcBatchItemWriter" >
    	<property name="sql">
    			<value>
                <![CDATA[UPDATE TOTO SET STATUS = 'SEND', PROCESSING_DATE=sysdate WHERE ID IN (:listTechnicalId)]]>
    			</value>
    		</property>
    	</bean>
    Avez vous une idée comment injecter une liste

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Batch] Traitement par lot avec spring batch
    Par thierryler dans le forum Spring
    Réponses: 0
    Dernier message: 04/02/2010, 16h34
  2. [Batch] Spring batch ou Quartz + Spring?
    Par Yoann.chambonnet dans le forum Spring
    Réponses: 2
    Dernier message: 06/01/2010, 12h07
  3. [Batch] Problème avec Spring Batch
    Par meriem15 dans le forum Spring
    Réponses: 6
    Dernier message: 16/12/2009, 16h41
  4. [Batch] Spring Batch et Hibernate
    Par *alexandre* dans le forum Spring
    Réponses: 1
    Dernier message: 08/10/2009, 13h41
  5. [Data] [Spring/Hibernate] RollBack sur plusieurs ajouts
    Par eracius dans le forum Spring
    Réponses: 3
    Dernier message: 31/10/2007, 11h54

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo