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

JDBC Java Discussion :

[JDBC, rollback, commit] imbriquer des transactions


Sujet :

JDBC Java

  1. #1
    Membre habitué
    Avatar de guipom
    Inscrit en
    Janvier 2003
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 207
    Points : 184
    Points
    184
    Par défaut [JDBC, rollback, commit] imbriquer des transactions
    Bonjour,

    Le problème en quelques mots :

    j'ai une classe qui recoit des operations, effectue les opérations en base de données, et renvoie un résultat. Cette classe s'appelle moteur par exemple. Si l'opération échoue, cad renvoie une exception, un rollback a lieu, si elle réussit, un commit a lieu.


    Le problème que j'ai est le suivant. J'ai maintenant une opération a créer, qui s'appelle par exemple op, composée de trois opérations unitaire. Appelons les op1 , op2 et op3, chacune bien sur fait des modifications dans la base, et est géré par op, qui appelle le moteur avec chaque opération.

    op appelle dans l'ordre op1 puis op3, et potentiellement op2


    Le problème se situe au niveau du mécanisme des commit et rollback au sein de l'opération op.

    Voila ce que je veux :
    j'exécute op1
    (*)
    si op1 réussit (il doit théoriquement, sinon exception et ca s'arrete la)
    j'exécute op3
    si op3 réussit, c'est gagné, pas de soucis
    sinon
    j'annule op3
    je fais op2
    avec les résultats de op2, je fais un nouveau op3
    si op3 réussit, op est fini, sinon toujours l'envoi d'exception et le rollback auto
    Le problème est le suivant, je ne peux pas toucher au "moteur". et je dois pouvoir annuler op3.

    Si je commit après l'exécution de op1 (*), que je crée une nouvelle transaction, si op2 et/ou op3 échoue, le rollback final n'a plus de prise sur op1 évidemment, et c'est un problème.

    Je ne vois pas de manière simple de gèrer une transaction pour l'opération op, et une sorte de sous transaction pour l'exécution de op3, de manière à ne pas avoir :

    op1 -> op3 (échoue) -> op1 -> op2 -> op3

    Ce qui fait un nouvel appel à op1, à cause du rollback que je suis obligé de faire, et c'est assez couteux.

    Merci pour votre aide, j'espère que vous comprendrez quelque chose à mon problème

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Points : 432
    Points
    432
    Par défaut
    A tu essayé avec des checkpoint.
    Si mes souvenir sont bons, ils permettent de revenir là ou tu l as placé.

    Dans ce cas tu place un checkpoint avant op3 et comme ca si op3 echoue tu reviens à ce checkpoint pour faire op2.
    Mess with the best, die like the rest!

  3. #3
    Membre confirmé Avatar de NeptuS
    Profil pro
    Inscrit en
    Août 2005
    Messages
    392
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2005
    Messages : 392
    Points : 508
    Points
    508
    Par défaut ptite question
    as-tu moyen de faire passer au "moteur" l'opération op1op3 ?
    En gros ma question revient au même que : est-ce que tu as accès au code SQL de tes opérations op1 op2 et op3 ?
    Toute vérité est bonne à entendre, même si toutes les vérités ne sont pas bonnes à dire.
    Rien ne sert de partir à point, il vaut mieux courir .

  4. #4
    Membre habitué
    Avatar de guipom
    Inscrit en
    Janvier 2003
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 207
    Points : 184
    Points
    184
    Par défaut
    malgré ma lecture de la FAQ, je connaissais pas du tout, et avec le nom j'ai retrouvé ca : http://java.developpez.com/faq/jdbc/...ons#savepoints

    merci pour ton aide, on va dire que c'est résolu, si je m'en sors pas, je demanderai

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    390
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 390
    Points : 432
    Points
    432
    Par défaut
    Il faut tout de même que je revois tout ca
    Car effectivement ce sont de savepoints et non des checkpoints
    Mess with the best, die like the rest!

  6. #6
    Membre habitué
    Avatar de guipom
    Inscrit en
    Janvier 2003
    Messages
    207
    Détails du profil
    Informations forums :
    Inscription : Janvier 2003
    Messages : 207
    Points : 184
    Points
    184
    Par défaut
    ahlala

    savepoint à partir de JDBC 3.0, pour oracle c'est bon, mais pour assurer la compatibilité sql server 2000

    enfin y a ca quand meme : http://www.microsoft.com/sql/downloads/2005/jdbc.mspx

    en espérant que la version finale arrive un jour

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

Discussions similaires

  1. Imbriquer des transactions en C#
    Par StringBuilder dans le forum Contribuez
    Réponses: 7
    Dernier message: 23/02/2012, 15h12
  2. Réponses: 8
    Dernier message: 05/11/2009, 13h55
  3. Apropos des Transactions au sein d'un Stored Procedure
    Par Sarbacane dans le forum Connexion aux bases de données
    Réponses: 6
    Dernier message: 16/11/2004, 08h21
  4. gestion des transactions
    Par viny dans le forum Requêtes
    Réponses: 2
    Dernier message: 26/03/2004, 21h53
  5. Réponses: 12
    Dernier message: 18/03/2004, 15h09

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