Enterprise متوسط

استبدل عمليات بحث 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
        }
    }
}
هل ترى مشكلة في هذا الكود؟ أخبرنا.
🔒

توصيل آمن من حيث النوع

تُكتشف أخطاء الحقن وقت النشر لا وقت التشغيل عبر عمليات البحث النصية.

🗑️

لا كليشيه

يُزيل إنشاء InitialContext وسلاسل أسماء JNDI ومعالجة NamingException.

🧪

قابل للاختبار

التبعيات هي حقول محقونة يمكن استبدالها بسهولة بمحاكيات في اختبارات الوحدة.

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

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

يُجبرك نمط JNDI التقليدي على استخدام أسماء موارد قائمة على السلاسل ومعالجة NamingException وإدارة InitialContext. يسمح حقن CDI بـ @Inject (أو @Resource لموارد الحاوية) للحاوية بتوصيل التبعيات تلقائياً. تصبح الأخطاء المطبعية أخطاء وقت الترجمة والفئات أسهل في الاختبار لأن التبعيات يمكن حقنها مباشرةً.

مشاركة 𝕏 🦋 in