EJB versus CDI
Substitua EJBs pesados por beans CDI leves para injeção de dependências e transações.
Comparação de Código
✕ 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());
}
}
Viu um problema com este código? Nos avise.
Por que a forma moderna ganha
Leve
Beans CDI são classes Java simples sem interfaces ou descritores específicos do EJB.
Injeção unificada
@Inject funciona para qualquer bean gerenciado, recursos JAX-RS e componentes Jakarta EE.
Testes unitários fáceis
Classes simples sem overhead de proxy EJB são fáceis de instanciar e mockar.
Abordagem Antiga
EJB
Abordagem Moderna
CDI Bean
Desde o JDK
11
Dificuldade
Intermediário
Suporte JDK
EJB versus CDI
Disponível
Amplamente disponível desde o Jakarta EE 8 / Java 11
Como funciona
CDI (Contexts and Dependency Injection) oferece a mesma injeção de dependências e gerenciamento de transações dos EJBs, mas como classes Java simples sem interfaces ou superclasses específicas do container. Escopos como @ApplicationScoped e @RequestScoped controlam o ciclo de vida, e @Transactional substitui a semântica obrigatória de transações do EJB.
Documentação Relacionada