package com.mongodb.hvdf;
import java.util.concurrent.TimeUnit;
import com.mongodb.DB;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;
import com.mongodb.hvdf.api.DatabaseError;
import com.mongodb.hvdf.api.ServiceException;
import com.mongodb.hvdf.configuration.MongoServiceConfiguration;
import com.mongodb.hvdf.services.Service;
public abstract class MongoBackedService implements Service {
protected final MongoClient client;
protected final DB database;
public MongoBackedService(
MongoClientURI defaultURI,
MongoServiceConfiguration config) {
// If there is a service specific override URI, use it
MongoClientURI uri = defaultURI;
if(config.database_uri.isEmpty() == false){
uri = new MongoClientURI(config.database_uri);
}
// If there is no database specified in the URI, use the configured name
String databaseName = uri.getDatabase();
if(databaseName == null || databaseName.isEmpty()){
databaseName = config.database_name;
}
// Attempt to connect and resolve the DB
try {
this.client = new MongoClient(uri);
this.database = client.getDB(databaseName);
} catch (Exception e) {
throw ServiceException.wrap(e, DatabaseError.CANNOT_CONNECT);
}
}
@Override
public void shutdown(long timeout, TimeUnit unit) {
if(this.client != null){
client.close();
}
}
}