Статьи

RESTful таймеры в Java EE

В этом посте…

  • Вихревой тур по таймерам 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, представляющая конфигурацию расписания)
    1
    2
    3
    4
    5
    6
    @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)
    1
    2
    3
    4
    5
    6
    7
    8
    @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)
    1
    2
    3
    4
    5
    6
    7
    @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();
    }
  • УДАЛИТЬ (отменить) существующий таймер
    1
    2
    3
    4
    5
    @DELETE
    @Path("{id}")
    public void cancel(@PathParam("id") String name) {
        auditScheduler.cancel(name);
    }
  • Используйте аннотированные POJO JAXB для представления конфигурации и деталей планировщика
  • Использовать поддержку JSON по умолчанию в Java EE 7

WADL должен рассказать историю:

успокоительные-таймеры EJB-wadl1

Ура!

Ссылка: Таймеры RESTful в Java EE от нашего партнера JCG Абхишека Гупты в блоге Object Oriented ..