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

  • footiecyclo

    footiecyclo

    26 EYLÜL 2009
  • LatinNinja99

    LatinNinja99

    28 EKİM 2011
  • tsweeney79

    tsweeney79

    21 Ocak 2008