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

  • BigBoyTV

    BigBoyTV

    25 EYLÜL 2013
  • HouseholdHacker

    HouseholdHac

    6 Kasım 2007
  • уσ ρℓz sυв ιℓℓ sυв вαcқ

    уσ ρℓz

    14 EKİM 2010