के बाद सर्वोत्तम प्रथाओं द्वारा लोड संसाधनों, मैं एक वेब अनुप्रयोग (पाठ फ़ाइलों या एक्सएमएल फ़ाइलें की तरह) में संसाधनों के लोड होने Thread.currentThread().getContextClassLoader().getResourceAsStream
उपयोग कर रहा हूँ, बजाय फ़ाइल एपीआई के माध्यम से जाने की।को पुन: लोड getResourceAsStream
हालांकि, इस नुकसान यह है कि अगर डिस्क पर संसाधन परिवर्तन, getResourceAsStream को एक के बाद कॉल को अनिश्चित काल के पुराने संस्करण लौटने रहता है।
हालांकि मैं इसे नया संस्करण चुनना चाहता हूं। मेरे डीबगर में मुझे लगता है कि क्लासलोडर में resourceEntries नामक एक सरल हैश मैप है। प्रतिबिंब का उपयोग करके मैं एक विशिष्ट प्रविष्टि को हटाने में सक्षम हूं और ऐसा लगता है कि यह काम करता है।
यह विधि हालांकि नाजुक है।
क्या ऐसा करने के लिए एक और मानक तरीका है?
'क्लासलोडर' का सटीक कार्यान्वयन क्या है जो उसमें है? – Bozho
इस मामले में यह टॉमकैट 5 में '' org.apache.catalina.loader.WebappClassLoader'' था। मैंने अभी तक नए टॉमकैट संस्करणों में कोशिश नहीं की है, लेकिन मैंने अभी इसे जेबॉस में आजमाया है और यह वहां काम नहीं करता है (जैसा सोचा था)। – akira