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 be8208874..f28eb6a15 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
@@ -22,6 +22,7 @@ import org.springframework.beans.factory.BeanDefinitionStoreException;
import org.springframework.beans.factory.config.RuntimeBeanReference;
import org.springframework.beans.factory.support.AbstractBeanDefinition;
import org.springframework.beans.factory.support.BeanDefinitionBuilder;
+import org.springframework.beans.factory.support.BeanDefinitionReaderUtils;
import org.springframework.beans.factory.support.BeanDefinitionRegistry;
import org.springframework.beans.factory.xml.AbstractBeanDefinitionParser;
import org.springframework.beans.factory.xml.ParserContext;
@@ -84,6 +85,7 @@ public class MongoDbFactoryParser extends AbstractBeanDefinitionParser {
String mongoRef = element.getAttribute("mongo-ref");
+ String mongoId = null;
if (!StringUtils.hasText(mongoRef)) {
BeanDefinitionBuilder mongoBuilder = BeanDefinitionBuilder.genericBeanDefinition(MongoFactoryBean.class);
Element mongoEl = DomUtils.getChildElementByTagName(element, "mongo");
@@ -94,11 +96,24 @@ public class MongoDbFactoryParser extends AbstractBeanDefinitionParser {
mongoBuilder.addPropertyValue("port", (StringUtils.hasText(overridePort) ? overridePort : port));
ParsingUtils.parseMongoOptions(parserContext, mongoEl, mongoBuilder);
ParsingUtils.parseReplicaSet(parserContext, mongoEl, mongoBuilder);
+ String innerId = mongoEl.getAttribute("id");
+ if (StringUtils.hasText(innerId)) {
+ mongoId = innerId;
+ }
}
else {
mongoBuilder.addPropertyValue("host", host);
mongoBuilder.addPropertyValue("port", port);
}
+
+ /* MLP - WIP
+ if (mongoId == null) {
+ mongoRef = BeanDefinitionReaderUtils.registerWithGeneratedName(mongoBuilder.getBeanDefinition(), parserContext.getRegistry());
+ } else {
+ registry.registerBeanDefinition(MONGO, mongoBuilder.getBeanDefinition());
+ mongoRef = MONGO;
+ }
+ */
registry.registerBeanDefinition(MONGO, mongoBuilder.getBeanDefinition());
mongoRef = MONGO;
}
diff --git a/spring-data-mongodb/src/test/resources/org/springframework/data/document/mongodb/config/MongoNamespaceTests-context.xml b/spring-data-mongodb/src/test/resources/org/springframework/data/document/mongodb/config/MongoNamespaceTests-context.xml
index 719b43142..ce1c72d08 100644
--- a/spring-data-mongodb/src/test/resources/org/springframework/data/document/mongodb/config/MongoNamespaceTests-context.xml
+++ b/spring-data-mongodb/src/test/resources/org/springframework/data/document/mongodb/config/MongoNamespaceTests-context.xml
@@ -10,7 +10,7 @@
-
+
Registering a MongoDbFactory instance using Java based
metadata
- As an alternative to configuring a com.mongodb.Mongo instance and
- later providing the database name, the MongoDbFactory
+ As an alternative to configuring a
+ com.mongodb.Mongo instance and later providing
+ the database name and optionally the username and password, is to use
+ SimpleMongoDbFactory, which implements the
+ MongoDbFactory inteface shown below. A
+ reference to MongoDbFactory can be passed
+ to constructors of MongoTemplate to simplify its
+ creation.
+
+ public interface MongoDbFactory {
+
+ DB getDb() throws DataAccessException;
+
+ DB getDb(String dbName) throws DataAccessException;
+
+}
+
+ The most simple usage is shown below
+
+ @Configuration
+public class MongoConfiguration {
+
+ public @Bean MongoDbFactory mongoDbFactory() throws Exception {
+ return new SimpleMongoDbFactory(new Mongo(), "database");
+ }
+
+}
+
+ To define the username and password create an instance of
+ org.springframework.data.authentication.UserCredentials and pass it into
+ the constructor as shown below
+
+ @Configuration
+public class MongoConfiguration {
+
+ public @Bean MongoDbFactory mongoDbFactory() throws Exception {
+ UserCredentials userCredentials = new UserCredentials("joe", "secret");
+ return new SimpleMongoDbFactory(new Mongo(), "database", userCredentials);
+ }
+}
+
+
+
+
+ Registering a Mongo instance using XML based metadata
+
+ The mongo namespace lets you create a MongoDbFactory instance
+ which is a convenient way to group together the a mongo instance, a
+ database name and an optional username and password. A simple usage is
+ shown below
+
+ <mongo:db-factory dbname="database" >