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

JPA Java Discussion :

JPA transaction unexpectedly rolled back


Sujet :

JPA Java

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    759
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 759
    Points : 159
    Points
    159
    Par défaut JPA transaction unexpectedly rolled back
    Bonjour,

    J'ai une fonction de mon appli qui appelle une procédure stockée.

    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
    Connection dbConnection = null;
    dbConnection = ds.getConnection();
    Statement sql = dbConnection.createStatement();
    StringBuffer sqlstr = new StringBuffer("call MA_PROC(xxxxxx)");
    try {
          sql.executeUpdate(sqlstr.toString());
          dbConnection.commit();
    } catch (Exception e) {
           throw new Exception(e.getMessage() + "|" + sqlstr.toString());
    }finally{
          if (dbConnection != null) {
                //Thread.sleep(1000);
                dbConnection.close();
          }
    }
    Dans certains cas, si je lance cela tel quel, j'ai :
    JPA transaction unexpectedly rolled back (maybe marked rollback-only after a failed operation); nested exception is javax.persistence.RollbackException: Error while commiting the transaction
    Alors que si j'ajoute un petit sleep avant dbConnection.close(), ça passe!
    Note :
    sans sleep : 100% d'échec
    avec sleep(100) 50% de réussite
    avec sleep(1000) 100% de réussite

    Alors dans la console ça me parle d'une Primary Key violated mais ça n'a pas de sens : même causes, mêmes effets alors si les paramètres passés à la proc restent les mêmes, aucune raison d'avoir des PK violated que dans le cas où on n'a pas mis la rustine "sleep"...

    Il semblerait qu'on demande donc de fermer la connection alors que la procédure stockée MA_PROC(xxxxxx) est toujours en train de travailler.
    Le problème c'est que la fonction executeUpdate ne sait pas quand la procédure a fini de travailler.[/url]

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

    Informations forums :
    Inscription : Juin 2007
    Messages : 91
    Points : 114
    Points
    114
    Par défaut
    Je ne sais pas si ça peut t'aider, mais quelques commentaires:

    D'après le message d'erreur, il semble que l'exécution se déroule au sein d'une transaction gérée par le conteneur, or au milieu de cette transaction ton code valide la transaction en base et tu fermes la connexion!
    Je n'ai pas assez d'éléments pour affirmer que c'est la cause principale de ton souci (d'autant que ce genre d'erreur a souvent une origine sous-jacente que tu peux voir dans la partie "caused by:" de la stack), mais cela ne me semble pas acceptable de faire ça au sein de la transaction.

Discussions similaires

  1. Réponses: 2
    Dernier message: 04/07/2012, 14h26
  2. [Oracle] JPA transaction unexpectedly rolled back
    Par stof dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 31/12/2010, 14h03
  3. Réponses: 1
    Dernier message: 28/05/2009, 16h57
  4. [JasperServer][Oracle] Could not roll back Hibernate transaction
    Par CPI_en_mousse dans le forum Hibernate
    Réponses: 1
    Dernier message: 28/05/2009, 16h56
  5. [DBA] Erreur ORA-24761: transaction rolled back
    Par Rome dans le forum Oracle
    Réponses: 4
    Dernier message: 29/12/2006, 18h18

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