关于ejb3.0计时器服务的问题

时间:2011-05-02 11:50:28

标签: java ejb-3.0 ejb

我的Timersession bean中有4个方法,比方说a()b()c()d()

  • a()应每6小时执行一次
  • b()应每3小时执行一次
  • c()应每1小时执行一次

如何使用EJB 3.0计时器服务执行此操作?

2 个答案:

答案 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();
    }

//--