EJB3 + JEE6: Что такое постоянный таймер? - PullRequest
31 голосов
/ 20 апреля 2010

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

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

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

1 Ответ

51 голосов
/ 23 апреля 2010

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

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

...