Enterprise Intermédiaire

Remplace les fragiles recherches JNDI par chaînes par l'injection CDI avec sécurité de types pour les ressources gérées par le conteneur.

✕ Java EE
public class OrderService {
    private DataSource ds;

    public void init() throws NamingException {
        InitialContext ctx = new InitialContext();
        ds = (DataSource) ctx.lookup(
            "java:comp/env/jdbc/OrderDB");
    }

    public List<Order> findAll()
            throws SQLException {
        try (Connection con = ds.getConnection()) {
            // query orders
        }
    }
}
✓ Jakarta EE 8+
@ApplicationScoped
public class OrderService {
    @Inject
    @Resource(name = "jdbc/OrderDB")
    DataSource ds;

    public List<Order> findAll()
            throws SQLException {
        try (Connection con = ds.getConnection()) {
            // query orders
        }
    }
}
Un problème avec ce code ? Dites-le nous.
🔒

Câblage avec sécurité de types

Les erreurs d'injection sont détectées au déploiement, pas à l'exécution via des recherches par chaîne.

🗑️

Sans code répétitif

Élimine la création d'InitialContext, les chaînes de noms JNDI et la gestion de NamingException.

🧪

Testable

Les dépendances sont des champs injectés, facilement remplaçables par des mocks dans les tests unitaires.

Ancienne Approche
Recherche JNDI
Approche Moderne
CDI @Inject
Depuis JDK
11
Difficulté
Intermédiaire
Recherche JNDI vs Injection CDI
Disponible

Disponible depuis Jakarta EE 8 / Java 11

Le pattern JNDI traditionnel oblige à utiliser des noms de ressources basés sur des chaînes, à gérer NamingException et à gérer un InitialContext. L'injection CDI avec @Inject (ou @Resource pour les ressources du conteneur) permet au conteneur de connecter les dépendances automatiquement. Les fautes de frappe deviennent des erreurs à la compilation, et les classes sont plus faciles à tester car les dépendances peuvent être injectées directement.

Partager 𝕏 🦋 in