بحث JNDI مقابل حقن CDI
استبدل عمليات بحث 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
الصعوبة
متوسط
دعم JDK
بحث JNDI مقابل حقن CDI
متاح
متاح على نطاق واسع منذ Jakarta EE 8 / Java 11
كيف يعمل
يُجبرك نمط JNDI التقليدي على استخدام أسماء موارد قائمة على السلاسل ومعالجة NamingException وإدارة InitialContext. يسمح حقن CDI بـ @Inject (أو @Resource لموارد الحاوية) للحاوية بتوصيل التبعيات تلقائياً. تصبح الأخطاء المطبعية أخطاء وقت الترجمة والفئات أسهل في الاختبار لأن التبعيات يمكن حقنها مباشرةً.
توثيق ذو صلة