EJB的计时器都是绑定每一个EJB的,需要由某个EJB的方法创建计时器,并启动计时,当计时时间到时,计时器将会调用该EJB的回调方法。

所有的计时器都保存在使用@javax.annotation.Resource标注的SessionContext类型模块中的TimerService子模块中,只需要定位该模块,就可以创建计时器,并将其绑定在EJB上。

回调时,计时器相当于绑定的EJB的一个用户,将会调用EJB的一个独立实例。

例如:

@Stateless
public class TimerTest implements TimerTestLocal {

    @Resource
    private SessionContext sessionContext;

   //创建计时器并绑定当前EJB的方法

    @Override
    public void test() {
        TimerService timerService = sessionContext.getTimerService();
        timerService.createTimer(50000, 10000, "EJB Timer");
    }

    //当前EJB的计时器将会回调的方法,最好使用@Timeout标注的方式

    @Timeout
    public void begin(Timer timer) {
        System.out.println("你好"+ new Date());
    }

}

本例中,timerService.createTimer(50000, 10000, "EJB Timer");将用于在TimerService 中创建一个计时器,其中,第一个参数是毫秒:首次启动计时器的时间,第二个参数也是毫秒,代表间隔启动的时间