Enterprise Orta

JNDI Arama ile CDI Enjeksiyonu Karşılaştırması

Kırılgan JNDI dize aramalarını, kapsayıcı tarafından yönetilen kaynaklar için tür-güvenli CDI enjeksiyonuyla değiştirin.

✕ 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
        }
    }
}
Bu kodda bir sorun mu gördünüz? Bize bildirin.
🔒

Tür-güvenli bağlama

Enjeksiyon hataları, dize aramaları yerine dağıtım zamanında yakalanır.

🗑️

Şablon kod yok

InitialContext oluşturma, JNDI ad dizeleri ve NamingException işlemeyi ortadan kaldırır.

🧪

Test edilebilir

Bağımlılıklar enjekte edilmiş alanlardır; birim testlerinde mock'larla kolayca değiştirilebilir.

Eski Yaklaşım
JNDI Arama
Modern Yaklaşım
CDI @Inject
JDK'dan itibaren
11
Zorluk
Orta
JNDI Arama ile CDI Enjeksiyonu Karşılaştırması
Mevcut

Jakarta EE 8 / Java 11'den itibaren geniş çapta kullanılabilir

Geleneksel JNDI deseni, dize tabanlı kaynak adları kullanmayı, NamingException'ı işlemeyi ve bir InitialContext yönetmeyi zorlar. @Inject (veya kapsayıcı kaynakları için @Resource) ile CDI enjeksiyonu, kapsayıcının bağımlılıkları otomatik olarak bağlamasını sağlar. Yazım hataları derleme zamanı hatalarına dönüşür ve sınıflar, bağımlılıklar doğrudan enjekte edilebildiğinden test edilmesi daha kolaydır.

Paylaş 𝕏 🦋 in