Enterprise Średniozaawansowany

Zastąp kruche lookupki JNDI oparte na ciągach typowo-bezpiecznym wstrzykiwaniem CDI dla zasobów zarządzanych przez kontener.

✕ 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
        }
    }
}
Widzisz problem z tym kodem? Daj nam znać.
🔒

Typowo-bezpieczne łączenie

Błędy wstrzykiwania są wykrywane w czasie wdrożenia, nie w środowisku uruchomieniowym przez string lookupki.

🗑️

Bez boilerplate

Eliminuje tworzenie InitialContext, ciągi nazw JNDI i obsługę NamingException.

🧪

Testowalny

Zależności to wstrzykiwane pola, łatwe do zastąpienia mockami w testach jednostkowych.

Stare podejście
Lookup JNDI
Nowoczesne podejście
CDI @Inject
Od JDK
11
Poziom trudności
Średniozaawansowany
Lookup JNDI kontra wstrzykiwanie CDI
Dostępne

Szeroko dostępne od Jakarta EE 8 / Java 11

Tradycyjny wzorzec JNDI wymusza używanie nazw zasobów opartych na ciągach, obsługi NamingException i zarządzania InitialContext. Wstrzykiwanie CDI z @Inject (lub @Resource dla zasobów kontenera) pozwala kontenerowi automatycznie łączyć zależności. Literówki stają się błędami kompilacji, a klasy są łatwiejsze do testowania, bo zależności można wstrzykiwać bezpośrednio.