EJB vs CDI
Sostituisci gli EJB pesanti con bean CDI leggeri per dependency injection e transazioni.
Confronto Codice
✕ 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());
}
}
Vedi un problema con questo codice? Faccelo sapere.
Perché vince l'approccio moderno
Leggero
I bean CDI sono semplici classi Java senza interfacce o descrittori EJB.
Iniezione unificata
@Inject funziona per ogni bean gestito, risorse JAX-RS e componenti Jakarta EE.
Test unitari facili
Le classi semplici senza overhead del proxy EJB sono facili da istanziare e simulare.
Approccio Vecchio
EJB
Approccio Moderno
Bean CDI
Dal JDK
11
Difficoltà
Intermedio
Supporto JDK
EJB vs CDI
Disponibile
Ampiamente disponibile da Jakarta EE 8 / Java 11
Come funziona
CDI (Contexts and Dependency Injection) fornisce la stessa dependency injection e gestione delle transazioni degli EJB, ma come semplici classi Java senza interfacce o superclassi specifiche per container. Gli scope come @ApplicationScoped e @RequestScoped controllano il ciclo di vita, e @Transactional sostituisce la semantica transazionale obbligatoria degli EJB.
Documentazione Correlata