Java JSF-2应用程序中的服务器端计时器

Java JSF-2应用程序中的服务器端计时器,java,jsf,jsf-2,Java,Jsf,Jsf 2,在我正在开发的JSF-2应用程序中,当用户执行操作时,我需要启动服务器端计时器。 此计时器必须与应用程序本身相关,因此它必须在用户会话关闭时继续存在。 为了解决这个问题,我想使用java.util.Timer类在应用程序范围的bean中实例化计时器对象。 这是一个好的解决方案吗?有没有其他更好的方法来实现这一点?谢谢没有ejb容器 如果您的容器没有ejb功能(tomcat、jetty等),您可以使用quartz调度程序库: 他们还有一些不错的代码示例: EJB3.1 如果您的应用程序服务器有EJ

在我正在开发的JSF-2应用程序中,当用户执行操作时,我需要启动服务器端计时器。
此计时器必须与应用程序本身相关,因此它必须在用户会话关闭时继续存在。
为了解决这个问题,我想使用java.util.Timer类在应用程序范围的bean中实例化计时器对象。

这是一个好的解决方案吗?有没有其他更好的方法来实现这一点?谢谢

没有ejb容器

如果您的容器没有ejb功能(tomcat、jetty等),您可以使用quartz调度程序库:

他们还有一些不错的代码示例:

EJB3.1

如果您的应用程序服务器有EJB3.1(glassfish、Jboss),那么有一种JavaEE标准的方法来创建计时器。主要研究@Schedule和@Timeout注释

类似的内容可能涵盖了您的用例(当计时器用完时,将调用带注释的@Timeout方法)


您正在使用EJB吗?在这种情况下,您可以使用EJB3.1的计时器服务。谢谢,我将查看quartz调度器库。
import javax.annotation.Resource;
import javax.ejb.Stateless;
import javax.ejb.Timeout;
import javax.ejb.Timer;
import javax.ejb.TimerConfig;
import javax.ejb.TimerService;

@Stateless
public class TimerBean {
    @Resource
    protected TimerService timerService;

    @Timeout
    public void timeoutHandler(Timer timer) {
        String name = timer.getInfo().toString();
        System.out.println("Timer name=" + name);
    }

    public void startTimer(long initialExpiration, long interval, String name){      
        TimerConfig config = new TimerConfig();
        config.setInfo(name);
        config.setPersistent(false);
        timerService.createIntervalTimer(initialExpiration, interval, config);
    }
}