我的Timersession bean中有4个方法,比方说a()
,b()
,c()
和d()
。
a()
应每6小时执行一次b()
应每3小时执行一次c()
应每1小时执行一次如何使用EJB 3.0计时器服务执行此操作?
答案 0 :(得分:2)
安排三个单独的计时器,并使用“info”对象编码需要从@Timeout方法调用哪个方法。例如:
timerService.createTimer(..., 6 * 60 * 60 * 1000, "a");
...
timerService.createTimer(..., 3 * 60 * 60 * 1000, "b");
...
timerService.createTimer(..., 1 * 60 * 60 * 1000, "c");
...
@Timeout
private void timeout(Timer timer) {
String info = timer.getInfo();
if ("a".equals(info)) {
a();
} else if ("b".equals(info)) {
b();
} else if ("c".equals(info)) {
c();
} else {
throw new IllegalStateException("Unknown method: " + info);
}
}
答案 1 :(得分:1)
当然,您可以创建多个计时器和&可以用一种方法处理它。
示例代码:
//--
@Schedules ({
@Schedule(hour="*/1"),
@Schedule(hour="*/3"),
@Schedule(hour="*/6")
})
public void timeOutHandler(){
if(currentHr % 1 == 0) //-- Check for hourly timeout
a();
else if(currentHr % 3 == 0) //-- Similarly
b();
else if(currentHr % 6 == 0) //-- Similarly
c();
}
//--