EJB Timer vs Jakarta Scheduler
Remplace les minuteries lourdes d'EJB par ManagedScheduledExecutorService de Jakarta Concurrency pour une planification de tâches plus simple.
@Stateless
public class ReportGenerator {
@Resource
TimerService timerService;
@PostConstruct
public void init() {
timerService.createCalendarTimer(
new ScheduleExpression()
.hour("2").minute("0"));
}
@Timeout
public void generateReport(Timer timer) {
// runs every day at 02:00
buildDailyReport();
}
}
@ApplicationScoped
public class ReportGenerator {
@Resource
ManagedScheduledExecutorService scheduler;
@PostConstruct
public void init() {
scheduler.scheduleAtFixedRate(
this::generateReport,
0, 24, TimeUnit.HOURS);
}
public void generateReport() {
buildDailyReport();
}
}
Moins de code répétitif
Sans callback @Timeout ni ScheduleExpression — utilise l'API standard de ScheduledExecutorService.
Meilleure testabilité
Des méthodes simples et des mocks d'executors rendent les tests unitaires directs sans conteneur EJB.
Adapté au cloud
Les executors gérés s'intègrent au cycle de vie du conteneur et fonctionnent dans des runtimes légers.
Disponible depuis Jakarta EE 10 / Concurrency 3.0
Les minuteries EJB nécessitent un bean @Stateless ou @Singleton avec un callback @Timeout et des expressions de planification basées sur XML ou annotations. Jakarta Concurrency fournit ManagedScheduledExecutorService, qui utilise l'API de planification bien connue de java.util.concurrent. Le résultat est moins de code répétitif, des tests unitaires plus faciles et sans dépendance au conteneur EJB.