在我的 JEE6-App(在 Glassfish 3.0.1 上运行)中,我有一个必须发送大量邮件的 EmailEJB。邮件是异步发送的,因此它使用新的 EJB3.1 @Asynchronous 进行注释,让它在单独的线程中运行。现在我希望用户了解该方法的当前状态:已经发送了多少封邮件?
异步发送邮件工作正常,但我不知道如何让进度可以从外部访问。似乎我这样做的方法是非常错误的,但不知何故它必须是可能的(也许是另一种方法)。这就是我的 EmailEJB 目前的样子(它是一种伪代码,但解释了我想要什么):
@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();
如何在异步函数中返回当前进度,而不用返回取消它?如何向用户显示函数内循环的进度?我需要另一种异步方法吗?有什么提示吗?