Salut,
dans mon appli web, j'ai une servlet de la forme suivante :
au clic sur un premier bouton, maMethode1 est appelée, une fois finie, on affiche une popup avec "Ok" "Annuler" qui vont soit appeler ma méthode commit() soit rollback().
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
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74 public class Test { private static final long serialVersionUID = 1L; private Map<String, Statement> tmpStatement = new HashMap<String, Statement>(); public methode1()[ MaConnection bdd = new MaConnection(); conn = bdd.getConnection(); conn.setAutoCommit(false); stmt = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE); req = "alter table T_ADM_SOURCE_SOUS_MENU disable constraint FK_ADM_SOURCE"; stmt.executeUpdate(req); req = "delete from HDD_ADM_PROTO.T_ADM_V3401_REF_FLUX"; stmt.executeUpdate(req); ... tmpStatement.put("monUser", stmt ); } public commit(){ PrintWriter out = response.getWriter(); String message = ""; try { tmpStatement.get("monUser").execute("commit"); if (tmpStatement.containsKey("monUser") { tmpStatement.remove("monUser"); } logger.info("commit ok"); } catch (Exception e) { logger.error( "erreur lors du commit", e); message = "[[ERROR]]Une erreur est survenue au lancement des requêtes"; }finally{ out.println(message); } } public rollback(){ PrintWriter out = response.getWriter(); String message = ""; try { tmpStatement.get("monUser").execute("rollback"); if (tmpStatement.containsKey("monUser") { tmpStatement.remove("monUser"); } logger.info("rollback ok"); } catch (Exception e) { logger.error( "erreur lors du rollback", e); message = "[[ERROR]]Une erreur est survenue au lancement des requêtes"; }finally{ out.println(message); } } }
Le soucis, c'est que malgré le autoCommit(false), à la fin de "maMethode1()", toutes mes instructions sql sont deja commitées en BDD, et du coup, peu importe l'appel à commit() ou rollback() après
Y'a un truc que j'ai raté ?
Partager