检查状态时,EJB计时器会挂起

时间:2012-02-01 06:14:43

标签: java java-ee timer ejb ejb-3.0

我在我的应用程序中使用EJB计时器,但只要我检查计时器状态,应用程序就会挂起。

复制此方案的场景如下:

1)启动计时器。

2)在超时方法中,调用另一个类方法并在那里睡30分钟。

3)在30分钟到期之前,通过调用以下方法检查计时器状态。

    public String getTimerStatus() {
    String returnStatus = "Stopped";
    for (Object obj : timerService.getTimers()) {
        Timer t = (Timer) obj;
        try {
            String scheduled = (String) t.getInfo();
            if (scheduled.equals(TIMER_NAME)) {
                returnStatus = "Running";
            }
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    return returnStatus;
}

4)当调用t.getInfo()方法时,应用程序挂起,如上所示。

请让我知道此问题的任何解决方案。

1 个答案:

答案 0 :(得分:0)

我的想法是t.getInfo()已同步或尝试以另一种方式获取锁定。你能提供超时方法的代码以及它调用的其他类方法吗?你使用同步吗?