在我的测试应用程序(JSF,PrimeFaces,Wildfly 8)中,我有一个简单的消息传递接口,用于编写消息和查看发送给我的消息。我现在想为5分钟后未答复的邮件创建自动回复。这种自动响应意味着独立于坐在浏览器窗口后面并单击刷新按钮的任何人。

我当前的想法是创建一个带有@ApplicationScoped注释的新类。该类应运行一个单独的线程来处理响应过程。那会是个好方法吗?还是某个地方已经包含了此功能的功能?

最佳答案

我认为值得考虑的选择是使用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分钟内未答复的消息,并为其自动发送答复。

09-11 05:32