Enterprise Intermedio

Sostituisci i pesanti timer EJB con ManagedScheduledExecutorService di Jakarta Concurrency per una pianificazione più semplice.

✕ 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();
    }
}
Vedi un problema con questo codice? Faccelo sapere.
🪶

Boilerplate ridotto

Nessun callback @Timeout o ScheduleExpression — usa l'API standard ScheduledExecutorService.

🧪

Migliore testabilità

Metodi semplici e mock dell'executor rendono i test unitari semplici senza container EJB.

☁️

Cloud-native friendly

Gli executor gestiti si integrano con il ciclo di vita del container e funzionano in runtime leggeri.

Approccio Vecchio
TimerService EJB
Approccio Moderno
ManagedScheduledExecutorService
Dal JDK
11
Difficoltà
Intermedio
Timer EJB vs Jakarta Scheduler
Disponibile

Disponibile da Jakarta EE 10 / Concurrency 3.0

I timer EJB richiedono un bean @Stateless o @Singleton con un callback @Timeout ed espressioni di pianificazione basate su XML o annotazioni. Jakarta Concurrency fornisce ManagedScheduledExecutorService, che usa la familiare API di pianificazione java.util.concurrent. Il risultato è meno boilerplate, test unitari più facili e nessuna dipendenza dal container EJB.

Condividi 𝕏 🦋 in