एक ही तरीका है कि एक क्लास अनलोड किया जा सकता है अगर क्लासलोडर का उपयोग कचरा एकत्र किया जाता है। इसका मतलब है, हर एक वर्ग के संदर्भ में और क्लास लोडर को खुद डोडो के रास्ते पर जाने की जरूरत है।
आपकी समस्या का एक संभावित समाधान प्रत्येक जार फ़ाइल के लिए एक क्लास लोडर, और प्रत्येक AppServers के लिए एक क्लास लोडर है जो विशिष्ट जार क्लास लोडर के लिए कक्षाओं के वास्तविक लोडिंग को दर्शाता है। इस तरह, आप हर ऐप सर्वर के लिए जार फ़ाइल के विभिन्न संस्करणों को इंगित कर सकते हैं।
यह तुच्छ नहीं है, हालांकि। OSGi प्लेटफ़ॉर्म बस ऐसा करने का प्रयास करता है, क्योंकि प्रत्येक बंडल में एक अलग क्लास लोडर होता है और निर्भरताएं प्लेटफ़ॉर्म द्वारा हल की जाती हैं। हो सकता है कि एक अच्छा समाधान इस पर एक नज़र रखना होगा।
यदि आप OSGI का उपयोग नहीं करना चाहते हैं, तो हर JAR फ़ाइल के लिए जारक्लास लोडर वर्ग के एक उदाहरण का उपयोग करना संभव हो सकता है ।
और एक नया, MultiClassloader Class बनाएं जो Classloader का विस्तार करता है। इस वर्ग में आंतरिक रूप से जारक्लास लोडरों की एक सरणी (या सूची) होगी, और डिफाइंडक्लिप में () विधि सभी आंतरिक क्लास लोडर के माध्यम से पुनरावृत्ति करेगी जब तक कि कोई परिभाषा नहीं मिल सकती है, या NoClassDefFoundException को फेंक दिया गया है। क्लास में नए जारक्लास लोडर्स को जोड़ने के लिए एक दो एक्सेसर मेथड उपलब्ध कराए जा सकते हैं। एक MultiClassLoader के लिए नेट पर कई संभावित कार्यान्वयन हैं, इसलिए आपको अपना स्वयं का लिखने की आवश्यकता भी नहीं हो सकती है।
यदि आप सर्वर से हर कनेक्शन के लिए एक मल्टीक्लासर लोड करते हैं, तो सिद्धांत रूप में यह संभव है कि प्रत्येक सर्वर एक ही वर्ग के भिन्न संस्करण का उपयोग करता है।
मैंने एक प्रोजेक्ट में MultiClassloader विचार का उपयोग किया है, जिसमें उपयोगकर्ता-परिभाषित स्क्रिप्ट वाले वर्गों को लोड किया जाना था और मेमोरी से अनलोड किया गया था और यह काफी अच्छी तरह से काम करता था।