Enterprise Intermédiaire

Remplace les minuteries lourdes d'EJB par ManagedScheduledExecutorService de Jakarta Concurrency pour une planification de tâches plus simple.

✕ Java EE
@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();
    }
}
✓ Jakarta EE 10+
@ApplicationScoped
public class ReportGenerator {
    @Resource
    ManagedScheduledExecutorService scheduler;

    @PostConstruct
    public void init() {
        scheduler.scheduleAtFixedRate(
            this::generateReport,
            0, 24, TimeUnit.HOURS);
    }

    public void generateReport() {
        buildDailyReport();
    }
}
Un problème avec ce code ? Dites-le nous.
🪶

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.

Ancienne Approche
EJB TimerService
Approche Moderne
ManagedScheduledExecutorService
Depuis JDK
11
Difficulté
Intermédiaire
EJB Timer vs Jakarta Scheduler
Disponible

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.

Partager 𝕏 🦋 in