В этом посте…
- Вихревой тур по таймерам 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})publicResponse schedule(@HeaderParam("name")finalString timerName,finalScheduleConfiguration config) {auditScheduler.schedule(from(config),newTimerConfig(timerName, config.isPersistent()));returnResponse.created(UriBuilder.fromResource(AuditSchedulerResource.class).path(timerName).build(timerName)).build();} - ПОЛУЧИТЕ все активные таймеры и их соответствующие данные (представление JSON / XML)
12345678
@GET@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})publicResponse getAllTimers() {List<String> ejbTimers = auditScheduler.getAllTimers();List<ScheduledTimerInfo> timers = ejbTimers.stream().map((id) -> auditScheduler.getTimerInfo(id)).collect(Collectors.toList());GenericEntity<List<ScheduledTimerInfo>> entities =newGenericEntity<List<ScheduledTimerInfo>>(timers) {};returnResponse.ok(entities).build();} - ПОЛУЧИТЬ информацию для определенного таймера (представление JSON / XML)
1234567
@GET@Path("{id}")@Produces({MediaType.APPLICATION_XML, MediaType.APPLICATION_JSON})publicResponse getTimerInfo(@PathParam("id") String name) {ScheduledTimerInfo info = auditScheduler.getTimerInfo(name);returnResponse.ok(info).build();} - УДАЛИТЬ (отменить) существующий таймер
12345
@DELETE@Path("{id}")publicvoidcancel(@PathParam("id") String name) {auditScheduler.cancel(name);} - Используйте аннотированные POJO JAXB для представления конфигурации и деталей планировщика
- Использовать поддержку JSON по умолчанию в Java EE 7
WADL должен рассказать историю:
Ура!
| Ссылка: | Таймеры RESTful в Java EE от нашего партнера JCG Абхишека Гупты в блоге Object Oriented .. |
