Mon appel d'EJB semble async
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 :
Code:
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;
}
}
} |
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.
Au niveau des traces, ça me donne ABBC. Et quelques millisecondes plus tard, je vois une exception déclenchée par l'EJB...