EJB versus CDI
Remplace les lourds EJB par des beans CDI légers pour l'injection de dépendances et les transactions.
@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());
}
}
Léger
Les beans CDI sont des classes Java simples sans interfaces ni descripteurs EJB spécifiques.
Injection unifiée
@Inject fonctionne pour n'importe quel bean géré, ressources JAX-RS et composants Jakarta EE de la même façon.
Tests unitaires simples
Des classes simples sans la surcharge du proxy EJB sont faciles à instancier et à simuler.
Disponible depuis Jakarta EE 8 / Java 11
CDI (Contexts and Dependency Injection) offre la même injection de dépendances et gestion des transactions que les EJB, mais sous forme de classes Java simples sans interfaces ni superclasses spécifiques au conteneur. Les portées comme @ApplicationScoped et @RequestScoped contrôlent le cycle de vie, et @Transactional remplace la sémantique transactionnelle obligatoire des EJB.