2011-08-12 19 views
14

क्या जावा ईई एप्लिकेशन को प्रारंभ करने से रोकने के लिए कोई तरीका है यदि अनुप्रयोग प्रारंभ के दौरान कोई अपवाद होता है? मैं मूल रूप से अनुप्रयोग को प्रारंभ करने के दौरान ServletContextListener या SingletonStartup बीन से हटाए गए एक अनचाहे अपवाद के बाद "j2ee.state.failed" स्थिति (प्रति JSR-77) दर्ज करने का कारण बनने का एक तरीका ढूंढ रहा हूं।जावा ईई एप्लिकेशन स्टार्टअप विफलता

EJB specification इंगित करता है कि Singleton बीन के प्रारंभ के दौरान कोई अपवाद होता है, तो एप्लिकेशन बिना त्रुटि के शुरू और चलाएगा; हालांकि, केवल बीन ही एक ऐसे राज्य में हो सकता है जहां इसे नहीं बुलाया जा सके। दुर्भाग्यवश, यह वह व्यवहार नहीं है जिसे मैं ढूंढ रहा हूं।

4.8.4 सिंगलटन हैंडलिंग सिंगलटन आरंभीकरण के दौरान होने वाली

त्रुटियाँ त्रुटि घातक माना जाता है और सिंगलटन उदाहरण के छोड़ना में परिणाम चाहिए। संभावित प्रारंभिक त्रुटियों में इंजेक्शन विफलता, PostConstruct विधि से निकाला गया सिस्टम अपवाद, या सफलतापूर्वक प्रतिबद्ध करने के लिए PostConstruct विधि कंटेनर-प्रबंधित लेनदेन की विफलता शामिल है। यदि कोई सिंगलटन प्रारंभ करने में विफल रहता है, तो सिंगलटन परिणाम पर आमंत्रण का प्रयास धारा 3.4.3 और धारा 3.4.4 द्वारा परिभाषित अपवाद में किया गया है।

Servlet specification नहीं किसी विशेष तरह से व्यवहार करने के लिए एक कंटेनर की आवश्यकता होती है एक सा अपनी जरूरतों के मामले में और अधिक अस्पष्ट है, मालूम होता है, लेकिन केवल सुझाव दे (शब्द के प्रयोग के माध्यम से "may") है कि वेब मॉड्यूल प्रारंभ करना जारी है, लेकिन किसी भी अनुरोध के परिणामस्वरूप आंतरिक सर्वर त्रुटि होनी चाहिए। दोबारा, यह दुर्भाग्य से व्यवहार नहीं है जिसे मैं ढूंढ रहा हूं। वेब एप्लिकेशन क्यों शुरू होना चाहिए और अगर यह किसी भी अनुरोध को संभाल नहीं सकता है तो क्यों चल रहा है?

11,6 श्रोता अपवाद

कंटेनर HTTP स्थिति कोड 500 के साथ वेब अनुप्रयोग एक आवेदन त्रुटि इंगित करने के लिए करने के लिए बाद के सभी अनुरोधों का जवाब हो सकता है।

मेरे अनुभव में, मैंने देखा है कि एप्लिकेशन सर्वर इस आवश्यकता को अलग-अलग संभालते हैं। कुछ कंटेनर वास्तव में इन मामलों में एप्लिकेशन को शुरू करने से रोक देंगे, जबकि अन्य विनिर्देशों में सुझाए गए अनुसार 500 अपवादों के साथ अपवाद को दबाएंगे और अनुरोधों का जवाब देंगे।

क्या मैं विनिर्देश के किसी भी भाग को देख रहा हूं जो किसी प्रारंभिकरण के दौरान अपवाद होने पर एप्लिकेशन को प्रारंभ करने से रोक देगा?

+0

+1 पर शुरू करने के लिए पूरे एप्लिकेशन (कान) को रोकता है; अच्छा प्रश्न। यह मेरा अनुभव भी है - वे इसे अलग-अलग करते हैं ... – home

उत्तर

0

वेब ऐप्स के मामले में - क्यों एक सर्वलेट फ़िल्टर नहीं बनाना है, जो आपके स्वयं के "असफल" ध्वज की जांच करेगा, और किसी भी अनुरोध के लिए 500 वापस लौटाएगा, अगर यह ध्वज उठाया गया है? कंटेनर बिंदु से, आपका ऐप निश्चित रूप से शुरू किया जाएगा।

+0

लक्ष्य अमान्य स्थिति में एप्लिकेशन को प्रारंभ करने से रोकने का लक्ष्य है। ServletContainerListeners और सिंगलटन स्टार्टअप बीन्स अक्सर आपके एप्लिकेशन को कार्य करने के लिए प्रारंभिक प्रारंभ करने के लिए उपयोग किया जाता है; अगर इस प्रारंभिकरण के दौरान कोई त्रुटि उत्पन्न होती है, तो आदर्श स्थिति असफल हो जाएगी। यह उपयोगकर्ताओं को असफलताओं का पता लगाने से रोकता है, इसे तुरंत व्यवस्थापक के ध्यान में लाता है। यह अनुप्रयोग-अज्ञेय तैनाती उपकरण को सार्वभौमिक रूप से एप्लिकेशन स्टार्टअप विफलताओं का पता लगाने और तदनुसार व्यवहार करने की अनुमति भी देगा; उदाहरण के लिए, एप्लिकेशन अपडेट को वापस रोल करके। – shelley

2

मुझे लगता है कि यह आपके द्वारा उपयोग किए जा रहे एप्लिकेशन सर्वर पर निर्भर करता है। जैसा कि आपने बताया है, एक अमान्य स्थिति के साथ तैनाती को संभालने के लिए यह उनके ऊपर है। जब वे असफल होते हैं तो तैनाती सक्रिय नहीं होती है, इसलिए आपको एक ऐसी सेवा प्रदान करनी होगी जो संकेतों को देख सके जो सफलतापूर्वक शुरू होने पर आपकी तैनाती प्रदान करनी चाहिए। यदि नहीं, तो आप प्रशासकों को सूचित कर सकते हैं। लेकिन यह सभी सर्वव्यापी है या बाहरी उपकरण की आवश्यकता है।

कुछ परियोजनाओं में हमने तैनाती की जांच के लिए [नागोस] [1] और [rhq] [2] का उपयोग किया है। उदाहरण के लिए, नागोस जब्सस पर आवश्यक तैनाती के लिए जेएमएक्स-कंसोल पर जांच करता है। जब तैनात किया गया एप्लिकेशन तैनाती के कुछ सेकंड के भीतर नहीं दिखाया जाता है तो कर्मचारियों को सूचित किया जाता है।

+0

टॉमकैट 7.x एक ऐसा एप्लिकेशन शुरू नहीं करेगा जो 'ServletContextListener.contextInitialized()' से अनचेक अपवाद फेंकता है, जबकि WebLogic 12.1.3 एप्लिकेशन प्रारंभ करेगा। – javabrett

1

+1 मेमे उत्तर में +1। और हो सकता है कि यह मदद कर सके: मेरे एक्सपिरिएरियंस संयोजन में यदि एनोटेशन @ स्टार्टअप और @ सिंगलेटन के साथ बीन @ पोस्टकॉन्स्ट्रक्ट विधि में अपवाद फेंकता है, तो यह जेबॉस एएस 7.1.1

+2

इसी तरह वेबस्पेयर अनुप्रयोग सर्वर 8.0+ पर भी। –

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