Ersetze schwerfällige EJBs durch leichtgewichtige CDI-Beans für Dependency Injection und Transaktionsverwaltung.
@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());
}
}
Leichtgewichtig
CDI-Beans sind einfache Java-Klassen ohne EJB-spezifische Interfaces oder Deskriptoren.
Einheitliche Injektion
@Inject funktioniert für jeden verwalteten Bean, JAX-RS-Ressourcen und Jakarta-EE-Komponenten gleichermaßen.
Einfaches Unit-Testing
Einfache Klassen ohne EJB-Proxy-Overhead lassen sich unkompliziert instanziieren und mocken.
Weitgehend verfügbar seit Jakarta EE 8 / Java 11
CDI (Contexts and Dependency Injection) bietet dieselbe Dependency Injection und Transaktionsverwaltung wie EJBs, jedoch als einfache Java-Klassen ohne containerspezifische Interfaces oder Superklassen. Scopes wie @ApplicationScoped und @RequestScoped steuern den Lebenszyklus, und @Transactional ersetzt die obligatorische EJB-Transaktionssemantik.