В этом посте…
- Вихревой тур по таймерам EJB
- Работа с таймерами EJB на лету через простой интерфейс REST с примером реализации
Обновление (14 июля 2015 г.)
Внешний интерфейс приложения теперь доступен в OpenShift . Так как я начинающий пользователь, я собрал это приложение HTML5 + AngularJS с помощью других источников 🙂 Так что это может показаться немного неуклюжим. Пожалуйста, потерпите меня, пока я пытаюсь улучшить это!
Из пользовательского интерфейса вы можете:
- посмотрите на все активные таймеры
- создать таймер
- отменить таймер
Обновление (14 июля 2015 г.)
Аннотация EJB @Schedule очень удобна, если вам нужно автоматически создавать таймеры. Можно использовать cron-подобное выражение для настройки соответствующего расписания. Если вам нужно больше гибкости, старый добрый TimerService работает как шарм.
Быстрый фон
- Интерфейс TimerService был представлен в EJB 2.1 [да .. J2EE дней! ;-)]
- Используется для создания объектов Timer программно
- Используется для работы в сочетании с реализацией интерфейса TimedObject [pre EJB 3.0], служащего обратным вызовом для триггеров таймера
- Начиная с EJB 3.0, аннотация @Timeout использовалась для маркировки метода в bean-компоненте (не имеющем состояния / синглтоном / управляемым сообщением), который будет действовать как получатель обратных вызовов таймера из контейнера EBJ
- В EJB 3.1 все было улучшено благодаря введению ScheduleExpression, которое позволяло детально планировать таймеры — это был программный эквивалент @Schedule
Компоненты, связанные с таймером EJB (для быстрого ознакомления)
Таймеры RESTful
Можно легко представить простой интерфейс RESTful для работы с таймерами EJB. Такие действия, как создание таймеров, получение сведений о таймере, а также отмена таймеров, могут выполняться на лету.
Простая реализация доступна через этот проект Github . Это простой проект Java EE 7 Maven, построенный на Netbeans. Вы должны быть в состоянии установить это легко.
Вот суть
- POST запрос на планирование таймера (полезная нагрузка JSON / XML, представляющая конфигурацию расписания)
123456
@POST
@Consumes
({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public
Response schedule(
@HeaderParam
(
"name"
)
final
String timerName,
final
ScheduleConfiguration config) {
auditScheduler.schedule(from(config),
new
TimerConfig(timerName, config.isPersistent()));
return
Response.created(UriBuilder.fromResource(AuditSchedulerResource.
class
).path(timerName).build(timerName)).build();
}
- ПОЛУЧИТЕ все активные таймеры и их соответствующие данные (представление JSON / XML)
12345678
@GET
@Produces
({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public
Response getAllTimers() {
List<String> ejbTimers = auditScheduler.getAllTimers();
List<ScheduledTimerInfo> timers = ejbTimers.stream().map((id) -> auditScheduler.getTimerInfo(id)).collect(Collectors.toList());
GenericEntity<List<ScheduledTimerInfo>> entities =
new
GenericEntity<List<ScheduledTimerInfo>>(timers) {};
return
Response.ok(entities).build();
}
- ПОЛУЧИТЬ информацию для определенного таймера (представление JSON / XML)
1234567
@GET
@Path
(
"{id}"
)
@Produces
({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})
public
Response getTimerInfo(
@PathParam
(
"id"
) String name) {
ScheduledTimerInfo info = auditScheduler.getTimerInfo(name);
return
Response.ok(info).build();
}
- УДАЛИТЬ (отменить) существующий таймер
12345
@DELETE
@Path
(
"{id}"
)
public
void
cancel(
@PathParam
(
"id"
) String name) {
auditScheduler.cancel(name);
}
- Используйте аннотированные POJO JAXB для представления конфигурации и деталей планировщика
- Использовать поддержку JSON по умолчанию в Java EE 7
WADL должен рассказать историю:
Ура!
Ссылка: | Таймеры RESTful в Java EE от нашего партнера JCG Абхишека Гупты в блоге Object Oriented .. |