|
|
1
3
没人?好的,这就是我的解决方案。我不确定这是一个巨大的解决方案,还是一种完成这项工作的方法。 由于@asynchronous方法无法访问会话上下文,因此也没有会话bean(至少我不知道如何访问,我总是得到ConcurrentModificationErrors或类似的bean),所以我创建了一个singleton progressEJB,其中包含一个哈希映射:
此哈希映射应将sessionid(字符串)映射为整数值(进度0->100)。因此,用户会话与进度相关联。 在我的emailejb中,我正在注入这个progressejb,在我的@asynchronous方法中,每次发送电子邮件时,我都会增加值:
当调用函数时,sessionid来自我的托管(weld)bean:
现在,我可以通过Ajax轮询从我的JSF视图访问emailManager的进度,告诉用户已经发送了多少邮件。刚用2个用户测试过,似乎可以用。 |
|
|
2
0
我也只看到@singleton解决方案。 但这意味着需要在ProgressEJB中进行内务管理。例如,需要做一些努力从hashmap中删除旧会话。 |
|
|
3
0
另一个解决方案在 Is there any way to know the progress of a EJB Asynchronous process? 此解决方案不需要有状态bean。
保存进度的上下文对象。
使用非常简单。
|