Browse Source

DATADOC-269 - XML configuration for replica sets is not working

pull/1/head
Mark Pollack 14 years ago
parent
commit
dee0307055
  1. 36
      spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoFactoryBean.java
  2. 28
      spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MongoNamespaceReplicaSetTests.java
  3. 2
      spring-data-mongodb/src/test/resources/org/springframework/data/mongodb/config/MongoNamespaceReplicaSetTests-context.xml

36
spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoFactoryBean.java

@ -90,31 +90,23 @@ public class MongoFactoryBean implements FactoryBean<Mongo>, PersistenceExceptio
Mongo mongo; Mongo mongo;
if (host == null) { ServerAddress defaultOptions = new ServerAddress();
logger.debug("Property host not specified. Using default configuration"); if (mongoOptions == null) {
mongo = new Mongo(); mongoOptions = new MongoOptions();
}
} else {
ServerAddress defaultOptions = new ServerAddress();
if (mongoOptions == null) {
mongoOptions = new MongoOptions();
}
if (replicaPair != null) { if (replicaPair != null) {
if (replicaPair.size() < 2) { if (replicaPair.size() < 2) {
throw new CannotGetMongoDbConnectionException("A replica pair must have two server entries"); throw new CannotGetMongoDbConnectionException("A replica pair must have two server entries");
}
mongo = new Mongo(replicaPair.get(0), replicaPair.get(1), mongoOptions);
} else if (replicaSetSeeds != null) {
mongo = new Mongo(replicaSetSeeds, mongoOptions);
} else {
String mongoHost = host != null ? host : defaultOptions.getHost();
mongo = port != null ? new Mongo(new ServerAddress(mongoHost, port), mongoOptions) : new Mongo(mongoHost,
mongoOptions);
} }
mongo = new Mongo(replicaPair.get(0), replicaPair.get(1), mongoOptions);
} else if (replicaSetSeeds != null) {
mongo = new Mongo(replicaSetSeeds, mongoOptions);
} else {
String mongoHost = host != null ? host : defaultOptions.getHost();
mongo = port != null ? new Mongo(new ServerAddress(mongoHost, port), mongoOptions) : new Mongo(mongoHost,
mongoOptions);
} }
if (writeConcern != null) { if (writeConcern != null) {

28
spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MongoNamespaceReplicaSetTests.java

@ -20,14 +20,18 @@ import static org.junit.Assert.*;
import java.util.List; import java.util.List;
import org.junit.Ignore;
import org.junit.Test; import org.junit.Test;
import org.junit.runner.RunWith; import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.context.ApplicationContext; import org.springframework.context.ApplicationContext;
import org.springframework.data.mongodb.core.MongoFactoryBean; import org.springframework.data.mongodb.core.MongoFactoryBean;
import org.springframework.data.mongodb.core.MongoTemplate;
import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import com.mongodb.CommandResult;
import com.mongodb.Mongo;
import com.mongodb.ServerAddress; import com.mongodb.ServerAddress;
@RunWith(SpringJUnit4ClassRunner.class) @RunWith(SpringJUnit4ClassRunner.class)
@ -38,7 +42,7 @@ public class MongoNamespaceReplicaSetTests extends NamespaceTestSupport {
private ApplicationContext ctx; private ApplicationContext ctx;
@Test @Test
public void testMongoWithReplicaSets() throws Exception { public void testParsingMongoWithReplicaSets() throws Exception {
assertTrue(ctx.containsBean("replicaSetMongo")); assertTrue(ctx.containsBean("replicaSetMongo"));
MongoFactoryBean mfb = (MongoFactoryBean) ctx.getBean("&replicaSetMongo"); MongoFactoryBean mfb = (MongoFactoryBean) ctx.getBean("&replicaSetMongo");
@ -46,11 +50,27 @@ public class MongoNamespaceReplicaSetTests extends NamespaceTestSupport {
assertNotNull(replicaSetSeeds); assertNotNull(replicaSetSeeds);
assertEquals("127.0.0.1", replicaSetSeeds.get(0).getHost()); assertEquals("127.0.0.1", replicaSetSeeds.get(0).getHost());
assertEquals(27017, replicaSetSeeds.get(0).getPort()); assertEquals(10001, replicaSetSeeds.get(0).getPort());
assertEquals("localhost", replicaSetSeeds.get(1).getHost()); assertEquals("localhost", replicaSetSeeds.get(1).getHost());
assertEquals(27018, replicaSetSeeds.get(1).getPort()); assertEquals(10002, replicaSetSeeds.get(1).getPort());
}
@Test
@Ignore("CI infrastructure does not yet support replica sets")
public void testMongoWithReplicaSets() {
Mongo mongo = ctx.getBean(Mongo.class);
assertEquals(2, mongo.getAllAddress().size());
List<ServerAddress> servers = mongo.getAllAddress();
assertEquals("127.0.0.1", servers.get(0).getHost());
assertEquals("localhost", servers.get(1).getHost());
assertEquals(10001, servers.get(0).getPort());
assertEquals(10002, servers.get(1).getPort());
MongoTemplate template = new MongoTemplate(mongo, "admin");
CommandResult result = template.executeCommand("{replSetGetStatus : 1}");
assertEquals("blort", result.getString("set"));
// TODO test infrastructure to have replica sets
} }
} }

2
spring-data-mongodb/src/test/resources/org/springframework/data/mongodb/config/MongoNamespaceReplicaSetTests-context.xml

@ -7,7 +7,7 @@
http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd
http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd"> http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context-3.0.xsd">
<mongo:mongo id="replicaSetMongo" replica-set="127.0.0.1:27017,localhost:27018"/> <mongo:mongo id="replicaSetMongo" replica-set="127.0.0.1:10001,localhost:10002"/>
<!-- <!--
<mongo:db-factory dbname="database"> <mongo:db-factory dbname="database">

Loading…
Cancel
Save