EJB Timer مقابل مُجدول Jakarta
استبدل مؤقتات 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
الصعوبة
متوسط
دعم JDK
EJB Timer مقابل مُجدول Jakarta
متاح
متاح منذ Jakarta EE 10 / Concurrency 3.0
كيف يعمل
تتطلب مؤقتات EJB حبّةً @Stateless أو @Singleton مع ردّ اتصال @Timeout وتعبيرات جدولة قائمة على XML أو التعليقات التوضيحية. توفر Jakarta Concurrency الـ ManagedScheduledExecutorService الذي يستخدم واجهة برمجة الجدولة المألوفة java.util.concurrent. والنتيجة كليشيهات أقل واختبار وحدات أسهل وعدم الاعتماد على حاوية EJB.
توثيق ذو صلة