EJB versus CDI
Reemplaza los pesados EJBs por beans CDI ligeros para inyección de dependencias y transacciones.
@Stateless
public class OrderEJB {
@EJB
private InventoryEJB inventory;
public void placeOrder(Order order) {
// container-managed transaction
inventory.reserve(order.getItem());
}
}
@ApplicationScoped
public class OrderService {
@Inject
private InventoryService inventory;
@Transactional
public void placeOrder(Order order) {
inventory.reserve(order.getItem());
}
}
Ligero
Los beans CDI son clases Java simples sin interfaces ni descriptores específicos de EJB.
Inyección unificada
@Inject funciona para cualquier bean gestionado, recursos JAX-RS y componentes Jakarta EE por igual.
Pruebas unitarias sencillas
Clases simples sin la sobrecarga del proxy EJB son fáciles de instanciar y simular.
Ampliamente disponible desde Jakarta EE 8 / Java 11
CDI (Contexts and Dependency Injection) ofrece la misma inyección de dependencias y gestión de transacciones que los EJBs, pero como clases Java simples sin interfaces ni superclases específicas del contenedor. Los ámbitos como @ApplicationScoped y @RequestScoped controlan el ciclo de vida, y @Transactional reemplaza la semántica transaccional obligatoria de EJB.