Bonjour,
J'ai une fonction de mon appli qui appelle une procédure stockée.
Dans certains cas, si je lance cela tel quel, j'ai :
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(); } }
Alors que si j'ajoute un petit sleep avant dbConnection.close(), ça passe!JPA transaction unexpectedly rolled back (maybe marked rollback-only after a failed operation); nested exception is javax.persistence.RollbackException: Error while commiting the transaction![]()
![]()
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]
Partager