Enterprise متوسط

استبدل مؤقتات EJB الثقيلة بـ ManagedScheduledExecutorService من Jakarta Concurrency للجدولة الأبسط.

✕ 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();
    }
}
هل ترى مشكلة في هذا الكود؟ أخبرنا.
🪶

كليشيه أقل

لا ردّ اتصال @Timeout أو ScheduleExpression — استخدم واجهة برمجة ScheduledExecutorService القياسية.

🧪

قابلية اختبار أفضل

الدوال البسيطة ومحاكيات المنفّذ تجعل اختبار الوحدة مباشراً دون حاوية EJB.

☁️

صديق للسحابة الأصلية

تتكامل المنفّذات المُدارة مع دورة حياة الحاوية وتعمل في بيئات تشغيل خفيفة الوزن.

الأسلوب القديم
EJB TimerService
الأسلوب الحديث
ManagedScheduledExecutorService
منذ JDK
11
الصعوبة
متوسط
EJB Timer مقابل مُجدول Jakarta
متاح

متاح منذ Jakarta EE 10 / Concurrency 3.0

تتطلب مؤقتات EJB حبّةً @Stateless أو @Singleton مع ردّ اتصال @Timeout وتعبيرات جدولة قائمة على XML أو التعليقات التوضيحية. توفر Jakarta Concurrency الـ ManagedScheduledExecutorService الذي يستخدم واجهة برمجة الجدولة المألوفة java.util.concurrent. والنتيجة كليشيهات أقل واختبار وحدات أسهل وعدم الاعتماد على حاوية EJB.

مشاركة 𝕏 🦋 in