Browse Source

DATADOC-88 introducing a MongoDbFactory interface and MongoTemplate constructors that take this as an argument

pull/1/head
Thomas Risberg 15 years ago
parent
commit
86960006cb
  1. 11
      spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoDbFactory.java
  2. 33
      spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoDbFactoryBean.java
  3. 74
      spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoTemplate.java

11
spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoDbFactory.java

@ -0,0 +1,11 @@ @@ -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;
}

33
spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoDbFactoryBean.java

@ -21,6 +21,7 @@ import org.apache.commons.logging.LogFactory; @@ -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; @@ -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 { @@ -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 { @@ -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) {

74
spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoTemplate.java

@ -95,13 +95,10 @@ public class MongoTemplate implements MongoOperations, ApplicationEventPublisher @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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 @@ -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());
}
/**

Loading…
Cancel
Save