Dans mon JEE6-App (fonctionnant sur Glassfish 3.0.1) j'ai un EmailEJB qui doit envoyer beaucoup de mails. Les mails sont envoyés de façon asynchrone, donc ils sont annotés avec le nouveau @Asynchrone EJB3.1, en les laissant s'exécuter dans un thread séparé. Maintenant, je veux que l'utilisateur soit informé de l'état actuel de la méthode: Combien de mails ont déjà été envoyés?Expose la progression actuelle d'une fonction @Asynchronous à utiliser dans View
L'envoi asynchrone des mails fonctionne bien, mais je n'arrive pas à comprendre comment laisser la progression être accessible de l'extérieur. On dirait que mon approche pour faire cela est tout à fait fausse, mais d'une certaine manière, cela doit être possible (peut-être une autre approche). Voici comment mon EmailEJB ressemble actuellement (genre de pseudo-code, mais explique ce que je veux):
@Stateful
public class EmailEJB {
@Asynchronous
public Future<Integer> sendMails() {
for (int i=0; i<mails.size; i++) {
sendMail(mails[i])
// i want to return the progress without returning ;)
return new AsyncResult<Integer>(i)
}
}
}
//Just for the completeness... from outside, i'm accessing the progress like this:
Future<Integer> progress = emailEJB.sendEmails();
Integer currentvalue = progress.get();
Comment puis-je retourner les progrès en cours dans ma fonction asynchrone, sans l'annuler avec un retour? Comment puis-je montrer à l'utilisateur la progression d'une boucle dans une fonction? Ai-je besoin d'une autre méthode asynchrone? Des indices?