从EJB计时器的超时停止无限循环

时间:2013-12-01 12:54:55

标签: java java-ee jboss7.x ejb-3.0

我正在使用TimerService创建一个如下所示的计时器:

@Resource
private TimerService timerService = null;
...
Timer timer = timerService.createTimer(timeout * 1000, timerId);

然后在计时器超时期间执行无限循环。

@Timeout
public void callTimeout(Timer timer){
    while(true){
        // do some process
    }
}

有没有办法使用Timer的选项让定时器停止callTimeout()的进程?我已经尝试了 timer.cancel(),但希望它不是正确的方法!

注意:我不能像通常那样控制线程来使用静态变量控制进程。

1 个答案:

答案 0 :(得分:0)

您可以使用Timer启动async方法:

@Startup
@Singleton
class MyEJB {
    @Resource
    private TimerService timerService = null;

    private Future<String> result;

    @EJB
    private Async asyncTask
    ...
    Timer timer = timerService.createTimer(timeout * 1000, timerId);

    @Timeout
    public void callTimeout(Timer timer){
        result = async.calculate();
    }
    public void cancel(){
        result.cancel();
    }
}

@Stateless
class Async {

    @Asynchronous
    public Future<String> calculate(){
        ...
        return new AsyncResult<String>(status);
    }
}