diff --git a/pom.xml b/pom.xml index 88f3dade9..442fe9148 100644 --- a/pom.xml +++ b/pom.xml @@ -31,6 +31,7 @@ spring-data-mongodb 1.7.0.RC1 2.11.4 + ${mongo} @@ -102,6 +103,16 @@ + + + mongo-next + + 2.12.0-rc0 + 2.12.0 + + + + diff --git a/spring-data-mongodb-cross-store/template.mf b/spring-data-mongodb-cross-store/template.mf index 25a004b3a..b60ecf1fb 100644 --- a/spring-data-mongodb-cross-store/template.mf +++ b/spring-data-mongodb-cross-store/template.mf @@ -7,7 +7,7 @@ Import-Package: Export-Template: org.springframework.data.mongodb.crossstore.*;version="${project.version}" Import-Template: - com.mongodb.*;version="0", + com.mongodb.*;version="${mongo-osgi:[=.=.=,+1.0.0)}", javax.persistence.*;version="${jpa:[=.=.=,+1.0.0)}", org.aspectj.*;version="${aspectj:[1.0.0, 2.0.0)}", org.bson.*;version="0", diff --git a/spring-data-mongodb-log4j/template.mf b/spring-data-mongodb-log4j/template.mf index 00c0d3339..bee95d777 100644 --- a/spring-data-mongodb-log4j/template.mf +++ b/spring-data-mongodb-log4j/template.mf @@ -5,5 +5,5 @@ Bundle-ManifestVersion: 2 Import-Package: sun.reflect;version="0";resolution:=optional Import-Template: - com.mongodb.*;version="${mongo:[=.=,+1.0.0)}", + com.mongodb.*;version="${mongo-osgi:[=.=.=,+1.0.0)}", org.apache.log4j.*;version="${log4j:[=.=.=,+1.0.0)}" diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml index 8a93f7297..e7a4cb769 100644 --- a/spring-data-mongodb/pom.xml +++ b/spring-data-mongodb/pom.xml @@ -145,7 +145,7 @@ com.mysema.maven apt-maven-plugin - 1.0.8 + ${apt} com.mysema.querydsl diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoExceptionTranslator.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoExceptionTranslator.java index 674a2e1a9..9b591b56e 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoExceptionTranslator.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/MongoExceptionTranslator.java @@ -60,6 +60,11 @@ public class MongoExceptionTranslator implements PersistenceExceptionTranslator return new DataAccessResourceFailureException(ex.getMessage(), ex); } + // Driver 2.12 throws this to indicate connection problems. String comparison to avoid hard dependency + if (ex.getClass().getName().equals("com.mongodb.MongoServerSelectionException")) { + return new DataAccessResourceFailureException(ex.getMessage(), ex); + } + if (ex instanceof MongoInternalException) { return new InvalidDataAccessResourceUsageException(ex.getMessage(), ex); } diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsTemplate.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsTemplate.java index dee25a529..89a931ed7 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsTemplate.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/gridfs/GridFsTemplate.java @@ -232,7 +232,7 @@ public class GridFsTemplate implements GridFsOperations, ResourcePatternResolver } private DBObject getMappedQuery(Query query) { - return query == null ? null : getMappedQuery(query.getQueryObject()); + return query == null ? new Query().getQueryObject() : getMappedQuery(query.getQueryObject()); } private DBObject getMappedQuery(DBObject query) { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MongoDbFactoryNoDatabaseRunningTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MongoDbFactoryNoDatabaseRunningTests.java index 4e53cc0af..6e0972c5d 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MongoDbFactoryNoDatabaseRunningTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/MongoDbFactoryNoDatabaseRunningTests.java @@ -1,11 +1,11 @@ /* - * Copyright (c) 2011 by the original author(s). + * Copyright 2011-2014 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 + * 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, @@ -15,33 +15,32 @@ */ package org.springframework.data.mongodb.config; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertThat; +import static org.hamcrest.Matchers.*; +import static org.junit.Assert.*; import org.junit.Test; import org.junit.runner.RunWith; - -import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.dao.DataAccessResourceFailureException; +import org.springframework.data.mongodb.MongoDbFactory; +import org.springframework.data.mongodb.core.MongoTemplate; import org.springframework.test.context.ContextConfiguration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; /** * Integration tests for {@link MongoDbFactory}. * - * @author Thomas Risbergf + * @author Thomas Risberg + * @author Oliver Gierke */ - @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration public class MongoDbFactoryNoDatabaseRunningTests { - @Autowired - MongoTemplate mongoTemplate; + @Autowired MongoTemplate mongoTemplate; /** - * @see DATADOC-139 + * @see DATAMONGO-139 */ @Test public void startsUpWithoutADatabaseRunning() { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/AggregationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/AggregationTests.java index be3672c25..6361985b7 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/AggregationTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/aggregation/AggregationTests.java @@ -189,7 +189,7 @@ public class AggregationTests { AggregationResults results = mongoTemplate.aggregate(agg, INPUT_COLLECTION, TagCount.class); assertThat(results, is(notNullValue())); - assertThat(results.getServerUsed(), is("/127.0.0.1:27017")); + assertThat(results.getServerUsed(), endsWith("127.0.0.1:27017")); List tagCount = results.getMappedResults(); @@ -217,7 +217,7 @@ public class AggregationTests { AggregationResults results = mongoTemplate.aggregate(aggregation, INPUT_COLLECTION, TagCount.class); assertThat(results, is(notNullValue())); - assertThat(results.getServerUsed(), is("/127.0.0.1:27017")); + assertThat(results.getServerUsed(), endsWith("127.0.0.1:27017")); List tagCount = results.getMappedResults(); @@ -241,7 +241,7 @@ public class AggregationTests { AggregationResults results = mongoTemplate.aggregate(aggregation, INPUT_COLLECTION, TagCount.class); assertThat(results, is(notNullValue())); - assertThat(results.getServerUsed(), is("/127.0.0.1:27017")); + assertThat(results.getServerUsed(), endsWith("127.0.0.1:27017")); List tagCount = results.getMappedResults(); diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapreduce/GroupByTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapreduce/GroupByTests.java index 5c4ece731..2ffa472b0 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapreduce/GroupByTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/mapreduce/GroupByTests.java @@ -1,5 +1,5 @@ /* - * Copyright 2011-2012 the original author or authors. + * Copyright 2011-2014 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. @@ -15,6 +15,8 @@ */ package org.springframework.data.mongodb.core.mapreduce; +import static org.hamcrest.CoreMatchers.*; +import static org.junit.Assert.*; import static org.springframework.data.mongodb.core.mapreduce.GroupBy.*; import static org.springframework.data.mongodb.core.query.Criteria.*; @@ -42,6 +44,12 @@ import com.mongodb.DBCollection; import com.mongodb.DBObject; import com.mongodb.Mongo; +/** + * Integration tests for group-by operations. + * + * @author Mark Pollack + * @author Oliver Gierke + */ @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration("classpath:infrastructure.xml") public class GroupByTests { @@ -84,49 +92,46 @@ public class GroupByTests { @Test public void singleKeyCreation() { + DBObject gc = new GroupBy("a").getGroupByObject(); - // String expected = - // "{ \"group\" : { \"ns\" : \"test\" , \"key\" : { \"a\" : 1} , \"cond\" : null , \"$reduce\" : null , \"initial\" : null }}"; - String expected = "{ \"key\" : { \"a\" : 1} , \"$reduce\" : null , \"initial\" : null }"; - Assert.assertEquals(expected, gc.toString()); + + assertThat(gc.toString(), is("{ \"key\" : { \"a\" : 1} , \"$reduce\" : null , \"initial\" : null }")); } @Test public void multipleKeyCreation() { + DBObject gc = GroupBy.key("a", "b").getGroupByObject(); - // String expected = - // "{ \"group\" : { \"ns\" : \"test\" , \"key\" : { \"a\" : 1 , \"b\" : 1} , \"cond\" : null , \"$reduce\" : null , \"initial\" : null }}"; - String expected = "{ \"key\" : { \"a\" : 1 , \"b\" : 1} , \"$reduce\" : null , \"initial\" : null }"; - Assert.assertEquals(expected, gc.toString()); + + assertThat(gc.toString(), is("{ \"key\" : { \"a\" : 1 , \"b\" : 1} , \"$reduce\" : null , \"initial\" : null }")); } @Test public void keyFunctionCreation() { + DBObject gc = GroupBy.keyFunction("classpath:keyFunction.js").getGroupByObject(); - String expected = "{ \"$keyf\" : \"classpath:keyFunction.js\" , \"$reduce\" : null , \"initial\" : null }"; - Assert.assertEquals(expected, gc.toString()); + + assertThat(gc.toString(), + is("{ \"$keyf\" : \"classpath:keyFunction.js\" , \"$reduce\" : null , \"initial\" : null }")); } @Test public void SimpleGroup() { - createGroupByData(); - GroupByResults results; - results = mongoTemplate.group( + createGroupByData(); + GroupByResults results = mongoTemplate.group( "group_test_collection", GroupBy.key("x").initialDocument(new BasicDBObject("count", 0)) .reduceFunction("function(doc, prev) { prev.count += 1 }"), XObject.class); assertMapReduceResults(results); - } @Test public void SimpleGroupWithKeyFunction() { - createGroupByData(); - GroupByResults results; - results = mongoTemplate.group( + createGroupByData(); + GroupByResults results = mongoTemplate.group( "group_test_collection", GroupBy.keyFunction("function(doc) { return { x : doc.x }; }").initialDocument("{ count: 0 }") .reduceFunction("function(doc, prev) { prev.count += 1 }"), XObject.class); @@ -136,30 +141,35 @@ public class GroupByTests { @Test public void SimpleGroupWithFunctionsAsResources() { - createGroupByData(); - GroupByResults results; - results = mongoTemplate.group("group_test_collection", GroupBy.keyFunction("classpath:keyFunction.js") - .initialDocument("{ count: 0 }").reduceFunction("classpath:groupReduce.js"), XObject.class); + createGroupByData(); + GroupByResults results = mongoTemplate.group( + "group_test_collection", + GroupBy.keyFunction("classpath:keyFunction.js").initialDocument("{ count: 0 }") + .reduceFunction("classpath:groupReduce.js"), XObject.class); assertMapReduceResults(results); } @Test public void SimpleGroupWithQueryAndFunctionsAsResources() { - createGroupByData(); - GroupByResults results; - results = mongoTemplate.group(where("x").gt(0), "group_test_collection", keyFunction("classpath:keyFunction.js") - .initialDocument("{ count: 0 }").reduceFunction("classpath:groupReduce.js"), XObject.class); + createGroupByData(); + GroupByResults results = mongoTemplate.group( + where("x").gt(0), + "group_test_collection", + keyFunction("classpath:keyFunction.js").initialDocument("{ count: 0 }").reduceFunction( + "classpath:groupReduce.js"), XObject.class); assertMapReduceResults(results); } private void assertMapReduceResults(GroupByResults results) { + DBObject dboRawResults = results.getRawResults(); - String expected = "{ \"serverUsed\" : \"/127.0.0.1:27017\" , \"retval\" : [ { \"x\" : 1.0 , \"count\" : 2.0} , { \"x\" : 2.0 , \"count\" : 1.0} , { \"x\" : 3.0 , \"count\" : 3.0}] , \"count\" : 6.0 , \"keys\" : 3 , \"ok\" : 1.0}"; - Assert.assertEquals(expected, dboRawResults.toString()); + + assertThat(dboRawResults.containsField("serverUsed"), is(true)); + assertThat(dboRawResults.get("serverUsed").toString(), endsWith("127.0.0.1:27017")); int numResults = 0; for (XObject xObject : results) { @@ -174,13 +184,15 @@ public class GroupByTests { } numResults++; } - Assert.assertEquals(3, numResults); - Assert.assertEquals(6, results.getCount(), 0.001); - Assert.assertEquals(3, results.getKeys()); + assertThat(numResults, is(3)); + assertThat(results.getKeys(), is(3)); + assertEquals(6, results.getCount(), 0.001); } private void createGroupByData() { + DBCollection c = mongoTemplate.getDb().getCollection("group_test_collection"); + c.save(new BasicDBObject("x", 1)); c.save(new BasicDBObject("x", 1)); c.save(new BasicDBObject("x", 2)); @@ -188,5 +200,4 @@ public class GroupByTests { c.save(new BasicDBObject("x", 3)); c.save(new BasicDBObject("x", 3)); } - } diff --git a/spring-data-mongodb/template.mf b/spring-data-mongodb/template.mf index 5893f2718..ace44eab8 100644 --- a/spring-data-mongodb/template.mf +++ b/spring-data-mongodb/template.mf @@ -8,7 +8,7 @@ Export-Template: org.springframework.data.mongodb.*;version="${project.version}" Import-Template: com.google.common.base.*;version="[11.0.0,14.0.0)";resolution:=optional, - com.mongodb.*;version="0", + com.mongodb.*;version="${mongo-osgi:[=.=.=,+1.0.0)}", com.mysema.query.*;version="[2.1.1, 3.0.0)";resolution:=optional, javax.annotation.processing.*;version="0", javax.enterprise.*;version="${cdi:[=.=.=,+1.0.0)}";resolution:=optional,