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 :
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);
				}
L'EJB asynchrone en question :
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?