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 :

Annulation d'un rollback survenu dans un pas d'une boucle [Framework]


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut Annulation d'un rollback survenu dans un pas d'une boucle
    Bonjour à tous,

    J'ai cette annotation au dessus d'une méthode dont la transaction est gérée par Spring :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    @Transactional(propagation = Propagation.REQUIRED, readOnly = false, rollbackFor=MyClassException.class)
    public void maMethodeSpring throws MyClassException.class
    ...
    .
    Cette méthode est exécutée dans une boucle. Il peut y avoir des exceptions fonctionnelles dans cette méthode (sur un pas de la boucle), ce qui n'est pas génant pour les autres pas. Mais seulement une fois qu'une exception est lévee, mêmes si tous les autres pas de la boucle se passent bien, le commit est refusé à la fin.Alors vous me voyez venir, comment faire pour ne pas propager un rollback au reste de la boucle.Sachant que je n'ai pas accès au code source de la méthode unitaire levant l'exception.
    Voici un exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    @Transactional(propagation = Propagation.REQUIRED, readOnly = false)
    public void maMethodePrincipale(){
    ...
    for (Objet obj : listeObjets){
    this.maMethodeSpring(); //Pouvant lever une exception que je ne veux propoger
    ...
    }
    }
    Que mettre comme annotation sur la méthode principale pour quelle isole les exceptions?

  2. #2
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Et avec un Propagation.REQUIRES_NEW ?

  3. #3
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Citation Envoyé par fr1man Voir le message
    Et avec un Propagation.REQUIRES_NEW ?
    Merci je l'ai déjà testée sur l'annotation de la transaction principale, mais rien n'y change .

  4. #4
    Membre Expert
    Profil pro
    Inscrit en
    Août 2006
    Messages
    3 276
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2006
    Messages : 3 276
    Par défaut
    Je pensais plutot à l'utiliser dans la sous méthode.

  5. #5
    Membre Expert
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Juin 2007
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 938
    Par défaut
    Citation Envoyé par fr1man Voir le message
    Je pensais plutot à l'utiliser dans la sous méthode.
    Comme je l'ai dit plus haut, je n'ai pas accès au code source de la classe implémentant la sous méthode, en réalité voici le bout de code :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    @Transactional(propagation = Propagation.REQUIRED, readOnly = false)
    public void maMethodePrincipale(){
    ...
    for (Objet obj : listeObjets){
    monObjetDuneClasseANonAccessible.maMethodePersistSpring(obj); //Pouvant lever une exception que je ne veux pas propoger
    ...
    }
    }
    .
    Est ce que l'appelant de cette sous méthode peut dans une annotation Spring refuser de recevoir la propagation d'une exception?.
    Ou encore forcer un commit par pas de boucle.

  6. #6
    Rédacteur/Modérateur
    Avatar de andry.aime
    Homme Profil pro
    Inscrit en
    Septembre 2007
    Messages
    8 391
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Ile Maurice

    Informations forums :
    Inscription : Septembre 2007
    Messages : 8 391
    Par défaut
    Bonjour,

    Pourquoi tu n'étends pas la classe ensuite en overridant () seulement la méthode en ajoutant l'annotation @Transactional?

    A+.

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

Discussions similaires

  1. [XL-2003] Faire du pas à pas dans l'exécution d'une boucle
    Par alainr13 dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 23/03/2013, 00h06
  2. Je n'arrive pas à faire une boucle toute simple?
    Par Ouass dans le forum Macros et VBA Excel
    Réponses: 4
    Dernier message: 15/07/2008, 14h17
  3. le pas d'une boucle for
    Par Cheorches dans le forum VB.NET
    Réponses: 3
    Dernier message: 08/08/2007, 17h02
  4. je sais pas utilisé une boucle pour ?
    Par napz dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 09/10/2006, 01h09
  5. pause dans l'execution d'une boucle...
    Par MasterOfChakhaL dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 10/04/2006, 21h55

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