JPA transaction unexpectedly rolled back
Bonjour,
J'ai une fonction de mon appli qui appelle une procédure stockée.
Code:
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 :
Citation:
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! 8O 8O
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]