Enterprise Orta

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.

✕ 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();
    }
}
Bu kodda bir sorun mu gördünüz? Bize bildirin.
🪶

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.

Eski Yaklaşım
EJB TimerService
Modern Yaklaşım
ManagedScheduledExecutorService
JDK'dan itibaren
11
Zorluk
Orta
EJB Timer ve Jakarta Scheduler
Mevcut

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.

Paylaş 𝕏 🦋 in