【问题标题】:How to run parallel processes in Java EE如何在 Java EE 中运行并行进程
【发布时间】:2015-10-03 19:27:37
【问题描述】:
在我的测试应用程序(JSF、PrimeFaces、Wildfly 8)中,我有一个简单的消息传递界面,用于编写消息并查看发送给我的消息。我现在想为 5 分钟后未回复的消息创建自动回复。这种自动响应意味着独立于坐在浏览器窗口后面并单击刷新按钮的任何人。
我目前的想法是创建一个带有 @ApplicationScoped 注释的新类。此类应运行处理响应进程的单独线程。那会是一个好方法吗?或者是否有某个功能已经涵盖了这个问题?
【问题讨论】:
标签:
java
multithreading
jsf
jakarta-ee
【解决方案1】:
我认为值得考虑的选项是使用 javax.ejb.TimerService:
@Stateless
public class AutomaticResponseSender {
private static final Integer _5_MINS = 300000;
@Resource
private TimerService timerService;
public void waitFiveMinutes() {
Timer nextTimer = timerService.createSingleActionTimer(_5_MINS, null);
}
@Timeout
public void autoRespondForNotAnswered() {
// here send an auto response
}
public void cancel() {
timerService.cancel();
}
}
发送手动答复后,您需要致电cancel() 以避免自动回复,或者,如果答复已发送,您可以检查autoRespondForNotAnswered() 方法。
另一种方法是使用@Schedule,假设每 5 或 10 秒检查一次未在 5 分钟内得到答复的消息并为它们发送自动答复。