Enterprise Fortgeschritten

Ersetze schwerfällige EJBs durch leichtgewichtige CDI-Beans für Dependency Injection und Transaktionsverwaltung.

✕ 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());
    }
}
Problem mit diesem Code entdeckt? Sag uns Bescheid.
🪶

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.

Alter Ansatz
EJB
Moderner Ansatz
CDI-Bean
Seit JDK
11
Schwierigkeitsgrad
Fortgeschritten
EJB versus CDI
Verfügbar

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.

Teilen 𝕏 🦋 in