मैं जावा वेब-एप्लिकेशन विकसित कर रहा हूं। एप्लिकेशन ल्यूसीन इंडेक्स से जुड़ता है। मैं इंडेक्सशियर का सिंगलटन उदाहरण बनाता हूं। यह उदाहरण कुछ फाइलें खोलता है। जब मैं वेब-एप्लिकेशन को पुन: नियोजित करता हूं, तो इंडेक्सशियर के पहले उदाहरण द्वारा खोले गए फाइलें खुली रहती रहती हैं, और एक और उदाहरण पुन: नियोजित अनुप्रयोग द्वारा बनाया जाता है। कुछ पुनर्वितरणों के बाद, सिस्टम "बहुत अधिक खुली फाइलें" अपवाद फेंकना शुरू कर देता है। मैं पुनर्वितरण से पहले पुराना उदाहरण बंद करना चाहता हूं, ताकि पुरानी फाइलें बंद हो जाएं, लेकिन मैं यह नहीं समझ सकता कि यह कैसे करें? क्या web.xml में कोई निर्देश है जिसे लोड-ऑन-स्टार्टअप के समान, गैर-तैनाती पर बुलाया जाता है? मैं एक jboss सर्वर पर वेब अनुप्रयोग चला रहा हूँ।जावा वेब-एप्लिकेशन से अनावश्यक पर कॉल विधि
8
A
उत्तर
17
ServletContextListener
लागू करें।
@WebListener
public class LuceneConfig implements ServletContextListener {
@Override
public void contextInitialized(ServletContextEvent event) {
// Do your job here during webapp startup.
}
@Override
public void contextDestroyed(ServletContextEvent event) {
// Do your job here during webapp shutdown.
}
}
आप सर्वलेट 3.0 अभी तक (जो पहले से ही बाहर 2 साल के लिए यह है), तो आप @WebListener
टिप्पणी निकालने और इसे मैन्युअल रजिस्टर web.xml
में करने के लिए इस प्रकार की जरूरत नहीं कर रहे हैं:
<listener>
<listener-class>com.example.LuceneConfig</listener-class>
</listener>
2
यदि आप javax.servlet.ServletContextListener
लागू करते हैं और web.xml
में <listener>
के रूप में उस श्रेणी को पंजीकृत करते हैं, तो संदर्भ को अनलोड किए जाने से पहले contextDestroyed()
विधि कॉल की जाएगी।
यह इसे पंजीकृत किए बिना यहां काम करता है। पेरा 4.1 (173 बिल्ड) पर मोजाररा 2.3.3 का उपयोग करना। – Roland
यकीन है कि यह ठीक काम करेगा। Payara 4.x Servlet 3.1 आधारित है। फिर 'वेबलिस्टर' ठीक काम करेगा। उत्तर के रूप में, यह तब तक काम नहीं करेगा जब आप अभी तक सर्वलेट 3.0 पर नहीं हैं। जेएसएफ इंप/संस्करण अप्रासंगिक है क्योंकि यह यहां कोई भूमिका निभाता नहीं है। केवल सर्वलेट संस्करण प्रासंगिक है। – BalusC
इसे स्पष्ट करने के लिए धन्यवाद। – Roland