2011-11-23 2 views
1

Java EE 서버에서 예약 작업이 필요하며 Quartz 또는 Timer 서비스 사용법을 알고 있습니다.동적 변경 타이머 서비스 또는 석영

우리가 생산 일정을 변경하거나 배치를 수동으로 트리거하려면 어떻게해야합니까?

기존 솔루션에서는 서블릿을 사용하여 작업을 실행합니다. 그런 다음 http 클라이언트 (예 : lynx)와 함께 cronjob을 사용하여 서블릿을 실행하십시오. 구현하기 쉽고 제작시 변경할 수 있습니다.

+0

당신은 크론 표현 변경에 대한 요구하고있다? 해당되는 경우'rescheduleJob'을 호출하는 JMX MBean 리스너를 사용할 수 있습니다. – zeller

답변

0

나는이 정확한 문제로 인해 타이머를 전혀 만족스럽지 못했습니다. 실제로 상태를 모니터하거나 수정할 수는 없습니다.

내가 권장하는 것은 두 번째 레이어 작업 관리자 클래스입니다. 이 클래스를 호출하면 시간 'X'에 대해 Java EE 타이머를 예약하고 'X'시점에 '작업'을 실행한다는 사실을 기록합니다. 이 시간이되면 Java EE 타이머는이 작업 관리자 클래스를 호출하여 작업을 찾고 작업을 호출합니다.

이 기능을 사용하면 "예약 취소"기능을 쓸 수 있습니다. 스케줄을 변경하면 해당 작업이 제거됩니다. Java EE 타이머가 시간 'X'에 호출 할 때이 클래스는 어떤 작업도 찾지 못하기 때문에 무시합니다.

은 또한 이전 항목을 제거하는 "일정 변경"기능을 구현하고, 'Y'시간 'Y'에 대한 자바 EE 타이머 예약 시간에 새 항목을 만들 수 있습니다. Java EE 타이머는 'X'시간과 'Y'시간에 도착하지만 'Y'시간 만 적용됩니다.

따라서 수동 트리거링은 "스케줄 변경"을 호출하는 서블릿을 지금 당장 가지고 있어야하는 문제입니다.

한 다른 세부

은 조심해야합니다 : 타이머 이벤트가 완전히 신뢰할 수 없기 때문에, 우리는 현재 시간 전에 예정되었던 모든 작업을 찾을 수있는이 클래스를 구현하고 그 순간에 그들 모두를 실행합니다. 그런 다음 5 분마다 Java EE 타이머 이벤트를 추가로 예약합니다. 그 타이머들은 어떤 이유로 든 다른 이유로 남겨진 일자리를 찾아 낼 것입니다. 작업 대기열이 지속적 경우는 다음 서버를 다시 시작하면서,이 타이머가 꺼했는데 정확히 순간에 다운 된 것일 수도 중요합니다. 문제 없습니다 : 자바 EE 타이머 이벤트 자체는 그들은 단지 작업 핸들러를 깨워 역할, 의미가 없다, 그래서 모든 오래된 작업을 실행할 수 있습니다.