Timer EJB vs Jakarta Scheduler
Sostituisci i pesanti timer EJB con ManagedScheduledExecutorService di Jakarta Concurrency per una pianificazione più semplice.
@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();
}
}
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.
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.