Zastąp ciężkie EJB lekkimi beanami CDI do wstrzykiwania zależności i zarządzania transakcjami.
Porównanie kodu
✕ 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());
}
}
Widzisz problem z tym kodem? Daj nam znać.
Dlaczego nowoczesne podejście wygrywa
Lekki
Beany CDI to zwykłe klasy Java bez interfejsów ani deskryptorów specyficznych dla EJB.
Ujednolicone wstrzykiwanie
@Inject działa dla każdego zarządzanego beana, zasobów JAX-RS i komponentów Jakarta EE jednakowo.
Łatwe testowanie jednostkowe
Zwykłe klasy bez narzutu proxy EJB są proste do instancjonowania i mockowania.
Stare podejście
EJB
Nowoczesne podejście
Bean CDI
Od JDK
11
Poziom trudności
Średniozaawansowany
Wsparcie JDK
EJB kontra CDI
Dostępne
Szeroko dostępne od Jakarta EE 8 / Java 11
Jak to działa
CDI (Contexts and Dependency Injection) zapewnia to samo wstrzykiwanie zależności i zarządzanie transakcjami co EJB, ale jako zwykłe klasy Java bez interfejsów ani klas bazowych specyficznych dla kontenera. Zasięgi takie jak @ApplicationScoped i @RequestScoped kontrolują cykl życia, a @Transactional zastępuje obowiązkową semantykę transakcji EJB.
Powiązana dokumentacja
Dowód