Подтвердить что ты не робот

EJB3 + JEE6: что такое постоянный таймер?

Я как раз собираюсь использовать новый EJB3 TimerService (как часть Java EE 6), и, как обычно, меня впечатляет краткость JavaDoc:)

Знаете ли вы, каков эффект свойства persistent объекта TimerConfig?

JavaDoc TimerConfig говорит: Постоянное свойство определяет, имеет ли соответствующий таймер время жизни, которое охватывает JVM, в котором оно был создан. Он является необязательным и по умолчанию имеет значение true.

4b9b3361

Ответ 1

Постоянное свойство означает, что контейнер должен сохранять состояние таймера в базе данных. Это важно, если вам нужно гарантировать, что таймер будет срабатывать, даже если сервер отключен (намеренно или сбой). Когда сервер возвращается в сеть, требуется выполнить пропущенные таймеры. Установка таймера как постоянная также имеет побочный эффект обеспечения того, чтобы таймер выполнялся только на одном сервере JVM (но не обязательно на том, что его создал), что бы это ни значило для вашего продукта. Например, в кластерной серверной среде это обычно означает, что даже если модуль EJB работает на 3 JVM, ровно одна JVM будет выполнять таймер.

persistent = true был единственным вариантом, доступным до EJB 3.1. Некоторые операции таймера не являются достаточно критичными, чтобы гарантировать этот уровень надежности, поэтому опция была добавлена, чтобы обеспечить возможность использования нестационарных таймеров. Установка таймера как непостоянного также имеет побочный эффект обеспечения его запуска в JVM, в котором он был создан. Это может быть полезно для обновления кэша в памяти или статического HTML.