繁体   English   中英

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

[英]Stop infinite loop from EJB timer's timeout

我正在使用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(),但希望它不是正确的方法!

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

您可以使用Timer启动异步方法:

@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);
    }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM