package me.brandonc.datastore.mongodb;
import java.net.UnknownHostException;
import me.brandonc.benchmark.config.Configuration;
import me.brandonc.benchmark.exception.OperationException;
import me.brandonc.datastore.DataStore;
import com.mongodb.DB;
import com.mongodb.Mongo;
import com.mongodb.MongoException;
import com.mongodb.MongoOptions;
import com.mongodb.ServerAddress;
import com.mongodb.WriteConcern;
public class MongodbDataStore implements DataStore<DB> {
private Mongo client = null;
private Configuration configuration;
private String dbName;
public MongodbDataStore(Configuration configuration) {
this.configuration = configuration;
this.dbName = configuration.getString("mongodb.db");
}
@Override
public DB getConnection() {
return client.getDB(dbName);
}
@Override
public void clean() {
getConnection().getCollection(configuration.getString("mongodb.collection")).drop();
}
@Override
public void init() {
try {
MongoOptions options = new MongoOptions();
options.connectionsPerHost = configuration.getIntValue("mongodb.connectionsPerHost");
options.threadsAllowedToBlockForConnectionMultiplier = configuration.getIntValue("mongodb.threadsAllowedToBlockForConnectionMultiplier");
ServerAddress serverAddress = new ServerAddress(configuration.getString("mongodb.host"), configuration.getIntValue("mongodb.port"));
client = new Mongo(serverAddress, options);
client.setWriteConcern(WriteConcern.valueOf(configuration.getString("mongodb.WriteConcern")));
} catch (UnknownHostException e) {
throw new OperationException(e);
} catch (MongoException e) {
throw new OperationException(e);
}
}
@Override
public void releaseConnection(DB connection) {
// ignored
}
@Override
public void destory() {
if (client != null) {
client.close();
}
}
}