在Timer中动态更改超时间隔

时间:2014-02-10 14:25:17

标签: java-ee ejb

我需要制作如下应用程序。 更改Web应用程序输入中的值将更改Timer中的刷新间隔。 它需要动态,是否可以使用Timer?

2 个答案:

答案 0 :(得分:3)

一旦创建,EJB Timer就无法更改配置的间隔时间段(至少它不是由ejb规范提供的)。您可以取消原始版本并创建一个具有不同间隔的新文件。

答案 1 :(得分:2)

在ejb中使用TimerService。在此示例中,在使用新的intervall

启动新计时器之前,将取消任何具有给定名称的先前计时器
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 startOrModifyTimer(long initialExpiration, long interval, String name){      
        //Cancel previous timer
        Collection<Timer> timers = timerService.getAllTimers();
        for (Timer timer: timers) {
            if (timer.getInfo().equals(name)) {
                timer.cancel();
            }
        }

        TimerConfig config = new TimerConfig();
        config.setInfo(name);
        config.setPersistent(false);
        timerService.createIntervalTimer(initialExpiration, interval, config);
    }
}