Replace heavyweight EJBs with lightweight CDI beans for dependency injection and transactions.
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
Lightweight
CDI beans are plain Java classes with no EJB-specific interfaces or descriptors.
Unified injection
@Inject works for every managed bean, JAX-RS resources, and Jakarta EE components alike.
Easy unit testing
Plain classes without EJB proxy overhead are straightforward to instantiate and mock.
Stare podejście
EJB
Nowoczesne podejście
CDI Bean
Od JDK
11
Poziom trudności
Średniozaawansowany
Wsparcie JDK
EJB versus CDI
Dostępne
Widely available since Jakarta EE 8 / Java 11
Jak to działa
CDI (Contexts and Dependency Injection) provides the same dependency injection and transaction management as EJBs, but as plain Java classes with no container-specific interfaces or superclasses. Scopes like @ApplicationScoped and @RequestScoped control lifecycle, and @Transactional replaces mandatory EJB transaction semantics.
Powiązana dokumentacja