Satu-satunya cara Kelas dapat dibongkar adalah jika Classloader yang digunakan adalah sampah yang dikumpulkan. Ini berarti, referensi untuk setiap kelas tunggal dan ke classloader itu sendiri harus sesuai dengan yang dodo.
Salah satu solusi yang mungkin untuk masalah Anda adalah memiliki Classloader untuk setiap file jar, dan Classloader untuk masing-masing AppServers yang mendelegasikan pemuatan kelas yang sebenarnya ke classloader Jar tertentu. Dengan begitu, Anda bisa mengarahkan ke berbagai versi file jar untuk setiap server Aplikasi.
Ini bukan hal sepele. Platform OSGi berusaha melakukan ini, karena setiap bundel memiliki classloader yang berbeda dan dependensi diselesaikan oleh platform. Mungkin solusi yang baik adalah dengan melihatnya.
Jika Anda tidak ingin menggunakan OSGI, satu kemungkinan implementasi bisa menggunakan satu instance dari JarClassloader kelas untuk setiap file JAR.
Dan buat kelas MultiClassloader baru yang memperluas Classloader. Kelas ini secara internal akan memiliki array (atau Daftar) dari JarClassloaders, dan dalam metode defineClass () akan beralih melalui semua classloader internal sampai definisi dapat ditemukan, atau NoClassDefFoundException dilemparkan. Beberapa metode pengakses dapat disediakan untuk menambahkan JarClassloader baru ke kelas. Ada beberapa kemungkinan implementasi di internet untuk MultiClassLoader, jadi Anda bahkan mungkin tidak perlu menulis sendiri.
Jika Anda menginstal MultiClassloader untuk setiap koneksi ke server, pada prinsipnya setiap server mungkin menggunakan versi berbeda dari kelas yang sama.
Saya telah menggunakan ide MultiClassloader dalam sebuah proyek, di mana kelas yang berisi skrip yang ditentukan pengguna harus dimuat dan dibongkar dari memori dan itu bekerja dengan cukup baik.