Как добавить службу таймера в Eclipse MicroProfile

В Java EE я использовал службу таймера EJB для планирования задачи:

@Stateless
public class TestSchedule {

    @Schedule(second = "*/30", minute = "*", hour = "*")
    public void processFiles() {

    }
}

Поскольку этот подход не поддерживается в Eclipse Micro Profile... как это реализовать?


person VWeber    schedule 17.11.2018    source источник


Ответы (2)


Использование таймеров EJB

Если вы используете WebSphere Liberty или OpenLiberty, вы можете просто включить ejbLite-3.2 в файле server.xml, чтобы просто использовать функции EJB Lite (включая непостоянные таймеры EJB):

<featureManager>
  <feature>ejbLite-3.2</feature>
</feature>

Если вам нужны постоянные таймеры EJB, вы можете включить полный ejb-3.2 функция.

Обратите внимание, что код, который вы разместили в исходном вопросе, принадлежит JavaEE, а не MicroProfile, но серверы Liberty поддерживают совместное использование технологий JavaEE и MicroProfile на одном сервере.


Использование параллелизма Java EE

Другой более современной/облегченной альтернативой непостоянным таймерам EJB являются утилиты JavaEE Concurrency. Это можно включить с помощью функции concurrent-1.0 в файле server.xml:

<featureManager>
  <feature>concurrent-1.0</feature>
</featureManager>

Чтобы использовать его, вы можете отправить объект Callable или Runnable в ManagedScheduledExecutorService следующим образом:

@Resource
ManagedScheduledExecutorService exec;

// ...

public void startWork() {
  // Use a Java 8 lambda to define the Runnable
  exec.scheduleAtFixedRate(() -> {
    System.out.println("This will run every 30 seconds.");
  }, 30, TimeUnit.SECONDS);
}

Если вы только начинаете писать это приложение, я бы порекомендовал использовать Java EE Concurrency Utilities вместо таймеров EJB, поскольку EE Concurrency является более легким, а MicroProfile в настоящее время ищет возможность включения аналогичной функциональности с помощью Проект MicroProfile Concurrency. Однако если вам нужно использовать постоянные задачи, используйте таймеры EJB.

person Andy Guibert    schedule 17.11.2018

Хорошо, нашел решение добавить минимум в payara-micro: добавить веб-зависимости Java EE к зависимостям maven.

person VWeber    schedule 17.11.2018