EJB Timer ve Jakarta Scheduler
Ağır EJB zamanlayıcıları, daha basit zamanlama için Jakarta Concurrency'nin ManagedScheduledExecutorService'i ile değiştirin.
@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();
}
}
Azaltılmış şablon kod
@Timeout geri çağrısı veya ScheduleExpression yok — standart ScheduledExecutorService API'sini kullanın.
Daha iyi test edilebilirlik
Düz yöntemler ve executor mock'ları, EJB kapsayıcı olmadan birim testini basit hale getirir.
Buluta uyumlu
Yönetilen yürütücüler, kapsayıcı yaşam döngüsüyle entegre olur ve hafif çalışma ortamlarında çalışır.
Jakarta EE 10 / Concurrency 3.0'dan itibaren kullanılabilir
EJB zamanlayıcıları, @Timeout geri çağrısı olan bir @Stateless veya @Singleton bean ve XML ya da ek açıklama tabanlı zamanlama ifadeleri gerektirir. Jakarta Concurrency, tanıdık java.util.concurrent zamanlama API'sini kullanan ManagedScheduledExecutorService sağlar. Sonuç: daha az şablon kod, daha kolay birim testi ve EJB kapsayıcı bağımlılığı yok.