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 :

Probleme sur les transactions spring [Data]


Sujet :

Spring Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 7
    Par défaut Probleme sur les transactions spring
    Bonjour,

    J'ai un problème sur mes transactions spring.
    J'utilise mysql5, tomcat 5.0, hibernate 3 et spring 2, struts.
    J'ai suivi toutes infos trouvés sur le web.

    Lorsque je fais une transaction dans un service avec
    - methode1()
    - methode2()
    (sachant que la methode 2 ne va pas fonctionner, exemple update sur une ligne non existante)
    la méthode 1 passe quand même.

    Ensuite, j'ai mis dans ma data source la propriété defaultAutoCommit à false.
    Dans ce cas, methode1 ne passe pas (très bien).
    Mais si je rends valide la methode2, elle ne passe pas non plus.
    En fait, rien n'est committé.

    Avez vous déja eu ce problème ?

    Je vous remercie d'avance.

  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
    Tout dépend comment tu déclares les attributs de transaction de tes méthodes.
    ex: PROPAGATION_REQUIRES_NEW, PROPAGATION_NEVER, etc...

    Il faudrait peut-être mettre les appels à méthode1 et méthode2 dans une nouvelle méthode et appliquer une transaction globale avec un PROPAGATION_REQUIRED à cette nouvelle méthode.

    Il faut vérifier que tu utilises bien InnoDB qui est le moteur de mysql qui supporte les transactions. Je ne crois pas que les autres moteurs les supportent.

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 7
    Par défaut
    Tout d'abord, je te remercie d'avoir répondu.

    J'utilise un dialect INNODB
    <prop key="hibernate.dialect">org.hibernate.dialect.MySQLInnoDBDialect

    Et j'utilise un REQUIRED
    <property name="transactionAttributeSource">
    <props>
    <prop key="*">PROPAGATION_REQUIRED</prop>

    Il y a peut-être qqch à modifier sur la base de donnée pour la valeur INNODB ?
    Je ne suis pas spécialiste des SGBD ...

    Merci.

  4. #4
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 7
    Par défaut
    Mes tables sont aussi INNODB

  5. #5
    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
    Donc ca a l'air bon coté BD.

    Pour être certain de bien comprendre ce que tu veux.
    Tu voudrais que methode1 et methode2 fassent partie d'une même transaction ?
    C'est ça ?

    Car avec ce que tu as déclaré, tu vas avoir deux transactions séparées, sauf si l'appel de tes deux méthodes est dans une troisieme méthode, pour n'avoir qu'une transaction

  6. #6
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Janvier 2007
    Messages
    7
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2007
    Messages : 7
    Par défaut
    Effectivement, je voudrais que methode1 et methode2 fassent parties de la même transaction.

    Dans mon service, j'ai :
    {
    daoX.methode1()
    daoY.methode2()
    }

    Mes dao héritent de HibernateDaoSupport.
    Ils fonctionnent donc avec les templates.

    Et j'ai donc un PROPAGATION_REQUIRED sur *

    Comment faire alors pour que methode1 et methode2 fasse partie de la même transaction ?

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

Discussions similaires

  1. question sur les transactions
    Par vbcasimir dans le forum Débuter
    Réponses: 3
    Dernier message: 07/06/2005, 10h15
  2. [C#] Probleme sur les clés primaires composites
    Par stardeus dans le forum Windows Forms
    Réponses: 7
    Dernier message: 12/02/2005, 23h28
  3. petite aide sur les transactions et triggers SVP
    Par CharleLéo dans le forum Débuter
    Réponses: 4
    Dernier message: 15/11/2004, 20h43
  4. MS Access et TQuery (probleme sur les dates)
    Par Djob dans le forum C++Builder
    Réponses: 4
    Dernier message: 15/06/2004, 14h57
  5. Probleme sur les chaines de caractere
    Par scorpiwolf dans le forum C
    Réponses: 8
    Dernier message: 06/05/2002, 19h01

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