diff --git a/spring-data-mongodb-cross-store/src/test/resources/META-INF/spring/applicationContext.xml b/spring-data-mongodb-cross-store/src/test/resources/META-INF/spring/applicationContext.xml
index a44b49ffc..949a43d1e 100644
--- a/spring-data-mongodb-cross-store/src/test/resources/META-INF/spring/applicationContext.xml
+++ b/spring-data-mongodb-cross-store/src/test/resources/META-INF/spring/applicationContext.xml
@@ -25,7 +25,7 @@
-
+
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoDbFactory.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoDbFactory.java
index fcef8fc4f..c0fff2ede 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoDbFactory.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoDbFactory.java
@@ -11,6 +11,4 @@ public interface MongoDbFactory {
Mongo getMongo();
- String getDatabaseName();
-
}
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoDbFactoryBean.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoDbFactoryBean.java
deleted file mode 100644
index 439dbc178..000000000
--- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoDbFactoryBean.java
+++ /dev/null
@@ -1,154 +0,0 @@
-/*
- * Copyright 2010-2011 the original author or authors.
- *
- * Licensed under the Apache License, Version 2.0 (the "License");
- * you may not use this file except in compliance with the License.
- * You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS,
- * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
- * See the License for the specific language governing permissions and
- * limitations under the License.
- */
-
-package org.springframework.data.document.mongodb;
-
-import org.apache.commons.logging.Log;
-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.data.authentication.UserCredentials;
-import org.springframework.util.Assert;
-
-import com.mongodb.DB;
-import com.mongodb.Mongo;
-
-/**
- * Convenient factory for configuring MongoDB.
- *
- * @author Thomas Risberg
- * @since 1.0
- */
-public class MongoDbFactoryBean implements MongoDbFactory, FactoryBean, InitializingBean {
- //ToDo: add PersistenceExceptionTranslator ???
-
- /**
- * Logger, available to subclasses.
- */
- protected final Log logger = LogFactory.getLog(getClass());
-
- private Mongo mongo;
- private String host;
- private Integer port;
- private String databaseName;
- private String username;
- private String password;
-
-
- public MongoDbFactoryBean() {
- }
-
- public MongoDbFactoryBean(Mongo mongo, String databaseName, UserCredentials userCredentials) throws DataAccessException {
- this(mongo, databaseName);
- this.username = userCredentials.getUsername();
- this.password = userCredentials.getPassword();
- }
-
- 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;
- }
-
- public void setDatabaseName(String databaseName) {
- this.databaseName = databaseName;
- }
-
- public void setHost(String host) {
- this.host = host;
- }
-
- public void setPort(int port) {
- this.port = port;
- }
-
- public void setUsername(String username) {
- this.username = username;
- }
-
- public void setPassword(String password) {
- this.password = password;
- }
-
- public DB getDb() throws DataAccessException {
- Assert.notNull(mongo, "Mongo must not be null");
- Assert.hasText(databaseName, "Database name must not be empty");
- return MongoDbUtils.getDB(mongo, databaseName, username, password == null ? null : password.toCharArray());
- }
-
- public Mongo getMongo() {
- return this.mongo;
- }
-
- public String getDatabaseName() {
- return this.databaseName;
- }
-
- public MongoDbFactory getObject() throws Exception {
- return this;
- }
-
- public Class extends MongoDbFactory> getObjectType() {
- return MongoDbFactory.class;
- }
-
- public boolean isSingleton() {
- return false;
- }
-
- public void afterPropertiesSet() throws Exception {
- // 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 (mongo == null) {
- logger.warn("Property mongo not specified. Using default configuration");
- if (host == null) {
- mongo = new Mongo();
- }
- else {
- if (port == null) {
- mongo = new Mongo(host);
- }
- else {
- mongo = new Mongo(host, port);
- }
- }
- }
- }
-
-}
\ No newline at end of file
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoTemplate.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoTemplate.java
index 9c3703c4c..013f60e60 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoTemplate.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/MongoTemplate.java
@@ -122,7 +122,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware {
* @param databaseName
*/
public MongoTemplate(Mongo mongo, String databaseName) {
- this(new MongoDbFactoryBean(mongo, databaseName), null, null, null);
+ this(new SimpleMongoDbFactory(mongo, databaseName), null, null, null);
}
/**
@@ -134,7 +134,7 @@ public class MongoTemplate implements MongoOperations, ApplicationContextAware {
* @param userCredentials
*/
public MongoTemplate(Mongo mongo, String databaseName, UserCredentials userCredentials) {
- this(new MongoDbFactoryBean(mongo, databaseName, userCredentials));
+ this(new SimpleMongoDbFactory(mongo, databaseName, userCredentials));
}
/**
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/SimpleMongoDbFactory.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/SimpleMongoDbFactory.java
new file mode 100644
index 000000000..b0b3a744b
--- /dev/null
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/SimpleMongoDbFactory.java
@@ -0,0 +1,58 @@
+package org.springframework.data.document.mongodb;
+
+import org.apache.commons.logging.Log;
+import org.apache.commons.logging.LogFactory;
+import org.springframework.dao.DataAccessException;
+import org.springframework.data.authentication.UserCredentials;
+import org.springframework.util.Assert;
+
+import com.mongodb.DB;
+import com.mongodb.Mongo;
+
+public class SimpleMongoDbFactory implements MongoDbFactory {
+
+ /**
+ * Logger, available to subclasses.
+ */
+ protected final Log logger = LogFactory.getLog(getClass());
+
+ private Mongo mongo;
+ private String databaseName;
+ private String username;
+ private String password;
+
+ /**
+ * Create an instance of SimpleMongoDbFactory given the Mongo instance and database name
+ * @param mongo Mongo instance, not null
+ * @param databaseName Database name, not null
+ */
+ public SimpleMongoDbFactory(Mongo mongo, String databaseName) {
+ Assert.notNull(mongo, "Mongo must not be null");
+ Assert.hasText(databaseName, "Database name must not be empty");
+ this.mongo = mongo;
+ this.databaseName = databaseName;
+ }
+
+ /**
+ * Create an instance of SimpleMongoDbFactory given the Mongo instance, database name, and username/password
+ * @param mongo Mongo instance, not null
+ * @param databaseName Database name, not null
+ * @param userCredentials username and password
+ */
+ public SimpleMongoDbFactory(Mongo mongo, String databaseName, UserCredentials userCredentials) {
+ this(mongo, databaseName);
+ this.username = userCredentials.getUsername();
+ this.password = userCredentials.getPassword();
+ }
+
+ public DB getDb() throws DataAccessException {
+ Assert.notNull(mongo, "Mongo must not be null");
+ Assert.hasText(databaseName, "Database name must not be empty");
+ return MongoDbUtils.getDB(mongo, databaseName, username, password == null ? null : password.toCharArray());
+ }
+
+ public Mongo getMongo() {
+ return this.mongo;
+ }
+
+}
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/config/AbstractMongoConfiguration.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/config/AbstractMongoConfiguration.java
index c69359086..e516e62bc 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/config/AbstractMongoConfiguration.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/config/AbstractMongoConfiguration.java
@@ -26,8 +26,8 @@ import org.springframework.context.annotation.Configuration;
import org.springframework.core.type.filter.AnnotationTypeFilter;
import org.springframework.data.annotation.Persistent;
import org.springframework.data.document.mongodb.MongoDbFactory;
-import org.springframework.data.document.mongodb.MongoDbFactoryBean;
import org.springframework.data.document.mongodb.MongoTemplate;
+import org.springframework.data.document.mongodb.SimpleMongoDbFactory;
import org.springframework.data.document.mongodb.convert.MappingMongoConverter;
import org.springframework.data.document.mongodb.mapping.Document;
import org.springframework.data.document.mongodb.mapping.MongoMappingContext;
@@ -48,7 +48,7 @@ public abstract class AbstractMongoConfiguration {
@Bean
public MongoDbFactory mongoDbFactory() throws Exception {
- return new MongoDbFactoryBean(mongo(), defaultDatabaseName());
+ return new SimpleMongoDbFactory(mongo(), defaultDatabaseName());
}
public String mappingBasePackage() {
diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/config/MongoDbFactoryParser.java b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/config/MongoDbFactoryParser.java
index c487ef73d..be8208874 100644
--- a/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/config/MongoDbFactoryParser.java
+++ b/spring-data-mongodb/src/main/java/org/springframework/data/document/mongodb/config/MongoDbFactoryParser.java
@@ -25,8 +25,9 @@ import org.springframework.beans.factory.support.BeanDefinitionBuilder;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
-import org.springframework.data.document.mongodb.MongoDbFactoryBean;
+import org.springframework.data.authentication.UserCredentials;
import org.springframework.data.document.mongodb.MongoFactoryBean;
+import org.springframework.data.document.mongodb.SimpleMongoDbFactory;
import org.springframework.util.StringUtils;
import org.springframework.util.xml.DomUtils;
import org.w3c.dom.Element;
@@ -47,62 +48,66 @@ public class MongoDbFactoryParser extends AbstractBeanDefinitionParser {
@Override
protected AbstractBeanDefinition parseInternal(Element element, ParserContext parserContext) {
- BeanDefinitionRegistry registry = parserContext.getRegistry();
- BeanDefinitionBuilder dbFactoryBuilder = BeanDefinitionBuilder.genericBeanDefinition(MongoDbFactoryBean.class);
-
- // Host/Port used in this and the mongoFactory
- String host = element.getAttribute("host");
- if (!StringUtils.hasText(host)) {
- host = "localhost";
- }
- dbFactoryBuilder.addPropertyValue("host", host);
- String port = element.getAttribute("port");
- if (!StringUtils.hasText(port)) {
- port = "27017";
- }
- dbFactoryBuilder.addPropertyValue("port", port);
-
- // Username/Password not always used (but is in CloudFoundry
- String username = element.getAttribute("username");
- if (StringUtils.hasText(username)) {
- dbFactoryBuilder.addPropertyValue("username", username);
- }
- String password = element.getAttribute("password");
- if (StringUtils.hasText(password)) {
- dbFactoryBuilder.addPropertyValue("password", password);
- }
-
- // Database name
- String dbname = element.getAttribute("dbname");
- if (!StringUtils.hasText(dbname)) {
- dbname = "db";
- }
- dbFactoryBuilder.addPropertyValue("databaseName", dbname);
-
- // Create or reference a MongoFactory instance.
- // Also respect embedded "mongo:mongo" definitions.
- String mongoRef = element.getAttribute("mongo-ref");
- if (!StringUtils.hasText(mongoRef)) {
- BeanDefinitionBuilder mongoBuilder = BeanDefinitionBuilder.genericBeanDefinition(MongoFactoryBean.class);
- Element mongoEl = DomUtils.getChildElementByTagName(element, "mongo");
- if (null != mongoEl) {
- String overrideHost = mongoEl.getAttribute("host");
- mongoBuilder.addPropertyValue("host", (StringUtils.hasText(overrideHost) ? overrideHost : host));
- String overridePort = mongoEl.getAttribute("port");
- mongoBuilder.addPropertyValue("port", (StringUtils.hasText(overridePort) ? overridePort : port));
- ParsingUtils.parseMongoOptions(parserContext, mongoEl, mongoBuilder);
- ParsingUtils.parseReplicaSet(parserContext, mongoEl, mongoBuilder);
- }
- else {
- mongoBuilder.addPropertyValue("host", host);
- mongoBuilder.addPropertyValue("port", port);
- }
- registry.registerBeanDefinition(MONGO, mongoBuilder.getBeanDefinition());
- mongoRef = MONGO;
- }
- dbFactoryBuilder.addPropertyValue("mongo", new RuntimeBeanReference(mongoRef));
-
- return dbFactoryBuilder.getRawBeanDefinition();
+ BeanDefinitionRegistry registry = parserContext.getRegistry();
+ BeanDefinitionBuilder dbFactoryBuilder = BeanDefinitionBuilder.genericBeanDefinition(SimpleMongoDbFactory.class);
+
+ // UserCredentials
+ BeanDefinitionBuilder userCredentialsBuilder = BeanDefinitionBuilder.genericBeanDefinition(UserCredentials.class);
+ String username = element.getAttribute("username");
+ if (StringUtils.hasText(username)) {
+ userCredentialsBuilder.addConstructorArgValue(username);
+ } else {
+ userCredentialsBuilder.addConstructorArgValue(null);
+ }
+ String password = element.getAttribute("password");
+ if (StringUtils.hasText(password)) {
+ userCredentialsBuilder.addConstructorArgValue(password);
+ } else {
+ userCredentialsBuilder.addConstructorArgValue(null);
+ }
+
+ // host and port
+ String host = element.getAttribute("host");
+ if (!StringUtils.hasText(host)) {
+ host = "localhost";
+ }
+ String port = element.getAttribute("port");
+ if (!StringUtils.hasText(port)) {
+ port = "27017";
+ }
+
+ // Database name
+ String dbname = element.getAttribute("dbname");
+ if (!StringUtils.hasText(dbname)) {
+ dbname = "db";
+ }
+
+
+ String mongoRef = element.getAttribute("mongo-ref");
+ if (!StringUtils.hasText(mongoRef)) {
+ BeanDefinitionBuilder mongoBuilder = BeanDefinitionBuilder.genericBeanDefinition(MongoFactoryBean.class);
+ Element mongoEl = DomUtils.getChildElementByTagName(element, "mongo");
+ if (null != mongoEl) {
+ String overrideHost = mongoEl.getAttribute("host");
+ mongoBuilder.addPropertyValue("host", (StringUtils.hasText(overrideHost) ? overrideHost : host));
+ String overridePort = mongoEl.getAttribute("port");
+ mongoBuilder.addPropertyValue("port", (StringUtils.hasText(overridePort) ? overridePort : port));
+ ParsingUtils.parseMongoOptions(parserContext, mongoEl, mongoBuilder);
+ ParsingUtils.parseReplicaSet(parserContext, mongoEl, mongoBuilder);
+ }
+ else {
+ mongoBuilder.addPropertyValue("host", host);
+ mongoBuilder.addPropertyValue("port", port);
+ }
+ registry.registerBeanDefinition(MONGO, mongoBuilder.getBeanDefinition());
+ mongoRef = MONGO;
+ }
+
+ dbFactoryBuilder.addConstructorArgValue(new RuntimeBeanReference(mongoRef));
+ dbFactoryBuilder.addConstructorArgValue(dbname);
+ dbFactoryBuilder.addConstructorArgValue(userCredentialsBuilder.getBeanDefinition());
+
+ return dbFactoryBuilder.getRawBeanDefinition();
}
-
+
}
diff --git a/spring-data-mongodb/src/test/resources/geospatial.xml b/spring-data-mongodb/src/test/resources/geospatial.xml
index d68edf85c..18fe1ff3b 100644
--- a/spring-data-mongodb/src/test/resources/geospatial.xml
+++ b/spring-data-mongodb/src/test/resources/geospatial.xml
@@ -7,7 +7,7 @@
-
+
diff --git a/spring-data-mongodb/src/test/resources/infrastructure.xml b/spring-data-mongodb/src/test/resources/infrastructure.xml
index 88b5112a2..f60d6d06b 100644
--- a/spring-data-mongodb/src/test/resources/infrastructure.xml
+++ b/spring-data-mongodb/src/test/resources/infrastructure.xml
@@ -8,7 +8,7 @@
-
+