MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

मोंगोडीबी जावा ड्राइवर 3.0 प्रमाणीकृत होने पर अपवाद नहीं पकड़ सकता है

मोंगोडीबी जावा एपीआई के हाल के संस्करण एक अलग डेमॉन मॉनिटर थ्रेड के भीतर कनेक्शन अपवाद फेंकते हैं, यही कारण है कि आप इसे पकड़ नहीं सकते- धावक यहां आपके स्टैक ट्रेस में है:com.mongodb.connection.DefaultServerMonitor$ServerMonitorRunnable.run

अपवादों के लिए MongoDB क्लाइंट की निगरानी करने के लिए, आप एक श्रोता जोड़ सकते हैं जो आपको किसी भी अपवाद पर कार्रवाई करने की अनुमति देगा और कभी भी आपको कनेक्शन की स्थिति की जांच करने की अनुमति देगा। आप अभी भी इन अपवादों को नहीं पकड़ पाएंगे, लेकिन आपके आवेदन को कम से कम उनके बारे में अवगत कराया जाएगा। ध्यान देने वाली एक बात यह है कि कनेक्शन स्थापित होने (या विफल) होने में कुछ समय लग सकता है, इसलिए यदि आप केवल एक बार उपयोग कनेक्शन बनाने में रुचि रखते हैं तो मैं एक स्लीप लूप को लागू करने की अनुशंसा करता हूं जो कनेक्शन की जांच करता है ठीक है और असफल/अपवाद राज्य। मैंने यह समाधान संस्करण 3.3 (https://api.mongodb.com/java/3.3/ का उपयोग करके लिखा है। ):

public class MongoStatusListener implements ServerListener {

    private boolean available = false;

    public boolean isAvailable() {
        return available;
    }

    @Override
    public void serverOpening(ServerOpeningEvent event) {}

    @Override
    public void serverClosed(ServerClosedEvent event) {}

    @Override
    public void serverDescriptionChanged(ServerDescriptionChangedEvent event) {

        if (event.getNewDescription().isOk()) {
            available = true;
        } else if (event.getNewDescription().getException() != null) {
            //System.out.println("exception: " + event.getNewDescription().getException().getMessage());
            available = false;
        }
    }
}

public MongoClient getMongoClient(String login, String password) {

    if (mongoClient != null) {
        return mongoClient;
    }
    MongoClientOptions.Builder optionsBuilder = new MongoClientOptions.Builder();
    MongoStatusListener mongoStatusListener = new MongoStatusListener();
    optionsBuilder.addServerListener(mongoStatusListener);

    this.mongoClient = new MongoClient(asList(new ServerAddress("localhost"), new ServerAddress("localhost:27017")),
        singletonList(MongoCredential.createCredential(
        login,
        "cookbook",
        password.toCharArray())
    ), optionsBuilder.build());

    this.mongoDatabase = mongoClient.getDatabase("cookbook");
    return mongoClient;
}

public boolean isAvailable() {
    return mongoStatusListener.isAvailable();
}



  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. MongoDB कुल परियोजना _id . की एक सरणी लौटाती है

  2. MongoDB इन्सर्ट/सेकंड को कैसे गति दें?

  3. मोंगोडीबी सी # ड्राइवर - क्या आईडी नामक फ़ील्ड आईडी नहीं हो सकता है?

  4. MongoDB MapReduce:1000 से अधिक रिकॉर्ड के लिए अपेक्षित रूप से काम नहीं कर रहा है

  5. ClusterControl एंटरप्राइज़ संस्करण में अपग्रेड करना