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

  • InfoPuppet

    InfoPuppet

    15 Kasım 2011
  • kev5124

    kev5124

    9 Kasım 2008
  • ThreadBanger

    ThreadBanger

    2 Mart 2007