计时器是使用TimerService.createTimer()在EJB3中创建的,然后通过@Timeout注释所注释的任何回调方法运行,即:

@Resource
private TimerService timerService;

public void createHampster() {
    Hampster hampster = new Hampster("Fluffy III");
    timerService.createTimer(3000, 3000, hampster);
}


(...)

@Timeout
public void feedHampster(Timer timer) {
    Hampster hampster = (Hampster) timer.getInfo()
    //(...)
}


所以,我的问题是,这两个代码块是否需要在同一个bean中?计时器是继承到创建它们的bean还是全局的?我自己的测试表明,但以前是这样,我在文档中还没有找到确定的内容。

最佳答案

它们与创建它们的bean绑定在一起。 EJB 3规范第18.2节说:


  企业bean的bean类
  使用计时器服务的必须
  提供超时回调方法。





  当计时器指定的时间
  创建已过去,容器
  调用的超时回调方法
  豆。

10-08 15:20