Bonjour à tous,
J'ai un EJB relativement simple, ChienEjb, possédant une méthode add().
Cet EJB est utilisé par l'un de mes Web services comme suit :
Quand j'appelle mon web service avec deux chiens, disons Milou et Idefix dans cet ordre, et qu'Idefix est déjà en base. L'EJB gère bien un rollback sur l'ensemble Milou-Idefix, ce qui est top. Par contre, c'est comme si l'appel à add(..) se faisait de façon asynchrone. en effet, la variable result contient {"Milou", "Idefix"} à la fin du traitement :-( En toute logique, je m'attendais à ce que l'exception lors de l'insert de Idefix fasse sortir de la boucle for... Ca n'entre jamais dans le catch.
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 public class ChienWebService { ... @EJB private ChienEjb chienEjb public List<String> addChiens(@XmlElement(required = true) @WebParam(name = "chienContainer") ChienContainer chienContainer) { try { print("A") List<String> result = new ArrayList<String>(); for(Chien chien : chienContainer.getchiens()) { print("B"); chienEjb.add(chien); result.add(chien.getName() + " is ok"); } print("C"); return result; } catch(Exception e) { e.printStackTrace(); throw truc; } } }
Au niveau des traces, ça me donne ABBC. Et quelques millisecondes plus tard, je vois une exception déclenchée par l'EJB...
Partager