Курс "XXX-000-EJB Architecture"

advertisement
Рассматриваемые темы
 EJB Timer сервис
 Создание таймера
 Отмена и сохранение таймера
 Получение информации о таймере
 Транзакции и таймеры
11-1
EJB Timer сервис
Использование таймеров в EJB
 Таймеры используются для запуска
определенного обработчика по
определенному во времени событию
 Таймеры могут срабатывать:
 В конкретно определенное время (10:00
01 января 2010 года)
 По прошествии определенного времени
(через 30 минут)
 Через определенные интервалы
11-2
времени (каждые 12 часов)
EJB Timer сервис
Метод Timeout
 При срабатывании таймера контейнер
вызывает метод с аннотацией @Timeout
 Метод должен:
 Возвращать void;
 Принимать параметр типа Timer
 Не иметь каких-либо исключений:
@Timeout
public void timeout(Timer timer) {
System.out.println("Timeout!");
}
11-3
Рассматриваемые темы
 EJB Timer сервис
 Создание таймера
 Работа с таймерами
 Транзакции и таймеры
11-4
Создание таймера
Интерфейс TimerService
 Для создания таймера используются
методы интерфейса TimerService
 Экземпляр интерфейса
TimerService получают с помощью
Dependency Injection:
@Resource
TimerService timerService;
11-5
Создание таймера
Методы для создания таймера
 Для создания таймера используются
методы createTimer интерфейса
TimerService




createTimer(long,
createTimer(long,
createTimer(Date,
createTimer(Date,
Serializable)
long, Serializable)
Serializable)
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
таймера не происходило
Транзакции и таймеры
Контейнерные транзакции
 В случае контейнерных (containermanaged) транзакций метод с аннотацией
Timeout по умолчанию имеет атрибут
транзакции Required или RequiresNew
 Это необходимо для обеспечения
целостности данных
 В этом случае контейнер создает новую
транзакцию перед вызовом метода
Timeout
11-14
Рассмотренные темы
 EJB Timer сервис
 Создание таймера
 Работа с таймерами
 Транзакции и таймеры
11-15
Практика
Упражнение
Использование таймера в EJB-приложении.
11-16
Download