Enterprise মধ্যম

কন্টেইনার-ম্যানেজড রিসোর্সগুলোর জন্য ফ্র্যাজাইল (fragile) JNDI স্ট্রিং লুকআপের পরিবর্তে টাইপ-সেফ CDI ইনজেকশন ব্যবহার করুন।

✕ Java EE
public class OrderService {
    private DataSource ds;

    public void init() throws NamingException {
        InitialContext ctx = new InitialContext();
        ds = (DataSource) ctx.lookup(
            "java:comp/env/jdbc/OrderDB");
    }

    public List<Order> findAll()
            throws SQLException {
        try (Connection con = ds.getConnection()) {
            // query orders
        }
    }
}
✓ Jakarta EE 8+
@ApplicationScoped
public class OrderService {
    @Inject
    @Resource(name = "jdbc/OrderDB")
    DataSource ds;

    public List<Order> findAll()
            throws SQLException {
        try (Connection con = ds.getConnection()) {
            // query orders
        }
    }
}
এই কোডে সমস্যা দেখছেন? আমাদের জানান।
🔒

টাইপ-সেফ ওয়্যারিং (Type-safe Wiring)

ইনজেকশন এররগুলো ডিপ্লয়মেন্টের সময় ধরা পড়ে, স্ট্রিং লুকআপের মাধ্যমে রানটাইমে নয়।

🗑️

বয়লারপ্লেট (Boilerplate) নেই

InitialContext তৈরি, JNDI নাম স্ট্রিং এবং NamingException হ্যান্ডলিংয়ের প্রয়োজন দূর করে।

🧪

টেস্টেবল (Testable)

ডিপেন্ডেন্সিগুলো ইনজেক্টেড ফিল্ড, যা ইউনিট টেস্টে মক (mocks) দিয়ে সহজে প্রতিস্থাপন করা যায়।

পুরনো পদ্ধতি
JNDI Lookup
আধুনিক পদ্ধতি
CDI @Inject
JDK থেকে
11
কঠিনতা
মধ্যম
JNDI Lookup বনাম CDI Injection
উপলব্ধ

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

প্রচলিত JNDI প্যাটার্ন আপনাকে স্ট্রিং-ভিত্তিক রিসোর্স নাম ব্যবহার করতে, NamingException হ্যান্ডেল করতে এবং InitialContext ম্যানেজ করতে বাধ্য করে। @Inject (বা কন্টেইনার রিসোর্সগুলির জন্য @Resource) সহ CDI ইনজেকশন কন্টেইনারকে স্বয়ংক্রিয়ভাবে ডিপেন্ডেন্সি (dependencies) ওয়্যার করতে সাহায্য করে। টাইপো (typos) কম্পাইল-টাইম এররে পরিণত হয় এবং ক্লাসগুলো সহজে টেস্ট করা যায় কারণ ডিপেন্ডেন্সিগুলো সরাসরি ইনজেক্ট করা সম্ভব।