2016-01-02 12 views
10

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

try { 
     MongoClient mongoClient = new MongoClient("localhost", 27017); 
     MongoDatabase db = mongoClient.getDatabase("mydb"); 
     // if db is down or error getting people collection handle it in catch block 
     MongoCollection<Document> people = commentarr.getCollection("people"); 
    } catch (Exception e) { 
     // handle server down or failed query here. 
    } 

परिणाम

INFO: Exception in monitor thread while connecting to server localhost:27017 
कुछ अलग अपवाद जो मैं पकड़ने के लिए, लेकिन मेरी पकड़ ब्लॉक अभी भी कुछ नहीं किया की कोशिश की है, जिसके परिणामस्वरूप युक्त स्टैक ट्रेस के साथ

है।

com.mongodb.MongoSocketOpenException: Exception opening socket 
Caused by: java.net.ConnectException: Connection refused 

मैं जावा MongoDB चालक 3.0.4 का उपयोग कर रहा है, सबसे अधिक पदों मैंने पढ़ा MongoClient.getDatabaseNames() तरह हैक्स के साथ एक पुराने एपीआई से कर रहे हैं जो एक MongoException यदि त्रुटियों फेंकता है, सिवाय इस अब पदावनत और MongoClient.listDatabaseNames() जो नहीं करता है साथ बदल दिया है ' semantics फेंकने में एक ही त्रुटि है।

क्या जावा चालक से मोगो क्वेरी को निष्पादित करने के लिए एक तरीका है, वास्तव में अपवाद पकड़ा गया है और वास्तव में अपवाद पकड़ा गया है?

+1

@Alexander Kondaurov क्या आप इस उत्तर को देख सकते हैं? http://stackoverflow.com/questions/40813060/how-to-catch-exception-when-creating-mongoclient-instance/40814641#40814641। यदि आप कुछ विशिष्ट खोज रहे हैं तो कृपया पोस्ट में जोड़ें। – Veeram

उत्तर

0

नई एपीआई में, MongoException एक RuntimeException. आप या तो सामान्य MongoException पकड़ कर सकते हैं या, मुझे विश्वास है, listDatabaseNames() अंततः एक MongoCommandException फेंक खत्म होता है।

+0

धन्यवाद, मैंने सूचीबद्ध अपवादों का प्रयास किया लेकिन दुर्भाग्य से अपवाद अभी भी पकड़े नहीं जा रहे हैं। –

+0

क्या आपने 'MongoSocketOpenException' को पकड़ने का प्रयास किया था? यही वह है जिसे आप सक्रिय रूप से देख रहे हैं। शायद क्योंकि मोंगो वास्तव में नहीं चल रहा है (या उस बंदरगाह पर)। – evanchooly

+1

हाँ, मैंने कोशिश की है कि लगभग एक और लगभग 10 अन्य लेकिन उनमें से कोई भी पकड़ ब्लॉक में पकड़ा नहीं गया है। अब तक पता लगाने के लिए कि जब सर्वर एकमात्र अपवाद है, तो मैं उन कार्यों को पकड़ सकता हूं जो 'मोंगोटाइम एक्सेप्शन' है जो आपको मोंगो क्लाइंटऑप्शन.बिल्डर()। सर्वर चयन चयन() 'के माध्यम से सेट किए गए कई एमएस को फेंक दिया जाता है। मैं बस इस समय के साथ जा रहा हूँ। –

0

आप System.err को ByteArrayOutputStream बफर पर रीडायरेक्ट कर सकते हैं। यदि रनटाइम अपवाद फेंक दिया जाता है, तो इसे बफर में एकत्र किया जाएगा। इसी तरह की समस्या का उत्तर देखें: https://stackoverflow.com/a/47699292/7388679

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