DATADOC-88 introducing a MongoDbFactory interface and MongoTemplate constructors that take this as an argument
This commit is contained in:
@@ -0,0 +1,11 @@
|
||||
package org.springframework.data.document.mongodb;
|
||||
|
||||
import org.springframework.dao.DataAccessException;
|
||||
|
||||
import com.mongodb.DB;
|
||||
|
||||
public interface MongoDbFactory {
|
||||
|
||||
DB getDb() throws DataAccessException;
|
||||
|
||||
}
|
||||
@@ -21,6 +21,7 @@ import org.apache.commons.logging.LogFactory;
|
||||
import org.springframework.beans.factory.FactoryBean;
|
||||
import org.springframework.beans.factory.InitializingBean;
|
||||
import org.springframework.dao.DataAccessException;
|
||||
import org.springframework.dao.DataAccessResourceFailureException;
|
||||
import org.springframework.util.Assert;
|
||||
|
||||
import com.mongodb.DB;
|
||||
@@ -32,7 +33,7 @@ import com.mongodb.Mongo;
|
||||
* @author Thomas Risberg
|
||||
* @since 1.0
|
||||
*/
|
||||
public class MongoDbFactoryBean implements FactoryBean<DB>, InitializingBean {
|
||||
public class MongoDbFactoryBean implements MongoDbFactory, FactoryBean<DB>, InitializingBean {
|
||||
//ToDo: add PersistenceExceptionTranslator ???
|
||||
|
||||
/**
|
||||
@@ -46,7 +47,29 @@ public class MongoDbFactoryBean implements FactoryBean<DB>, InitializingBean {
|
||||
private String databaseName;
|
||||
private String username;
|
||||
private String password;
|
||||
|
||||
|
||||
public MongoDbFactoryBean() {
|
||||
}
|
||||
|
||||
public MongoDbFactoryBean(Mongo mongo, String databaseName) throws DataAccessException {
|
||||
Assert.notNull(mongo, "Mongo must not be null");
|
||||
Assert.hasText(databaseName, "Database name must not be empty");
|
||||
this.mongo = mongo;
|
||||
this.databaseName = databaseName;
|
||||
try {
|
||||
afterPropertiesSet();
|
||||
} catch (Exception e) {
|
||||
if (e instanceof RuntimeException) {
|
||||
throw (RuntimeException)e;
|
||||
}
|
||||
else {
|
||||
throw new DataAccessResourceFailureException("Error while initializing DB Factory", e);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
public void setMongo(Mongo mongo) {
|
||||
this.mongo = mongo;
|
||||
}
|
||||
@@ -93,10 +116,10 @@ public class MongoDbFactoryBean implements FactoryBean<DB>, InitializingBean {
|
||||
// apply defaults - convenient when used to configure for tests
|
||||
// in an application context
|
||||
//ToDo: do we need a default or should we require database name?
|
||||
if (databaseName == null) {
|
||||
logger.warn("Property databaseName not specified. Using default name 'test'");
|
||||
databaseName = "test";
|
||||
}
|
||||
// if (databaseName == null) {
|
||||
// logger.warn("Property databaseName not specified. Using default name 'test'");
|
||||
// databaseName = "test";
|
||||
// }
|
||||
if (mongo == null) {
|
||||
logger.warn("Property mongo not specified. Using default configuration");
|
||||
if (host == null) {
|
||||
|
||||
@@ -95,13 +95,10 @@ public class MongoTemplate implements MongoOperations, ApplicationEventPublisher
|
||||
|
||||
private final MongoConverter mongoConverter;
|
||||
private final MappingContext<? extends MongoPersistentEntity<?>, MongoPersistentProperty> mappingContext;
|
||||
private final Mongo mongo;
|
||||
private final MongoDbFactory mongoDbFactory;
|
||||
private final MongoExceptionTranslator exceptionTranslator = new MongoExceptionTranslator();
|
||||
private final QueryMapper mapper;
|
||||
|
||||
private String databaseName;
|
||||
private String username;
|
||||
private String password;
|
||||
private ApplicationEventPublisher eventPublisher;
|
||||
|
||||
/**
|
||||
@@ -111,7 +108,7 @@ public class MongoTemplate implements MongoOperations, ApplicationEventPublisher
|
||||
* @param databaseName
|
||||
*/
|
||||
public MongoTemplate(Mongo mongo, String databaseName) {
|
||||
this(mongo, databaseName, null, null, null);
|
||||
this(mongo, databaseName, null);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -123,7 +120,26 @@ public class MongoTemplate implements MongoOperations, ApplicationEventPublisher
|
||||
* @param mongoConverter
|
||||
*/
|
||||
public MongoTemplate(Mongo mongo, String databaseName, MongoConverter mongoConverter) {
|
||||
this(mongo, databaseName, mongoConverter, null, null);
|
||||
this(new MongoDbFactoryBean(mongo, databaseName), mongoConverter, null, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor used for a basic template configuration
|
||||
*
|
||||
* @param mongoDbFactory
|
||||
*/
|
||||
public MongoTemplate(MongoDbFactory mongoDbFactory) {
|
||||
this(mongoDbFactory, null);
|
||||
}
|
||||
|
||||
/**
|
||||
* Constructor used for a basic template configuration
|
||||
*
|
||||
* @param mongoDbFactory
|
||||
* @param mongoConverter
|
||||
*/
|
||||
public MongoTemplate(MongoDbFactory mongoDbFactory, MongoConverter mongoConverter) {
|
||||
this(mongoDbFactory, null, null, null);
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -136,14 +152,12 @@ public class MongoTemplate implements MongoOperations, ApplicationEventPublisher
|
||||
* @param writeConcern
|
||||
* @param writeResultChecking
|
||||
*/
|
||||
MongoTemplate(Mongo mongo, String databaseName, MongoConverter mongoConverter, WriteConcern writeConcern,
|
||||
MongoTemplate(MongoDbFactory mongoDbFactory, MongoConverter mongoConverter, WriteConcern writeConcern,
|
||||
WriteResultChecking writeResultChecking) {
|
||||
|
||||
Assert.notNull(mongo);
|
||||
Assert.notNull(databaseName);
|
||||
Assert.notNull(mongoDbFactory);
|
||||
|
||||
this.mongo = mongo;
|
||||
this.databaseName = databaseName;
|
||||
this.mongoDbFactory = mongoDbFactory;
|
||||
this.writeConcern = writeConcern;
|
||||
this.mongoConverter = mongoConverter == null ? getDefaultMongoConverter() : mongoConverter;
|
||||
|
||||
@@ -170,37 +184,6 @@ public class MongoTemplate implements MongoOperations, ApplicationEventPublisher
|
||||
this.eventPublisher = applicationEventPublisher;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the username to use to connect to the Mongo database
|
||||
*
|
||||
* @param username
|
||||
* The username to use
|
||||
*/
|
||||
public void setUsername(String username) {
|
||||
this.username = username;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the password to use to authenticate with the Mongo database.
|
||||
*
|
||||
* @param password
|
||||
* The password to use
|
||||
*/
|
||||
public void setPassword(String password) {
|
||||
|
||||
this.password = password;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the database name to be used.
|
||||
*
|
||||
* @param databaseName
|
||||
*/
|
||||
public void setDatabaseName(String databaseName) {
|
||||
Assert.notNull(databaseName);
|
||||
this.databaseName = databaseName;
|
||||
}
|
||||
|
||||
/**
|
||||
* Returns the default {@link org.springframework.data.document.mongodb.convert.MongoConverter}.
|
||||
*
|
||||
@@ -868,7 +851,7 @@ public class MongoTemplate implements MongoOperations, ApplicationEventPublisher
|
||||
}
|
||||
|
||||
public DB getDb() {
|
||||
return MongoDbUtils.getDB(mongo, databaseName, username, password == null ? null : password.toCharArray());
|
||||
return mongoDbFactory.getDb();
|
||||
}
|
||||
|
||||
protected <T> void maybeEmitEvent(MongoMappingEvent<T> event) {
|
||||
@@ -1158,8 +1141,9 @@ public class MongoTemplate implements MongoOperations, ApplicationEventPublisher
|
||||
}
|
||||
|
||||
private void initializeMappingMongoConverter(MappingMongoConverter converter) {
|
||||
converter.setMongo(mongo);
|
||||
converter.setDefaultDatabase(databaseName);
|
||||
DB db = this.mongoDbFactory.getDb();
|
||||
converter.setMongo(db.getMongo());
|
||||
converter.setDefaultDatabase(db.getName());
|
||||
}
|
||||
|
||||
/**
|
||||
|
||||
Reference in New Issue
Block a user