I costruttori MongoClient non generano eccezioni relative alla connettività. Piuttosto, ritornano immediatamente dopo aver avviato uno o più thread in background che tentano di stabilire una connessione e di autenticarsi in base alle credenziali fornite.
È solo quando un'applicazione utilizza MongoClient per eseguire alcune operazioni sul server MongoDB che verrà generata un'eccezione. Tuttavia, tale eccezione è un'eccezione di timeout generica che indica che il driver non è riuscito a trovare un server adatto per l'operazione prima della scadenza del timeout di selezione del server. Ad esempio:
MongoClient client = new MongoClient(asList(new ServerAddress("localhost"), new ServerAddress("localhost:27018")),
singletonList(MongoCredential.createCredential("username",
"admin",
"bad".toCharArray())),
MongoClientOptions.builder().serverSelectionTimeout(1000).build());
try {
client.getDB("admin").command("ping");
} catch (MongoTimeoutException e) {
// do something
}
genererà un MongoTimeoutException dopo 1 secondo. Sebbene non venga generata alcuna MongoSecurityException, il messaggio di MongoTimeoutException conterrà dettagli rilevanti. Ad esempio, quando ci si connette a una replica a tre membri impostata quando uno dei server è inattivo e l'autenticazione non è riuscita sui restanti due, il campo del messaggio di MongoTimeoutException sarà qualcosa del tipo:
Timeout dopo 1000 ms durante l'attesa di un server che corrisponde a ReadPreferenceServerSelector{readPreference=primary}. La vista client dello stato del cluster è {type=UNKNOWN, server=[{address=localhost:27017,type=UNKNOWN, state=CONNECTING,exception={com.mongodb.MongoSocketOpenException:Exception Openingsocket}, causato da {java.net.ConnectException:Connessione rifiutata}},{indirizzo=localhost:27018, tipo=SCONOSCIUTO, stato=CONNESSIONE,eccezione={com.mongodb.MongoSecurityException:autenticazione eccezionale MongoCredential{mechanism=null, userName='username',source='admin', password=, meccanismoProperties={}}}, causato da{com.mongodb.MongoCommandException:comando non riuscito con errore 18:'Autenticazione non riuscita.' sul server localhost:27018. La risposta completa è { "ok" :0.0, "code" :18, "errmsg" :"Autenticazione non riuscita." }}}]