استبدل EJBs الثقيلة بحبّات CDI الخفيفة لحقن التبعيات والمعاملات.
مقارنة الكود
✕ Java EE
@Stateless
public class OrderEJB {
@EJB
private InventoryEJB inventory;
public void placeOrder(Order order) {
// container-managed transaction
inventory.reserve(order.getItem());
}
}
✓ Jakarta EE 8+
@ApplicationScoped
public class OrderService {
@Inject
private InventoryService inventory;
@Transactional
public void placeOrder(Order order) {
inventory.reserve(order.getItem());
}
}
هل ترى مشكلة في هذا الكود؟ أخبرنا.
لماذا يتفوق الأسلوب الحديث
خفيف الوزن
حبّات CDI هي فئات Java عادية دون واجهات أو واصفات خاصة بـ EJB.
حقن موحّد
@Inject يعمل لكل حبّة مُدارة وموارد JAX-RS ومكوّنات Jakarta EE.
اختبار وحدة سهل
الفئات العادية دون تكلفة وكيل EJB سهلة الإنشاء والمحاكاة.
الأسلوب القديم
EJB
الأسلوب الحديث
حبّة CDI
منذ JDK
11
الصعوبة
متوسط
دعم JDK
EJB مقابل CDI
متاح
متاح على نطاق واسع منذ Jakarta EE 8 / Java 11
كيف يعمل
يوفر CDI (السياقات وحقن التبعيات) نفس حقن التبعيات وإدارة المعاملات كـ EJBs لكن كفئات Java عادية دون واجهات أو مصفوفات خاصة بالحاوية. تتحكم النطاقات مثل @ApplicationScoped و @RequestScoped في دورة الحياة، و@Transactional تستبدل دلالات معاملة EJB الإلزامية.
توثيق ذو صلة