ตัวจับเวลา EJB จะหยุดทำงานเมื่อตรวจสอบสถานะ

ฉันกำลังใช้ EJB Timers ในแอปพลิเคชันของฉัน แต่แอปพลิเคชันค้างทุกครั้งที่ฉันตรวจสอบสถานะตัวจับเวลา

สถานการณ์จำลองที่จะจำลองสิ่งนี้อยู่ด้านล่าง:

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() ดังที่แสดงด้านบน

โปรดแจ้งให้เราทราบวิธีแก้ปัญหาสำหรับปัญหานี้


person Ran    schedule 01.02.2012    source แหล่งที่มา
comment
คุณช่วยแสดงรหัสเพิ่มเติมได้ไหม? ความคิดของฉันคือคุณกำลังจัดการเธรดที่ควรจัดการโดยคอนเทนเนอร์ นี่อาจทำให้เกิดปัญหาที่คุณกำลังประสบอยู่   -  person perissf    schedule 03.02.2012


คำตอบ (1)


ความคิดของฉันคือ t.getInfo() ได้รับการซิงโครไนซ์หรือพยายามล็อคด้วยวิธีอื่น คุณช่วยระบุรหัสสำหรับวิธีหมดเวลาและสำหรับวิธีคลาสอื่นที่มันเรียกได้ไหม คุณใช้การซิงโครไนซ์หรือไม่?

person balage    schedule 18.02.2012