2011-11-18 18 views
8

मैं जावा वेब-एप्लिकेशन विकसित कर रहा हूं। एप्लिकेशन ल्यूसीन इंडेक्स से जुड़ता है। मैं इंडेक्सशियर का सिंगलटन उदाहरण बनाता हूं। यह उदाहरण कुछ फाइलें खोलता है। जब मैं वेब-एप्लिकेशन को पुन: नियोजित करता हूं, तो इंडेक्सशियर के पहले उदाहरण द्वारा खोले गए फाइलें खुली रहती रहती हैं, और एक और उदाहरण पुन: नियोजित अनुप्रयोग द्वारा बनाया जाता है। कुछ पुनर्वितरणों के बाद, सिस्टम "बहुत अधिक खुली फाइलें" अपवाद फेंकना शुरू कर देता है। मैं पुनर्वितरण से पहले पुराना उदाहरण बंद करना चाहता हूं, ताकि पुरानी फाइलें बंद हो जाएं, लेकिन मैं यह नहीं समझ सकता कि यह कैसे करें? क्या web.xml में कोई निर्देश है जिसे लोड-ऑन-स्टार्टअप के समान, गैर-तैनाती पर बुलाया जाता है? मैं एक jboss सर्वर पर वेब अनुप्रयोग चला रहा हूँ।जावा वेब-एप्लिकेशन से अनावश्यक पर कॉल विधि

उत्तर

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> 
+0

यह इसे पंजीकृत किए बिना यहां काम करता है। पेरा 4.1 (173 बिल्ड) पर मोजाररा 2.3.3 का उपयोग करना। – Roland

+1

यकीन है कि यह ठीक काम करेगा। Payara 4.x Servlet 3.1 आधारित है। फिर 'वेबलिस्टर' ठीक काम करेगा। उत्तर के रूप में, यह तब तक काम नहीं करेगा जब आप अभी तक सर्वलेट 3.0 पर नहीं हैं। जेएसएफ इंप/संस्करण अप्रासंगिक है क्योंकि यह यहां कोई भूमिका निभाता नहीं है। केवल सर्वलेट संस्करण प्रासंगिक है। – BalusC

+0

इसे स्पष्ट करने के लिए धन्यवाद। – Roland

2

यदि आप javax.servlet.ServletContextListener लागू करते हैं और web.xml में <listener> के रूप में उस श्रेणी को पंजीकृत करते हैं, तो संदर्भ को अनलोड किए जाने से पहले contextDestroyed() विधि कॉल की जाएगी।

संबंधित मुद्दे