我需要制作如下应用程序。 更改Web应用程序输入中的值将更改Timer中的刷新间隔。 它需要动态,是否可以使用Timer?
答案 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);
}
}