SORU
6 Ocak 2013, Pazar


Bahar ApplicationContext - Kaynak sızıntısı: '' asla kapalı bağlam

Spring MVC uygulamasında, hizmet sınıfları aşağıdaki yaklaşım kullanarak bir değişkeni ben başlatılamıyor:

ApplicationContext context = 
         new ClassPathXmlApplicationContext("META-INF/userLibrary.xml");
service = context.getBean(UserLibrary.class);

Bu UserLibrary uygulamam kullanıyorum hangi 3. parti bir araçtır. Yukarıdaki kod oluşturur için bir uyarı 'bağlam' değişken. Uyarı aşağıda gösterilmiştir:

Resource leak: 'context' is never closed

Uyarı anlamıyorum. Uygulama Spring MVC uygulaması olarak, çok yakın bir uygulama çalışırken servisine sevk as/bağlam yok edemiyorum. Tam olarak bu uyarı bana ne anlatmaya çalışıyor?

CEVAP
6 Ocak 2013, Pazar


Uygulama kapsamında olduğundan bir noktada serbest olması için gereken kaynak tüketir ResourceLoader (/Ç işlemleri yani ben). Ayrıca Closable uygulayan AbstractApplicationContext bir uzantısıdır. Böylece, close() bir yöntem var ve try-with-resources statement kullanılabilir.

try (ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("META-INF/userLibrary.xml")) {
  service = context.getBean(UserLibrary.class);
}

Aslında farklı bir soru (size bağlı) bu içerik oluşturmak için ihtiyacınız olsun, bu konuda yorum yapmayacağım.

Bu bağlamda uygulama durdurulduğunda örtülü kapalı olduğu doğrudur ama bu yeterli değil. Eclipse haklı, classloader sızıntıları önlemek için el ile diğer durumlarda kapatmak için önlemler almak gerekir.

Bunu Paylaş:
  • Google+
  • E-Posta
Etiketler:

YORUMLAR

SPONSOR VİDEO

Rastgele Yazarlar

  • bobinire

    bobinire

    24 EYLÜL 2006
  • emimusic

    emimusic

    10 Mart 2006
  • Kevin Bruckert

    Kevin Brucke

    30 Aralık 2006