Рассматриваемые темы EJB Timer сервис Создание таймера Отмена и сохранение таймера Получение информации о таймере Транзакции и таймеры 11-1
EJB Timer сервис Таймеры используются для запуска определенного обработчика по определенному во времени событию Таймеры могут срабатывать: В конкретно определенное время (10:00 01 января 2010 года) По прошествии определенного времени (через 30 минут) Через определенные интервалы времени (каждые 12 часов) Использование таймеров в EJB 11-2
EJB Timer сервис При срабатывании таймера контейнер вызывает метод с Метод должен: Возвращать void ; Принимать параметр типа Timer Не иметь каких-либо public void timeout(Timer timer) { System.out.println("Timeout!"); } Метод Timeout 11-3
Рассматриваемые темы EJB Timer сервис Создание таймера Работа с таймерами Транзакции и таймеры 11-4
Создание таймера Для создания таймера используются методы интерфейса TimerService Экземпляр интерфейса TimerService получают с помощью Dependency TimerService timerService; Интерфейс TimerService 11-5
Создание таймера Для создания таймера используются методы createTimer интерфейса TimerService createTimer(long, Serializable) createTimer(long, long, Serializable) createTimer(Date, Serializable) createTimer(Date, long, Serializable) Timer t = timerService. createTimer(1000L, "Timer"); Методы для создания таймера 11-6
Создание таймера Если сервер завершает работу (или падает), таймеры сохраняются и вновь активируются после поднятия сервера Если таймаут истекает в то время, как сервер выключен, таймер сработает при запуске сервера Хотя при создании таймера время указывается в миллисекундах, такая точность не гарантируется контейнером Таймеры устойчивы 11-7
Рассматриваемые темы EJB Timer сервис Создание таймера Работа с таймерами Транзакции и таймеры 11-8
Работа с таймерами Таймеры могут быть отменены: В случае одноразового таймера, контейнер отменяет таймер сразу после вызова метода Timeout В случае вызова метода cancel интерфейса Timer В случае вызова этого метода на уже отмененном таймере, выбрасывается исключение javax.ejb.NoSuchObjectLocalException Отмена таймеров 11-9
Работа с таймерами Таймер может быть сохранен Для этого получают объект TimerHandle с помощью метода Timer.getHandle Этот объект может быть сохранен в БД Для восстановления таймера используется TimerHandle.getTimer Объект TimerHandle не может быть использован удаленными компонентами Сохранение таймеров 11-10
Работа с таймерами Следующие методы интерфейса Timer используются для получения информации о таймере: long getTimeRemaining() Date getNextTimeout() Serializable getInfo() Для получения информации обо всех активных таймерах в bean'е, используется TimerService.getTimers() Получение информации о таймере 11-11
Рассматриваемые темы EJB Timer сервис Создание таймера Работа с таймерами Транзакции и таймеры 11-12
Транзакции и таймеры Обычно создание таймера производится в контексте транзакции Если транзакция откатывается, создание таймера также отменяется Аналогично при отмене таймера внутри транзакции при откате последней отмена таймера так же откатывается В этом случае время таймера сбрасывается как если бы отмены таймера не происходило Использование транзакций 11-13
Транзакции и таймеры В случае контейнерных (container- managed) транзакций метод с аннотацией Timeout по умолчанию имеет атрибут транзакции Required или RequiresNew Это необходимо для обеспечения целостности данных В этом случае контейнер создает новую транзакцию перед вызовом метода Timeout Контейнерные транзакции 11-14
Рассмотренные темы EJB Timer сервис Создание таймера Работа с таймерами Транзакции и таймеры 11-15
Практика Использование таймера в EJB-приложении. Упражнение 11-16