में संसाधनों को तैनात करना मुझे जर्सी सर्वलेटकंटनर में संसाधनों को गर्म-तैनाती और संसाधनों की आवश्यकता है।गतिशील रूप से (संयुक्त) जर्सी
संसाधन संसाधन पर संसाधनों को 'अनधिकृत' करने का कोई तरीका नहीं लगता है, इसलिए जिस मार्ग का मैं अनुसरण कर रहा हूं वह सभी संसाधनों को नए सेट के साथ प्रतिस्थापित करना है।
हालांकि the documentation कहता है रजिस्टर संसाधन संसाधनों पर स्रोत स्रोत संसाधन कोड के माध्यम से ब्राउज़ करने से सभी संसाधनों को प्रतिस्थापित करता है।
मुझे जो समाधान मिला वह सर्वलेटकॉन्टेनर को पूरी तरह से नए संसाधन कॉनफिग के साथ पुनः लोड करना था।
Set<Class<?>> classes = ...
ResourceConfig config = new ResourceConfig(classes);
container.reload(config);
यह ठीक काम करता है जब तक मैं एक संसाधन है कि एक ModelValidationException में जो परिणाम को तैनात। उसके बाद मैं ServletContainer को उचित स्थिति में वापस नहीं प्राप्त कर सकता।
अगर मैं स्रोत कोड पर एक नज़र डालें:
public void reload(final ResourceConfig configuration) {
try {
containerListener.onShutdown(this);
webComponent = new WebComponent(webComponent.webConfig, configuration);
containerListener = webComponent.appHandler;
containerListener.onReload(this);
containerListener.onStartup(this);
} catch (final ServletException ex) {
LOGGER.log(Level.SEVERE, "Reload failed", ex);
}
}
ModelValidationException WebComponent निर्माता से फेंक दिया है। उसके बाद ऑनशॉटडाउन विधि से अपवाद में परिणामों को पुनः लोड करने के लिए कोई भी कॉल, ServiceLocatorImpl की प्रीडेस्ट्राय विधि में चेकस्टेट के कारण होता है।
मैं, वास्तव में सत्यापन त्रुटियों
ResourceConfig config = new ResourceConfig(classes);
config.property(ServerProperties.RESOURCE_VALIDATION_IGNORE_ERRORS,
Boolean.TRUE);
container.reload(config);
कोई रास्ता नहीं अनदेखी अब तथापि बाहर अगर वहाँ किसी भी त्रुटि लेकिन लॉगिंग, जो बस के रूप में बुरा है पता लगाने के लिए थे खोजने के लिए वहाँ है द्वारा अपवाद बच सकते हैं।
प्रति heenenee's comment मैंने ServletContainer subclassing करने की कोशिश की, लेकिन ऐसा कुछ समस्याएं देता है क्योंकि संसाधन कॉनफिग को दो वेबकंपोनेंट्स में नहीं रखा जा सकता है।
मैं नीचे बंद, एक प्रारंभिक बाहर निकलने के पाने के लिए पहले WebComponent बनाने की कोशिश की है, लेकिन इस वास्तविक पुनः लोड विफल रहता है वहाँ संसाधनों में कोई त्रुटि है (क्योंकि resourceconfig के बाद webcomponent बना दिया गया है संशोधित नहीं किया जा सकता है)
@Override
public void reload(ResourceConfig configuration) {
try {
new WebComponent(new WebServletConfig(this), configuration);
} catch (ServletException e) {
LOGGER.log(Level.SEVERE, "Reload failed", e);
List<ResourceModelIssue> resources = Collections.emptyList();
throw new ModelValidationException(e.getMessage(), resources);
}
super.reload(configuration);
}
क्या हॉट-बेरोज़गार संसाधनों का कोई और तरीका है? असफल रीलोड के बाद ServletContainer को रीसेट करने का कोई तरीका है?
आप उपवर्ग के लिए 'ServletContainer', ओवरराइड' पुनः लोड (ResourceConfig) की कोशिश कर सकते '' पकड़ने के लिए RuntimeException' और एक त्रुटि प्रवेश करें, फिर अपने web.xml में अपने उपवर्ग निर्दिष्ट करें। – heenenee