Enterprise Orta

Singleton EJB ile CDI @ApplicationScoped Karşılaştırması

Singleton EJB'leri daha basit paylaşılan durum yönetimi için CDI @ApplicationScoped bean'lerle değiştirin.

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

Daha az açıklama gürültüsü

@ConcurrencyManagement, @Lock veya @Startup yok — yalnızca tek bir @ApplicationScoped açıklaması.

🔧

Esnek eşzamanlılık

Tam olarak ihtiyacınız olan iş parçacığı güvenliği için java.util.concurrent kilitleri veya volatile kullanın.

🧪

Kolay test

Düz CDI bean'leri, EJB kapsayıcısı olmadan testlerde doğrudan örneklendirilebilir.

Eski Yaklaşım
@Singleton EJB
Modern Yaklaşım
@ApplicationScoped CDI
JDK'dan itibaren
11
Zorluk
Orta
Singleton EJB ile CDI @ApplicationScoped Karşılaştırması
Mevcut

Jakarta EE 8 / Java 11'den itibaren geniş çapta kullanılabilir

Singleton EJB'ler, eşzamanlılık yönetimini (@Lock, @ConcurrencyManagement) ve istekli başlatmayı (@Startup) EJB kapsayıcısına dahil eder. Bir CDI @ApplicationScoped bean, çok daha az törenle aynı tek örnek yaşam döngüsünü elde eder. Eşzamanlılık kontrolü gerektiğinde, standart java.util.concurrent yardımcı programları EJB kilit açıklamalarından daha ince taneli kontrol sağlar.

Paylaş 𝕏 🦋 in