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" >