Bonjour,
Je possède un EJB avec une méthode asynchrone. Cette méthode va exécuter des traitements sur un ensemble de données dans une base de données.
Depuis un autre EJB, je vais en fait appeler cette méthode asynchrone plusieurs fois en lui passant en parametre l'ensemble à traiter.
Voici le code :
L'EJB asynchrone en question :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8 int NB_FORKS = 2; List<Future<Integer>> tasks = new ArrayList<Future<Integer>>( NB_FORKS); for (int i = 0; i < NB_FORKS; i++) { Future<Integer> asyncResult = asynchronousBean .process(features, ids[i]); tasks.add(asyncResult); }
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 @Stateless(name = "Asynchronous", mappedName = "ejb/stateless/AsynchronousBean") @LocalBean @TransactionAttribute(value = TransactionAttributeType.REQUIRES_NEW) @Asynchronous public class AsynchronousBeanBean { @PersistenceContext(unitName = "myPU") private EntityManager em; public Future<Integer> process(byte[] features, int[] ids) { for (int id : ids) { MyEntity entity = em.find(Marker.class, id); // process } return new AsyncResult<Integer>(1); } }
Cela semble simple mais pourtant à chaque appel de la première méthode qui va lancer les plusieurs threads, Glassfish crache sans meme laisser de logs (enfin je n'ai que regarder les logs présents sur le panneau d'administration, y a-t-il d'autres logs où faut-il jeter un oeil?).
J'essaie juste de savoir pourquoi il crache comme ça. J'ai déjà manipulé des EJB asynchrone auparavant et jamais eu de soucis.
Quelqu'un aurait une piste?
Partager