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();
    }
}
এই কোডে সমস্যা দেখছেন? আমাদের জানান।
🪶

কম অ্যানোটেশন নয়েজ (Annotation Noise)

কোনো @ConcurrencyManagement, @Lock, বা @Startup অ্যানোটেশনের প্রয়োজন নেই – কেবল একটি @ApplicationScoped অ্যানোটেশন।

🔧

নমনীয় কনকারেন্সি (Flexible Concurrency)

আপনার প্রয়োজনীয় থ্রেড-সেফটির (thread-safety) জন্য java.util.concurrent লক বা volatile ব্যবহার করুন।

🧪

সহজ টেস্টিং

প্লেইন CDI বিনসগুলো EJB কন্টেইনার ছাড়াই টেস্টে সরাসরি ইনস্ট্যান্ট (instantiate) করা যায়।

পুরনো পদ্ধতি
@Singleton EJB
আধুনিক পদ্ধতি
@ApplicationScoped CDI
JDK থেকে
11
কঠিনতা
মধ্যম
Singleton EJB বনাম CDI @ApplicationScoped
উপলব্ধ

জাকার্তা EE 8 / Java 11 থেকে ব্যাপকভাবে উপলব্ধ৷

Singleton EJBs কনকারেন্সি ম্যানেজমেন্ট (@Lock, @ConcurrencyManagement) এবং ইগার ইনিশিয়ালাইজেশন (@Startup) EJB কন্টেইনারের মধ্যে নিয়ে আসে। একটি CDI @ApplicationScoped বিন অনেক কম আনুষ্ঠানিকতার সাথে একই সিঙ্গেল-ইনস্ট্যান্স লাইফসাইকেল অর্জন করে। যখন কনকারেন্সি কন্ট্রোলের প্রয়োজন হয়, স্ট্যান্ডার্ড java.util.concurrent ইউটিলিটিগুলো EJB লক অ্যানোটেশনগুলোর চেয়ে আরও সূক্ষ্ম-দানা নিয়ন্ত্রণ (finer-grained control) প্রদান করে।