Java 检查状态时EJB计时器挂起

Java 检查状态时EJB计时器挂起,java,jakarta-ee,timer,ejb,ejb-3.0,Java,Jakarta Ee,Timer,Ejb,Ejb 3.0,我在我的应用程序中使用EJB定时器,但只要我检查定时器状态,应用程序就会挂起 要复制此功能的场景如下所示: 1) 启动计时器 2) 在timeout方法中,调用另一个类方法并在那里休眠30分钟 3) 在30分钟到期之前,通过调用下面的方法检查计时器状态 public String getTimerStatus() { String returnStatus = "Stopped"; for (Object obj : timerService.getTimers()) {

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

要复制此功能的场景如下所示:

1) 启动计时器

2) 在timeout方法中,调用另一个类方法并在那里休眠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()方法时,应用程序挂起,如上所示。


请告诉我这个问题的任何解决方案。

我的想法是t.getInfo()是同步的,或者尝试以另一种方式获取锁。您能提供timeout方法和它调用的其他类方法的代码吗?您使用同步吗?

我的想法是t.getInfo()是同步的,或者尝试以另一种方式获取锁。您能提供timeout方法和它调用的其他类方法的代码吗?您使用同步吗?

可以再显示一些代码吗?我的想法是,您正在管理应该由容器管理的线程。这可能会导致您遇到的问题。您可以再显示一些代码吗?我的想法是,您正在管理应该由容器管理的线程。这可能会导致您遇到的问题