Enterprise متوسط

استبدل Singleton EJBs بحبّات CDI @ApplicationScoped لإدارة الحالة المشتركة الأبسط.

✕ Java EE
@Singleton
@Startup
@ConcurrencyManagement(
    ConcurrencyManagementType.CONTAINER)
public class ConfigCache {
    private Map<String, String> cache;

    @PostConstruct
    public void load() {
        cache = loadFromDatabase();
    }

    @Lock(LockType.READ)
    public String get(String key) {
        return cache.get(key);
    }

    @Lock(LockType.WRITE)
    public void refresh() {
        cache = loadFromDatabase();
    }
}
✓ Jakarta EE 8+
@ApplicationScoped
public class ConfigCache {
    private volatile Map<String, String> cache;

    @PostConstruct
    public void load() {
        cache = loadFromDatabase();
    }

    public String get(String key) {
        return cache.get(key);
    }

    public void refresh() {
        cache = loadFromDatabase();
    }
}
هل ترى مشكلة في هذا الكود؟ أخبرنا.
🪶

ضجيج تعليقات توضيحية أقل

لا @ConcurrencyManagement أو @Lock أو @Startup — مجرد تعليق توضيحي @ApplicationScoped واحد.

🔧

تزامن مرن

استخدم أقفال java.util.concurrent أو volatile للأمان المطلوب بالضبط للخيوط.

🧪

اختبار سهل

يمكن إنشاء حبّات CDI العادية مباشرةً في الاختبارات دون حاوية EJB.

الأسلوب القديم
@Singleton EJB
الأسلوب الحديث
@ApplicationScoped CDI
منذ JDK
11
الصعوبة
متوسط
Singleton EJB مقابل CDI @ApplicationScoped
متاح

متاح على نطاق واسع منذ Jakarta EE 8 / Java 11

تجمع Singleton EJBs إدارة التزامن (@Lock و @ConcurrencyManagement) والتهيئة المبكرة (@Startup) في حاوية EJB. تُحقق حبّة CDI @ApplicationScoped نفس دورة حياة المثيل الواحد بطقوس أقل بكثير. عند الحاجة لضبط التزامن توفر أدوات java.util.concurrent تحكماً أدق من تعليقات قفل EJB.

مشاركة 𝕏 🦋 in