Использование таймеров 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