2012-07-03 11 views
6

ज्यादातर मामलों में, जावा में अपवादों को पकड़ना संभव है, यहां तक ​​कि अनचेक किए गए भी। लेकिन, इसके बारे में कुछ करना जरूरी नहीं है (उदाहरण के लिए स्मृति से बाहर)।जावा (डिज़ाइन समस्या) में अपवाद के कारण किसी को एप्लिकेशन क्रैश क्यों होना चाहिए?

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

क्या कोई इस बारे में पहले से ही दिमाग में और संचारित है? मैं विशिष्ट जेनेरिक मामलों और संभावित समाधान, या अंगूठे नियमों की तलाश में हूं।

अद्यतन

सुझाव अब तक: चल

  • बंद करो अगर डेटा जुटना समझौता किया जा सकता
  • चलाना बंद करता है, तो डेटा
  • बंद करो अगर आप ऐसा नहीं कर सकते चल हटाया जा सकता है इसके बारे में कुछ भी (स्मृति से बाहर ...)
  • कुंजी सेवा उपलब्ध नहीं है या बीको चलाना बंद करो एमईएस अनुपलब्ध और पुन: प्रारंभ नहीं किया जा सकता है कि क्या यह एक स्थिर राज्य से अपना कर्तव्य प्रदर्शन कर सकते हैं

  • एक विधि/सेवा की जाँच करनी चाहिए, नहीं तो यह उपयोगकर्ता (लॉग इन करें) को सूचित और कुछ भी नहीं

  • करना चाहिए आवेदन बंद कर दिया जाना चाहिए , के रूप में शान से
  • स्वनिर्धारित अपवाद कैसे हैंडलर द्वारा
  • लॉग के रूप में ज्यादा प्रासंगिक जानकारी स्थिति को हल करने के बारे में सुझाव देने के लिए इस्तेमाल किया जा सकता डाटाबेस लेनदेन में संभव
  • उपयोग पुनरावर्तन के रूप में नीचा के रूप में आप कर सकते हैं
  • डेवलपर्स
  • के रूप में आप

  • त्वरित सुधार हानिकारक हो सकता है कर सकते हैं राज्य और जितना डेटा जुटना बचाना सूचित करें, जब डीबगिंग, बेहतर अनुप्रयोग क्रैश जाने और विवरण में विश्लेषण क्या यह कारण

+2

यदि आपका आवेदन महत्वपूर्ण है (उदाहरण के लिए सर्वर एक संयंत्र का संचालन करने वाला सर्वर) तो आपके आवेदन को 1) उस व्यक्ति को फोन करना होगा जिसे इसे ठीक करना होगा 2) जब तक यह सुनिश्चित न हो कि सबकुछ हटाना न पड़े (डेटा कोहिरेशन लगभग कभी नहीं हो सकता समझौता किया)। –

+3

आदर्श रूप से, आपका आवेदन कभी भी क्रैश नहीं होना चाहिए। हालांकि, जब आपका डेटाबेस या कैमरा जैसे घटक गुम या पहुंच योग्य नहीं होते हैं तो आपका एप्लिकेशन शानदार ढंग से विफल होना चाहिए। –

+0

मैंने सोचा होगा कि बहुत से गंभीर रनटाइम अपवादों के लिए आपको इस बारे में कोई विकल्प नहीं होगा कि आप इसे दुर्घटनाग्रस्त कर दें, जब तक कि आप कोशिश में कोड के बहुत ही शुरुआती बिट को लपेटें ... पकड़ें ब्लॉक। –

उत्तर

1
आराम से बैठ जाएं-

1. त्वरित सुधार कर सकते हैं और पोतेन हैं:

क्यों और एक आवेदन दुर्घटना कोई विशेष नियम नहीं है यह बताने के लिए जब ...... मैं निम्नलिखित कारणों के लिए अपने आवेदन दुर्घटना जाने मामूली जोखिम भरा। मुझे बग को ठीक करने के लिए उचित नहीं लगता है, यह जानने के बिना कि मेरे कोड क्रैश का वास्तविक कारण क्या था। एप्लिकेशन क्रैश को देने से मुझे मेरे कोड में गलती हो जाती है।

2. कोड क्रैश देने से मुझे प्रोग्रामिंग भाषा और तार्किक त्रुटियों को बेहतर तरीके से समझने में मदद मिलती है।

एप्लिकेशन दुर्घटना बताने के लिए मेरे कारण नहीं है कि ..

