Enterprise Intermedio

Reemplaza los temporizadores pesados de EJB por ManagedScheduledExecutorService de Jakarta Concurrency para una programación de tareas más sencilla.

✕ 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();
    }
}
¿Ves un problema con este código? Cuéntanos.
🪶

Menos código repetitivo

Sin callback @Timeout ni ScheduleExpression — usa la API estándar de ScheduledExecutorService.

🧪

Mejor testabilidad

Métodos simples y mocks de executors hacen las pruebas unitarias directas sin contenedor EJB.

☁️

Apto para la nube

Los executors gestionados se integran con el ciclo de vida del contenedor y funcionan en runtimes ligeros.

Enfoque Antiguo
EJB TimerService
Enfoque Moderno
ManagedScheduledExecutorService
Desde JDK
11
Dificultad
Intermedio
EJB Timer vs Jakarta Scheduler
Disponible

Disponible desde Jakarta EE 10 / Concurrency 3.0

Los temporizadores EJB requieren un bean @Stateless o @Singleton con un callback @Timeout y expresiones de programación basadas en XML o anotaciones. Jakarta Concurrency proporciona ManagedScheduledExecutorService, que utiliza la conocida API de programación de java.util.concurrent. El resultado es menos código repetitivo, pruebas unitarias más fáciles y sin dependencia del contenedor EJB.

Compartir 𝕏 🦋 in