Как служба таймера ejb 3.1 вычисляет время ожидания?

#java #timer #ejb

#java #таймер #ejb

Вопрос:

Я хочу знать, как службы таймера Ejb вычисляют время ожидания? Требуется ли системное время и в зависимости от него вычисляется время ожидания или у него есть внутренний механизм для запуска таймера для самого себя. Если он использует свой собственный механизм, что это такое, и можем ли мы сделать некоторые настройки, чтобы он мог вычислять время ожидания в зависимости от системного времени?

Я искал эту информацию и не нашел никакой соответствующей информации.В настоящее время я использую TimerService в своем коде и программно создал таймеры. Но когда я меняю системное время, таймер работает в соответствии с этим. Тайм-аут возникает после пошагового времени, когда был создан таймер.

Если я не изменю системное время, планировщики будут работать отлично..

Даже если вы можете перенаправить меня на любую такую информацию, это будет помощь gr8.

Любая помощь будет действительно оценена.

Код выглядит следующим образом

 ScheduleExpression everyDayAtTenTwenty = new ScheduleExpression();  
TimerConfig timerConfig =  new TimerConfig();  
timerConfig.setPersistent(false);  
timerConfig.setInfo("testTask");  

everyDayAtTenTwenty.start(date).year("2011,2012").month("Jun").dayOfMonth("19").dayOfWeek("*").hour("16-23").minute("30"); timerConfig.setInfo("testTask : ");  

timerKeeperBeanLocal.scheduleTimer(everyDayAtTenTwenty, timerConfig);  

timerKeeperBeanLocal implementation

 @Resource
    private TimerService timerService;

Timer timer = this.timerService.createCalendarTimer(scheduleExpression, timerConfig);  
  

Теперь я хочу, чтобы планировщик выполнялся 19 июня 2011 и 2012 годов. Теперь текущая дата — 19 июня 2011 года, поэтому сегодня она выполняется, и в тот же день я меняю системную дату на 29 июня 2011 года вместе с соответствующим временем. В таком случае планировщик не работает. То же самое можно протестировать с изменением на несколько часов.
Нужно ли мне делать что-то еще, чтобы работать в соответствии с системным временем.

Заранее спасибо.

Ответ №1:

Служба таймера Ejb использует Java SE time API, которые, в свою очередь, основаны на системном времени. Смотрите

http://download.oracle.com/javase/6/docs/api/java/util/Date.html

И это цитата из спецификаций EJB 3.1:

Хотя длительность таймера выражается в миллисекундных единицах, это связано с тем, что миллисекунда — это единица детализации времени, используемая API-интерфейсами платформы Java SE.

Комментарии:

1. Меня беспокоит то, что после создания таймера и после этого, если изменяется системное время даты, то же самое отражается в уже созданных таймерах. Спасибо за ответ 🙂

2. Да, изменение системной даты повлияет на создаваемые в данный момент таймеры.

3. В моем случае это не работает таким образом с службой таймера EJB 3.1