2

जावा और के रचनाकारों।नेट ने एक अपवाद अपवाद वस्तु के प्रकार का उपयोग करने का फैसला किया कि यह कब निर्धारित किया जाना चाहिए और जब इसे हल किया जाना चाहिए, तो डिज़ाइन निर्णय शायद सी ++ हैंडल अपवादों के तरीके से प्रेरित हो। यद्यपि सी ++ अपवाद हैंडलिंग कई तरीकों से सुधार हुआ था, इससे पहले कि पहले क्या अस्तित्व में था, अपवाद वस्तु के प्रकार का उपयोग प्राथमिक अपवाद के रूप में किया गया था, यह निर्धारित करने के लिए कि कौन से अपवाद पकड़े गए थे, इसकी बेहतर विशेषताएं नहीं थीं।

क्योंकि अपवाद पकड़ने को अपवाद प्रकार द्वारा नियंत्रित किया जाता है, इसलिए अपवाद के लिए कोई मानक माध्यम नहीं है यह इंगित करने के लिए कि क्या एक असफल ऑपरेशन ने सिस्टम में किसी ऑब्जेक्ट की स्थिति को बदल दिया है, या विफलता किसी भ्रष्ट स्थिति में होने वाली विफलताओं के कारण हुई है या नहीं (जैसा कि एक राज्य के विपरीत है, जबकि यह कॉलर द्वारा अप्रत्याशित हो सकता है और पास-इन पैरामीटर के साथ संगत नहीं है, अन्यथा बुलाया जाने वाला तरीका पूरी तरह से वैध माना जाएगा)। कई मामलों में, यदि किसी उपयोगकर्ता अनुरोध के जवाब में सिस्टम एक ऐसी विधि को कॉल करता है जो कुछ करने का प्रयास करता है और नहीं कर सकता है, लेकिन विधि किसी ऑब्जेक्ट की स्थिति को प्रतिकूल रूप से प्रभावित नहीं करती है और समस्या किसी ऑब्जेक्ट के कारण नहीं होती है दूषित राज्य, उपयोगकर्ता को सूचित करने के लिए अक्सर सबसे अच्छा हो सकता है कि अनुरोधित कार्रवाई निष्पादित नहीं की जा सकी और जारी रहे। दुर्भाग्यवश, ऊपर बताए गए प्रकारों के 'हानिरहित' अपवादों को अलग करने का कोई तरीका नहीं है, जो गंभीर सिस्टम-व्यापी समस्याओं का संकेत देते हैं। जबकि 99% अपवाद शायद अपेक्षाकृत हानिरहित होंगे, एक छोटा सा अंश उन स्थितियों के कारण होगा जो भ्रष्टाचार को दस्तावेजों को खोलने का कारण बन सकते हैं। यदि एक खुला दस्तावेज़ दूषित हो गया है, तो किसी प्रोग्राम के लिए इसे दूषित एक डिस्क के साथ डिस्क पर एक अच्छी प्रतिलिपि बदलने की तुलना में तुरंत क्रैश होने के लिए बेहतर हो सकता है।

यदि कस्टम अपवाद फेंकते हैं, तो अपवाद प्रकार में गुणों को शामिल करना संभव हो सकता है जो कोड को कुछ और उपयोगी तरीके से तय करने की अनुमति देगा कि अपवाद के बारे में क्या किया जाना चाहिए। दुर्भाग्यवश, कई अपवाद जो फेंक दिए जाते हैं, चाहे हानिरहित हों या नहीं, ऐसे गुण शामिल नहीं होंगे।

1

एप्लिकेशन को क्रैश करना ऐसा कुछ है जो एप्लिकेशन के महत्वपूर्ण स्तर और तैनाती वास्तुकला पर निर्भर करता है।

उदाहरण के लिए यदि यह पृथ्वी से रॉकेट को नियंत्रित कर रहा है तो एप्लिकेशन क्रैश नहीं होना चाहिए (अनावश्यक स्थितियों और डेटा प्राथमिकता को छोड़कर)।

जब एप्लिकेशन डिज़ाइन किए गए हैं तो आपको उन्हें डिज़ाइन करना चाहिए ताकि डेटास्टोर में कोई डेटा हटाया या बदला जा सके।

निष्कर्ष निकालने पर अनुप्रयोगों को क्रैश होने पर नियमों को निर्धारित करने का कोई कठिन और तेज़ तरीका नहीं है।

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