Bir Sınıfın kaldırılabilmesinin tek yolu, kullanılan Sınıf Yükleyicinin çöp toplanmasıdır. Bu, her bir sınıfa ve sınıf yükleyiciye yapılan göndermelerin dodonun yoluna gitmesi gerektiği anlamına gelir.
Sorununuzun olası çözümlerinden biri, her jar dosyası için bir Classloader ve sınıfların gerçek yüklemesini belirli Jar sınıf yükleyicilerine devreten her AppServers için bir Classloader'a sahip olmaktır. Bu şekilde, her Uygulama sunucusu için jar dosyasının farklı sürümlerini gösterebilirsiniz.
Bu önemsiz değil. Her paket farklı bir sınıf yükleyiciye sahip olduğundan ve bağımlılıklar platform tarafından çözüldüğünden, OSGi platformu bunu yapmaya çalışır. Belki de iyi bir çözüm ona bir göz atmak olabilir.
OSGI kullanmak istemiyorsanız, olası bir uygulama her JAR dosyası için bir JarClassloader sınıfı örneği kullanmak olabilir .
Ve Classloader'ı genişleten yeni bir MultiClassloader sınıfı oluşturun. Bu sınıf dahili olarak bir JarClassloader dizisine (veya List) sahip olur ve defineClass () yönteminde bir tanım bulunana veya bir NoClassDefFoundException atılana kadar tüm dahili sınıf yükleyiciler arasında yineleme yapılır. Sınıfa yeni JarClassloader eklemek için birkaç erişimci yöntemi sağlanabilir. Bir MultiClassLoader için internette birkaç olası uygulama vardır, bu yüzden kendi yazmanız bile gerekmeyebilir.
Sunucuya her bağlantı için bir MultiClassloader başlatırsanız, prensipte her sunucunun aynı sınıfın farklı bir sürümünü kullanması mümkündür.
MultiClassloader fikrini, kullanıcı tanımlı komut dosyaları içeren sınıfların bellekten yüklenmesi ve kaldırılması gereken bir projede kullandım ve oldukça iyi çalıştı.