2009-07-31 9 views
6

क्या जावा प्रोग्राम का पता लगाने का कोई तरीका है कि ऑपरेटिंग सिस्टम सोने जा रहा है, या उसमें असफल रहा है, कम से कम जागने का पता लगाना?जावा में ओएस स्लीप और वेक अप इवेंट्स का पता लगाएं

वास्तविक समस्या यह है कि किसी विशेष एप्लिकेशन में पृष्ठभूमि में कई MySQL डेटाबेस संचालन चलाए जाते हैं। विंडोज मशीन पर परीक्षण में इन डेटाबेस लेन-देन को नींद/जागने के चक्र के बाद बाधित किया जाता है जिससे प्रोग्राम में त्रुटि की स्थिति का एक टन होता है। ये त्रुटियां आमतौर पर कुछ इस तरह दिखाई:

java.net.SocketException 
MESSAGE: Software caused connection abort: recv failed

हम एक 'जल्द ही सो जाएगा' घटना पर प्रतिक्रिया कर सकता है हम इस समस्या preempting पृष्ठभूमि कार्यों को रोकने का प्रयास कर सकता है। कम आदर्श अगर हम 'बस जागृत' घटना पर प्रतिक्रिया दे सकते हैं तो हम कम से कम त्रुटि संदेशों को दबा सकते हैं।

उत्तर

7

आप समय-समय पर मौजूदा सिस्टम समय की तुलना में सिस्टम सिस्टम की तुलना करके जागरूकता का पता लगा सकते हैं।

संपादित करें: http://www.codeguru.com/cpp/w-p/system/messagehandling/article.php/c6907

+0

दयालुता जेएनआई के बिना नहीं की जा सकती है लेकिन यह लिंक एक अच्छी शुरुआत की तरह लगता है। –

+0

हां, जेएनआई विकसित और डीबग करने के लिए दर्द हो सकता है। हमने पाया है कि जावा में जितना संभव हो उतना तर्क रखना है, और सी एपीआई को कम-स्तरीय कॉल करने के लिए जेएनआई को पुल के रूप में उपयोग करें। – rob

2

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

+0

यदि डेटाबेस क्रैश हो जाता है या कोई केबल खींचता है तो मुझे लगता है कि त्रुटि संदेश वास्तव में क्रम में होंगे! –

+0

यदि अनुरोध पुनर्प्राप्त करने योग्य नहीं था। कभी-कभी वे होते हैं, कभी-कभी वे नहीं होते हैं। कभी-कभी यह क्षणिक होता है, जैसे उपयोगकर्ता कभी नोटिस नहीं करता है, लेकिन सिस्टम स्वयं ही करता है। आप उस घटना को संभालने में सक्षम होना चाहिए। –

+0

मैंने सी 3 पीओ का उपयोग ठीक से करने के लिए किया था, यह पूल से ऐप लौटने से पहले कनेक्शन को सत्यापित करने में सक्षम था। –

2

आप ओएस से नींद/जागने की घटनाओं को फँसाने के लिए सिर्फ जेएनआई या जेएनए कर सकते हैं।

Windows Power Events (MSDN) से, आपको WM_POWERBROADCAST ईवेंट प्राप्त करने के लिए एक विंडो हैंडलर और एक नल विंडो बनाना होगा। यह विंडो प्रक्रिया तब संदेश को बबल करने के लिए आपके जावा कोड में इवेंट फ़ंक्शन को कॉल कर सकती है।