diff --git a/Jenkinsfile b/Jenkinsfile index 81b5fead7..de2b6eba9 100644 --- a/Jenkinsfile +++ b/Jenkinsfile @@ -20,48 +20,10 @@ pipeline { stages { stage("Docker images") { parallel { - stage('Publish JDK (main) + MongoDB 4.0') { - when { - anyOf { - changeset "ci/openjdk8-mongodb-4.0/**" - changeset "ci/pipeline.properties" - } - } - agent { label 'data' } - options { timeout(time: 30, unit: 'MINUTES') } - - steps { - script { - def image = docker.build("springci/spring-data-with-mongodb-4.0:${p['java.main.tag']}", "--build-arg BASE=${p['docker.java.main.image']} --build-arg MONGODB=${p['docker.mongodb.4.0.version']} ci/openjdk8-mongodb-4.0/") - docker.withRegistry('', 'hub.docker.com-springbuildmaster') { - image.push() - } - } - } - } - stage('Publish JDK (main) + MongoDB 4.4') { - when { - anyOf { - changeset "ci/openjdk8-mongodb-4.4/**" - changeset "ci/pipeline.properties" - } - } - agent { label 'data' } - options { timeout(time: 30, unit: 'MINUTES') } - - steps { - script { - def image = docker.build("springci/spring-data-with-mongodb-4.4:${p['java.main.tag']}", "--build-arg BASE=${p['docker.java.main.image']} --build-arg MONGODB=${p['docker.mongodb.4.4.version']} ci/openjdk8-mongodb-4.4/") - docker.withRegistry('', 'hub.docker.com-springbuildmaster') { - image.push() - } - } - } - } stage('Publish JDK (main) + MongoDB 5.0') { when { anyOf { - changeset "ci/openjdk8-mongodb-5.0/**" + changeset "ci/openjdk17-mongodb-5.0/**" changeset "ci/pipeline.properties" } } @@ -77,7 +39,7 @@ pipeline { } } } - stage('Publish JDK (LTS) + MongoDB 4.4') { + stage('Publish JDK (main) + MongoDB 4.4') { when { anyOf { changeset "ci/openjdk17-mongodb-4.4/**" diff --git a/ci/openjdk11-mongodb-4.4/Dockerfile b/ci/openjdk11-mongodb-4.4/Dockerfile deleted file mode 100644 index abacb005e..000000000 --- a/ci/openjdk11-mongodb-4.4/Dockerfile +++ /dev/null @@ -1,21 +0,0 @@ -ARG BASE -FROM ${BASE} -# Any ARG statements before FROM are cleared. -ARG MONGODB - -ENV TZ=Etc/UTC -ENV DEBIAN_FRONTEND=noninteractive - -RUN set -eux; \ - sed -i -e 's/archive.ubuntu.com/mirror.one.com/g' /etc/apt/sources.list; \ - sed -i -e 's/security.ubuntu.com/mirror.one.com/g' /etc/apt/sources.list; \ - sed -i -e 's/http/https/g' /etc/apt/sources.list ; \ - apt-get update && apt-get install -y apt-transport-https apt-utils gnupg2 ; \ - apt-key adv --keyserver hkps://keyserver.ubuntu.com:443 --recv 656408E390CFB1F5 ; \ - echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.4.list; \ - echo ${TZ} > /etc/timezone; - -RUN apt-get update ; \ - apt-get install -y mongodb-org=${MONGODB} mongodb-org-server=${MONGODB} mongodb-org-shell=${MONGODB} mongodb-org-mongos=${MONGODB} mongodb-org-tools=${MONGODB} ; \ - apt-get clean; \ - rm -rf /var/lib/apt/lists/*; diff --git a/ci/openjdk8-mongodb-5.0/Dockerfile b/ci/openjdk17-mongodb-5.0/Dockerfile similarity index 100% rename from ci/openjdk8-mongodb-5.0/Dockerfile rename to ci/openjdk17-mongodb-5.0/Dockerfile diff --git a/ci/openjdk8-mongodb-4.0/Dockerfile b/ci/openjdk8-mongodb-4.0/Dockerfile deleted file mode 100644 index 99586b796..000000000 --- a/ci/openjdk8-mongodb-4.0/Dockerfile +++ /dev/null @@ -1,21 +0,0 @@ -ARG BASE -FROM ${BASE} -# Any ARG statements before FROM are cleared. -ARG MONGODB - -ENV TZ=Etc/UTC -ENV DEBIAN_FRONTEND=noninteractive - -RUN RUN set -eux; \ - sed -i -e 's/archive.ubuntu.com/mirror.one.com/g' /etc/apt/sources.list; \ - sed -i -e 's/security.ubuntu.com/mirror.one.com/g' /etc/apt/sources.list; \ - sed -i -e 's/http/https/g' /etc/apt/sources.list ; \ - apt-get update && apt-get install -y apt-transport-https apt-utils gnupg2 ; \ - apt-key adv --keyserver hkps://keyserver.ubuntu.com:443 --recv 9DA31620334BD75D9DCB49F368818C72E52529D4 ; \ - echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.0 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.0.list; \ - echo ${TZ} > /etc/timezone; - -RUN apt-get update ; \ - apt-get install -y mongodb-org=${MONGODB} mongodb-org-server=${MONGODB} mongodb-org-shell=${MONGODB} mongodb-org-mongos=${MONGODB} mongodb-org-tools=${MONGODB} ; \ - apt-get clean; \ - rm -rf /var/lib/apt/lists/*; diff --git a/ci/openjdk8-mongodb-4.4/Dockerfile b/ci/openjdk8-mongodb-4.4/Dockerfile deleted file mode 100644 index 87e212dbf..000000000 --- a/ci/openjdk8-mongodb-4.4/Dockerfile +++ /dev/null @@ -1,23 +0,0 @@ -ARG BASE -FROM ${BASE} -# Any ARG statements before FROM are cleared. -ARG MONGODB - -ENV TZ=Etc/UTC -ENV DEBIAN_FRONTEND=noninteractive - -RUN set -eux; \ - sed -i -e 's/archive.ubuntu.com/mirror.one.com/g' /etc/apt/sources.list; \ - sed -i -e 's/security.ubuntu.com/mirror.one.com/g' /etc/apt/sources.list; \ - sed -i -e 's/http/https/g' /etc/apt/sources.list ; \ - apt-get update && apt-get install -y apt-transport-https apt-utils gnupg2 ; \ - apt-key adv --keyserver hkps://keyserver.ubuntu.com:443 --recv 656408E390CFB1F5 ; \ - echo "deb [ arch=amd64 ] https://repo.mongodb.org/apt/ubuntu bionic/mongodb-org/4.4 multiverse" | tee /etc/apt/sources.list.d/mongodb-org-4.4.list; \ - echo ${TZ} > /etc/timezone; - -RUN apt-get update ; \ - ln -T /bin/true /usr/bin/systemctl ; \ - apt-get install -y mongodb-org=${MONGODB} mongodb-org-server=${MONGODB} mongodb-org-shell=${MONGODB} mongodb-org-mongos=${MONGODB} mongodb-org-tools=${MONGODB} ; \ - rm /usr/bin/systemctl ; \ - apt-get clean ; \ - rm -rf /var/lib/apt/lists/* ; diff --git a/ci/pipeline.properties b/ci/pipeline.properties index 5d91102d2..550af0512 100644 --- a/ci/pipeline.properties +++ b/ci/pipeline.properties @@ -1,6 +1,6 @@ # Java versions -java.main.tag=8u312-b07-jdk -java.next.tag=11.0.13_8-jdk +java.main.tag=17.0.1_12-jdk +java.next.tag=17.0.1_12-jdk java.lts.tag=17.0.1_12-jdk # Docker container images - standard diff --git a/pom.xml b/pom.xml index 63af8ca47..798ed1398 100644 --- a/pom.xml +++ b/pom.xml @@ -5,7 +5,7 @@ org.springframework.data spring-data-mongodb-parent - 3.4.0-SNAPSHOT + 4.0.0-SNAPSHOT pom Spring Data MongoDB @@ -15,7 +15,7 @@ org.springframework.data.build spring-data-parent - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT @@ -24,9 +24,10 @@ + 16 multi spring-data-mongodb - 2.7.0-SNAPSHOT + 3.0.0-SNAPSHOT 4.4.1 ${mongo} 1.19 diff --git a/spring-data-mongodb-benchmarks/pom.xml b/spring-data-mongodb-benchmarks/pom.xml index e2704a675..c28a240d2 100644 --- a/spring-data-mongodb-benchmarks/pom.xml +++ b/spring-data-mongodb-benchmarks/pom.xml @@ -7,7 +7,7 @@ org.springframework.data spring-data-mongodb-parent - 3.4.0-SNAPSHOT + 4.0.0-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb-distribution/pom.xml b/spring-data-mongodb-distribution/pom.xml index b75f8bf62..f6a77ea6f 100644 --- a/spring-data-mongodb-distribution/pom.xml +++ b/spring-data-mongodb-distribution/pom.xml @@ -14,7 +14,7 @@ org.springframework.data spring-data-mongodb-parent - 3.4.0-SNAPSHOT + 4.0.0-SNAPSHOT ../pom.xml diff --git a/spring-data-mongodb/pom.xml b/spring-data-mongodb/pom.xml index ca96626cc..6d73c29f8 100644 --- a/spring-data-mongodb/pom.xml +++ b/spring-data-mongodb/pom.xml @@ -11,7 +11,7 @@ org.springframework.data spring-data-mongodb-parent - 3.4.0-SNAPSHOT + 4.0.0-SNAPSHOT ../pom.xml @@ -156,7 +156,7 @@ org.apache.geronimo.specs geronimo-jcdi_2.0_spec 1.0.1 - test + optional @@ -217,20 +217,6 @@ test - - joda-time - joda-time - ${jodatime} - test - - - - org.threeten - threetenbp - ${threetenbp} - true - - com.fasterxml.jackson.core jackson-databind diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MongoAuditingRegistrar.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MongoAuditingRegistrar.java index ff7301589..331128366 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MongoAuditingRegistrar.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/config/MongoAuditingRegistrar.java @@ -18,6 +18,7 @@ package org.springframework.data.mongodb.config; import java.lang.annotation.Annotation; import org.springframework.beans.factory.config.BeanDefinition; +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.BeanDefinitionRegistry; @@ -27,6 +28,8 @@ import org.springframework.data.auditing.IsNewAwareAuditingHandler; import org.springframework.data.auditing.config.AuditingBeanDefinitionRegistrarSupport; import org.springframework.data.auditing.config.AuditingConfiguration; import org.springframework.data.config.ParsingUtils; +import org.springframework.data.mapping.context.MappingContext; +import org.springframework.data.mongodb.core.mapping.MongoMappingContext; import org.springframework.data.mongodb.core.mapping.event.AuditingEntityCallback; import org.springframework.util.Assert; @@ -81,8 +84,8 @@ class MongoAuditingRegistrar extends AuditingBeanDefinitionRegistrarSupport { BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(IsNewAwareAuditingHandler.class); - BeanDefinitionBuilder definition = BeanDefinitionBuilder.genericBeanDefinition(PersistentEntitiesFactoryBean.class); - definition.setAutowireMode(AbstractBeanDefinition.AUTOWIRE_CONSTRUCTOR); + BeanDefinitionBuilder definition = BeanDefinitionBuilder.genericBeanDefinition(org.springframework.data.repository.config.PersistentEntitiesFactoryBean.class); + definition.addConstructorArgValue(new RuntimeBeanReference(MappingContext.class)); builder.addConstructorArgValue(definition.getBeanDefinition()); return configureDefaultAuditHandlerAttributes(configuration, builder); diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MongoCustomConversions.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MongoCustomConversions.java index 9f1925f6e..e04c9cb0f 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MongoCustomConversions.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/convert/MongoCustomConversions.java @@ -36,7 +36,6 @@ import org.springframework.core.convert.TypeDescriptor; import org.springframework.core.convert.converter.Converter; import org.springframework.core.convert.converter.ConverterFactory; import org.springframework.core.convert.converter.GenericConverter; -import org.springframework.data.convert.JodaTimeConverters; import org.springframework.data.convert.WritingConverter; import org.springframework.data.mapping.model.SimpleTypeHolder; import org.springframework.data.mongodb.core.mapping.MongoSimpleTypes; @@ -65,7 +64,6 @@ public class MongoCustomConversions extends org.springframework.data.convert.Cus converters.add(CustomToStringConverter.INSTANCE); converters.addAll(MongoConverters.getConvertersToRegister()); - converters.addAll(JodaTimeConverters.getConvertersToRegister()); converters.addAll(GeoConverters.getConvertersToRegister()); STORE_CONVERTERS = Collections.unmodifiableList(converters); diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/UnwrappedMongoPersistentProperty.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/UnwrappedMongoPersistentProperty.java index 7ad3e0074..8b3c90618 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/UnwrappedMongoPersistentProperty.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/core/mapping/UnwrappedMongoPersistentProperty.java @@ -149,11 +149,6 @@ class UnwrappedMongoPersistentProperty implements MongoPersistentProperty { return delegate.getTypeInformation(); } - @Override - public Iterable> getPersistentEntityTypes() { - return delegate.getPersistentEntityTypes(); - } - @Override public Iterable> getPersistentEntityTypeInformation() { return delegate.getPersistentEntityTypeInformation(); diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ConvertingParameterAccessor.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ConvertingParameterAccessor.java index a880a1c05..1d3fa92eb 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ConvertingParameterAccessor.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/ConvertingParameterAccessor.java @@ -94,15 +94,6 @@ public class ConvertingParameterAccessor implements MongoParameterAccessor { return delegate.getSort(); } - /* - * (non-Javadoc) - * @see org.springframework.data.repository.query.ParameterAccessor#getDynamicProjection() - */ - @Override - public Optional> getDynamicProjection() { - return delegate.getDynamicProjection(); - } - /* * (non-Javadoc) * @see org.springframework.data.repository.query.ParameterAccessor#findDynamicProjection() diff --git a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryExecution.java b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryExecution.java index 237b87897..41ade14ac 100644 --- a/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryExecution.java +++ b/spring-data-mongodb/src/main/java/org/springframework/data/mongodb/repository/query/MongoQueryExecution.java @@ -33,7 +33,7 @@ import org.springframework.data.mongodb.core.ExecutableFindOperation.Terminating import org.springframework.data.mongodb.core.MongoOperations; import org.springframework.data.mongodb.core.query.NearQuery; import org.springframework.data.mongodb.core.query.Query; -import org.springframework.data.repository.support.PageableExecutionUtils; +import org.springframework.data.support.PageableExecutionUtils; import org.springframework.data.util.TypeInformation; import org.springframework.util.Assert; import org.springframework.util.ClassUtils; diff --git a/spring-data-mongodb/src/main/resources/META-INF/spring.schemas b/spring-data-mongodb/src/main/resources/META-INF/spring.schemas index c7f3f0ab7..57920f744 100644 --- a/spring-data-mongodb/src/main/resources/META-INF/spring.schemas +++ b/spring-data-mongodb/src/main/resources/META-INF/spring.schemas @@ -12,7 +12,8 @@ http\://www.springframework.org/schema/data/mongo/spring-mongo-2.0.xsd=org/sprin http\://www.springframework.org/schema/data/mongo/spring-mongo-2.2.xsd=org/springframework/data/mongodb/config/spring-mongo-2.0.xsd http\://www.springframework.org/schema/data/mongo/spring-mongo-3.0.xsd=org/springframework/data/mongodb/config/spring-mongo-3.0.xsd http\://www.springframework.org/schema/data/mongo/spring-mongo-3.3.xsd=org/springframework/data/mongodb/config/spring-mongo-3.3.xsd -http\://www.springframework.org/schema/data/mongo/spring-mongo.xsd=org/springframework/data/mongodb/config/spring-mongo-3.3.xsd +http\://www.springframework.org/schema/data/mongo/spring-mongo-4.0.xsd=org/springframework/data/mongodb/config/spring-mongo-4.0.xsd +http\://www.springframework.org/schema/data/mongo/spring-mongo.xsd=org/springframework/data/mongodb/config/spring-mongo-4.0.xsd https\://www.springframework.org/schema/data/mongo/spring-mongo-1.0.xsd=org/springframework/data/mongodb/config/spring-mongo-1.0.xsd https\://www.springframework.org/schema/data/mongo/spring-mongo-1.1.xsd=org/springframework/data/mongodb/config/spring-mongo-1.1.xsd https\://www.springframework.org/schema/data/mongo/spring-mongo-1.2.xsd=org/springframework/data/mongodb/config/spring-mongo-1.2.xsd @@ -27,4 +28,5 @@ https\://www.springframework.org/schema/data/mongo/spring-mongo-2.0.xsd=org/spri https\://www.springframework.org/schema/data/mongo/spring-mongo-2.2.xsd=org/springframework/data/mongodb/config/spring-mongo-2.2.xsd https\://www.springframework.org/schema/data/mongo/spring-mongo-3.0.xsd=org/springframework/data/mongodb/config/spring-mongo-3.0.xsd https\://www.springframework.org/schema/data/mongo/spring-mongo-3.3.xsd=org/springframework/data/mongodb/config/spring-mongo-3.3.xsd -https\://www.springframework.org/schema/data/mongo/spring-mongo.xsd=org/springframework/data/mongodb/config/spring-mongo-3.3.xsd +https\://www.springframework.org/schema/data/mongo/spring-mongo-4.0.xsd=org/springframework/data/mongodb/config/spring-mongo-4.0.xsd +https\://www.springframework.org/schema/data/mongo/spring-mongo.xsd=org/springframework/data/mongodb/config/spring-mongo-4.0.xsd diff --git a/spring-data-mongodb/src/main/resources/org/springframework/data/mongodb/config/spring-mongo-4.0.xsd b/spring-data-mongodb/src/main/resources/org/springframework/data/mongodb/config/spring-mongo-4.0.xsd new file mode 100644 index 000000000..db6b6b946 --- /dev/null +++ b/spring-data-mongodb/src/main/resources/org/springframework/data/mongodb/config/spring-mongo-4.0.xsd @@ -0,0 +1,907 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The WriteConcern that will be the default value used when asking the MongoDatabaseFactory for a DB object + + + + + + + + + + + + + + The reference to a MongoTemplate. Will default to 'mongoTemplate'. + + + + + + + Enables creation of indexes for queries that get derived from the method name + and thus reference domain class properties. Defaults to false. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The reference to a MongoDatabaseFactory. + + + + + + + + + + + + The reference to a MongoTypeMapper to be used by this MappingMongoConverter. + + + + + + + The reference to a MappingContext. Will default to 'mappingContext'. + + + + + + + Disables JSR-303 validation on MongoDB documents before they are saved. By default it is set to false. + + + + + + + + + + Enables abbreviating the field names for domain class properties to the + first character of their camel case names, e.g. fooBar -> fb. Defaults to false. + + + + + + + + + + The reference to a FieldNamingStrategy. + + + + + + + Enable/Disable index creation for annotated properties/entities. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + A reference to a custom converter. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The reference to a MongoDatabaseFactory. + + + + + + + + + + + + The WriteConcern that will be the default value used when asking the MongoDatabaseFactory for a DB object + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The reference to a MongoDatabaseFactory. + + + + + + + + + + + + + + + + diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/DependencyTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/DependencyTests.java index 9294c8355..f58df47d3 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/DependencyTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/DependencyTests.java @@ -20,6 +20,7 @@ import static org.hamcrest.MatcherAssert.*; import de.schauderhaft.degraph.configuration.NamedPattern; +import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; /** @@ -28,6 +29,7 @@ import org.junit.jupiter.api.Test; * @author Jens Schauder * @author Oliver Gierke */ +@Disabled("Needs to be tansitioned to ArchUnit") class DependencyTests { @Test diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AuditingIntegrationTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AuditingIntegrationTests.java index 92b295a70..3cba74421 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AuditingIntegrationTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/config/AuditingIntegrationTests.java @@ -17,7 +17,8 @@ package org.springframework.data.mongodb.config; import static org.assertj.core.api.Assertions.*; -import org.joda.time.DateTime; +import java.util.Date; + import org.junit.jupiter.api.Test; import org.springframework.context.support.AbstractApplicationContext; @@ -66,11 +67,11 @@ public class AuditingIntegrationTests { class Entity { @Id Long id; - @CreatedDate DateTime created; - DateTime modified; + @CreatedDate Date created; + Date modified; @LastModifiedDate - public DateTime getModified() { + public Date getModified() { return modified; } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java index 33ae0ef99..a50c6e625 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/MongoTemplateTests.java @@ -33,6 +33,8 @@ import java.math.BigDecimal; import java.math.BigInteger; import java.time.Duration; import java.time.Instant; +import java.time.LocalDateTime; +import java.time.ZoneId; import java.time.temporal.ChronoUnit; import java.util.*; import java.util.concurrent.atomic.AtomicReference; @@ -40,7 +42,6 @@ import java.util.stream.Collectors; import java.util.stream.IntStream; import org.bson.types.ObjectId; -import org.joda.time.DateTime; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; @@ -62,6 +63,7 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Sort; import org.springframework.data.domain.Sort.Direction; import org.springframework.data.mapping.MappingException; +import org.springframework.data.mapping.context.PersistentEntities; import org.springframework.data.mongodb.InvalidMongoDbApiUsageException; import org.springframework.data.mongodb.MongoDatabaseFactory; import org.springframework.data.mongodb.core.convert.LazyLoadingProxy; @@ -148,7 +150,9 @@ public class MongoTemplateTests { }); cfg.configureAuditing(it -> { - it.auditingHandler(IsNewAwareAuditingHandler::new); + it.auditingHandler(ctx -> { + return new IsNewAwareAuditingHandler(PersistentEntities.of(ctx)); + }); }); }); @@ -1341,11 +1345,11 @@ public class MongoTemplateTests { @Test public void returnsEntityWhenQueryingForDateTime() { - DateTime dateTime = new DateTime(2011, 3, 3, 12, 0, 0, 0); + LocalDateTime dateTime = LocalDateTime.of(2011, 3, 3, 12, 0, 0, 0); TestClass testClass = new TestClass(dateTime); mappingTemplate.save(testClass); - List testClassList = mappingTemplate.find(new Query(Criteria.where("myDate").is(dateTime.toDate())), + List testClassList = mappingTemplate.find(new Query(Criteria.where("myDate").is(dateTime)), TestClass.class); assertThat(testClassList.size()).isEqualTo(1); assertThat(testClassList.get(0).myDate).isEqualTo(testClass.myDate); @@ -4007,10 +4011,10 @@ public class MongoTemplateTests { static class TestClass { - DateTime myDate; + LocalDateTime myDate; @PersistenceConstructor - TestClass(DateTime myDate) { + TestClass(LocalDateTime myDate) { this.myDate = myDate; } } @@ -4021,21 +4025,24 @@ public class MongoTemplateTests { String name; } - static enum DateTimeToDateConverter implements Converter { + static enum DateTimeToDateConverter implements Converter { INSTANCE; - public Date convert(DateTime source) { - return source == null ? null : source.toDate(); + public Date convert(LocalDateTime source) { + return source == null ? null : java.util.Date + .from(source.atZone(ZoneId.systemDefault()) + .toInstant()); } } - static enum DateToDateTimeConverter implements Converter { + static enum DateToDateTimeConverter implements Converter { INSTANCE; - public DateTime convert(Date source) { - return source == null ? null : new DateTime(source.getTime()); + public LocalDateTime convert(Date source) { + return source == null ? null : LocalDateTime.ofInstant( + source.toInstant(), ZoneId.systemDefault()); } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/Venue.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/Venue.java index 0ab13b393..8afe835e1 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/Venue.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/Venue.java @@ -16,8 +16,8 @@ package org.springframework.data.mongodb.core; import java.util.Arrays; +import java.util.Date; -import org.joda.time.LocalDate; import org.springframework.data.annotation.Id; import org.springframework.data.annotation.PersistenceConstructor; import org.springframework.data.mongodb.core.mapping.Document; @@ -28,7 +28,7 @@ public class Venue { @Id private String id; private String name; private double[] location; - private LocalDate openingDate; + private Date openingDate; @PersistenceConstructor Venue(String name, double[] location) { @@ -51,11 +51,11 @@ public class Venue { return location; } - public LocalDate getOpeningDate() { + public Date getOpeningDate() { return openingDate; } - public void setOpeningDate(LocalDate openingDate) { + public void setOpeningDate(Date openingDate) { this.openingDate = openingDate; } 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 991523108..d65cdf63f 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 @@ -26,6 +26,14 @@ import lombok.Builder; import java.io.BufferedInputStream; import java.text.ParseException; import java.text.SimpleDateFormat; +import java.time.Instant; +import java.time.LocalDate; +import java.time.LocalDateTime; +import java.time.LocalTime; +import java.time.ZoneId; +import java.time.ZonedDateTime; +import java.time.temporal.ChronoField; +import java.time.temporal.ChronoUnit; import java.util.ArrayList; import java.util.Arrays; import java.util.Collections; @@ -37,9 +45,6 @@ import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; import org.assertj.core.data.Offset; import org.bson.Document; -import org.joda.time.DateTime; -import org.joda.time.DateTimeZone; -import org.joda.time.LocalDateTime; import org.junit.jupiter.api.AfterEach; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; @@ -58,6 +63,7 @@ import org.springframework.data.mongodb.core.TestEntities; import org.springframework.data.mongodb.core.Venue; import org.springframework.data.mongodb.core.aggregation.AggregationTests.CarDescriptor.Entry; import org.springframework.data.mongodb.core.aggregation.BucketAutoOperation.Granularities; +import org.springframework.data.mongodb.core.aggregation.DateOperators.TemporalUnits; import org.springframework.data.mongodb.core.aggregation.VariableOperators.Let.ExpressionVariable; import org.springframework.data.mongodb.core.geo.GeoJsonPoint; import org.springframework.data.mongodb.core.index.GeoSpatialIndexType; @@ -1146,11 +1152,11 @@ public class AggregationTests { mongoTemplate.dropCollection(User.class); - LocalDateTime now = new LocalDateTime(); + Instant now = Instant.now(); - User user1 = new User("u1", new PushMessage("1", "aaa", now.toDate())); - User user2 = new User("u2", new PushMessage("2", "bbb", now.minusDays(2).toDate())); - User user3 = new User("u3", new PushMessage("3", "ccc", now.minusDays(1).toDate())); + User user1 = new User("u1", new PushMessage("1", "aaa", now)); + User user2 = new User("u2", new PushMessage("2", "bbb", now.minus(2, ChronoUnit.DAYS))); + User user3 = new User("u3", new PushMessage("3", "ccc", now.minus(1, ChronoUnit.DAYS))); mongoTemplate.save(user1); mongoTemplate.save(user2); @@ -1159,7 +1165,7 @@ public class AggregationTests { Aggregation agg = newAggregation( // project("id", "msgs"), // unwind("msgs"), // - match(where("msgs.createDate").gt(now.minusDays(1).toDate())), // + match(where("msgs.createDate").gt(Date.from(now.minus(1, ChronoUnit.DAYS)))), // group("id").push("msgs").as("msgs") // ); @@ -1375,14 +1381,9 @@ public class AggregationTests { mongoTemplate.dropCollection(ObjectWithDate.class); - DateTime dateTime = new DateTime() // - .withZone(DateTimeZone.UTC) // - .withYear(2014) // - .withMonthOfYear(2) // - .withDayOfMonth(7) // - .withTime(3, 4, 5, 6).toDateTimeISO(); + ZonedDateTime dateTime = ZonedDateTime.of(LocalDateTime.of(LocalDate.of(2014, 2, 7), LocalTime.of(3, 4, 5, 6)), ZoneId.of("UTC")); - ObjectWithDate owd = new ObjectWithDate(dateTime.toDate()); + ObjectWithDate owd = new ObjectWithDate(Date.from(dateTime.toInstant())); mongoTemplate.insert(owd); ProjectionOperation dateProjection = Aggregation.project() // @@ -1406,12 +1407,12 @@ public class AggregationTests { assertThat(result.getMappedResults()).hasSize(1); Document document = result.getMappedResults().get(0); - assertThat(document.get("hour")).isEqualTo((Object) dateTime.getHourOfDay()); - assertThat(document.get("min")).isEqualTo((Object) dateTime.getMinuteOfHour()); - assertThat(document.get("second")).isEqualTo((Object) dateTime.getSecondOfMinute()); - assertThat(document.get("millis")).isEqualTo((Object) dateTime.getMillisOfSecond()); + assertThat(document.get("hour")).isEqualTo((Object) dateTime.getHour()); + assertThat(document.get("min")).isEqualTo((Object) dateTime.getMinute()); + assertThat(document.get("second")).isEqualTo((Object) dateTime.getSecond()); + assertThat(document.get("millis")).isEqualTo((Object) dateTime.get(ChronoField.MILLI_OF_SECOND)); assertThat(document.get("year")).isEqualTo((Object) dateTime.getYear()); - assertThat(document.get("month")).isEqualTo((Object) dateTime.getMonthOfYear()); + assertThat(document.get("month")).isEqualTo((Object) dateTime.getMonthValue()); // dateTime.getWeekOfWeekyear()) returns 6 since for MongoDB the week starts on sunday and not on monday. assertThat(document.get("week")).isEqualTo((Object) 5); assertThat(document.get("dayOfYear")).isEqualTo((Object) dateTime.getDayOfYear()); @@ -2083,6 +2084,10 @@ public class AggregationTests { public PushMessage() {} + PushMessage(String id, String content, Instant createDate) { + this(id, content, Date.from(createDate)); + } + PushMessage(String id, String content, Date createDate) { this.id = id; this.content = content; diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java index 4cc02aad3..75837d15e 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/convert/MappingMongoConverterUnitTests.java @@ -31,11 +31,11 @@ import java.time.LocalDateTime; import java.time.temporal.ChronoUnit; import java.util.*; +import org.assertj.core.api.DateAssert; import org.bson.types.Binary; import org.bson.types.Code; import org.bson.types.Decimal128; import org.bson.types.ObjectId; -import org.joda.time.LocalDate; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; @@ -144,34 +144,6 @@ class MappingMongoConverterUnitTests { assertThat(document.get("s").toString()).isEqualTo("Broadway"); } - @Test - void convertsJodaTimeTypesCorrectly() { - - converter = new MappingMongoConverter(resolver, mappingContext); - converter.afterPropertiesSet(); - - Person person = new Person(); - person.birthDate = new LocalDate(); - - org.bson.Document document = new org.bson.Document(); - converter.write(person, document); - - assertThat(document.get("birthDate")).isInstanceOf(Date.class); - - Person result = converter.read(Person.class, document); - assertThat(result.birthDate).isNotNull(); - } - - @Test - void convertsCustomTypeOnConvertToMongoType() { - - converter = new MappingMongoConverter(resolver, mappingContext); - converter.afterPropertiesSet(); - - LocalDate date = new LocalDate(); - converter.convertToMongoType(date); - } - @Test // DATAMONGO-130 void writesMapTypeCorrectly() { @@ -197,7 +169,7 @@ class MappingMongoConverterUnitTests { void usesDocumentsStoredTypeIfSubtypeOfRequest() { org.bson.Document document = new org.bson.Document(); - document.put("birthDate", new LocalDate()); + document.put("birthDate", new Date()); document.put(DefaultMongoTypeMapper.DEFAULT_TYPE_KEY, Person.class.getName()); assertThat(converter.read(Contact.class, document)).isInstanceOf(Person.class); @@ -207,7 +179,7 @@ class MappingMongoConverterUnitTests { void ignoresDocumentsStoredTypeIfCompletelyDifferentTypeRequested() { org.bson.Document document = new org.bson.Document(); - document.put("birthDate", new LocalDate()); + document.put("birthDate", new Date()); document.put(DefaultMongoTypeMapper.DEFAULT_TYPE_KEY, Person.class.getName()); assertThat(converter.read(BirthDateContainer.class, document)).isInstanceOf(BirthDateContainer.class); @@ -2759,7 +2731,7 @@ class MappingMongoConverterUnitTests { @Id String id; - LocalDate birthDate; + Date birthDate; @Field("foo") String firstname; String lastname; @@ -2842,7 +2814,7 @@ class MappingMongoConverterUnitTests { } static class BirthDateContainer { - LocalDate birthDate; + Date birthDate; } static class BigDecimalContainer { diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/geo/AbstractGeoSpatialTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/geo/AbstractGeoSpatialTests.java index aa674804f..a5582e330 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/geo/AbstractGeoSpatialTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/geo/AbstractGeoSpatialTests.java @@ -20,10 +20,10 @@ import static org.springframework.data.mongodb.core.query.Criteria.*; import static org.springframework.data.mongodb.core.query.Query.*; import java.util.Collections; +import java.util.Date; import java.util.List; import java.util.Set; -import org.joda.time.LocalDate; import org.junit.After; import org.junit.Before; import org.junit.Test; @@ -191,7 +191,7 @@ public abstract class AbstractGeoSpatialTests { @Test // DATAMONGO-1360 public void mapsQueryContainedInNearQuery() { - Query query = query(where("openingDate").lt(LocalDate.now())); + Query query = query(where("openingDate").lt(new Date())); template.geoNear(NearQuery.near(1.5, 1.7).spherical(true).query(query), Venue.class); } } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/UpdateTests.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/UpdateTests.java index 927aa2832..4902c5c23 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/UpdateTests.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/core/query/UpdateTests.java @@ -22,7 +22,6 @@ import java.util.Date; import java.util.Map; import org.bson.Document; -import org.joda.time.DateTime; import org.junit.jupiter.api.Test; import org.springframework.data.mongodb.core.DocumentTestUtils; import org.springframework.data.mongodb.core.query.Update.Position; @@ -348,7 +347,7 @@ public class UpdateTests { @Test // DATAMONGO-1002 public void toStringWorksForUpdateWithComplexObject() { - Update update = new Update().addToSet("key", new DateTime()); + Update update = new Update().addToSet("key", new Date()); assertThat(update.toString()).isNotNull(); } diff --git a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/StubParameterAccessor.java b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/StubParameterAccessor.java index f43e3a107..4f4ac04c6 100644 --- a/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/StubParameterAccessor.java +++ b/spring-data-mongodb/src/test/java/org/springframework/data/mongodb/repository/query/StubParameterAccessor.java @@ -155,15 +155,6 @@ class StubParameterAccessor implements MongoParameterAccessor { return this.values; } - /* - * (non-Javadoc) - * @see org.springframework.data.repository.query.ParameterAccessor#getDynamicProjection() - */ - @Override - public Optional> getDynamicProjection() { - return Optional.empty(); - } - /* * (non-Javadoc) * @see org.springframework.data.repository.query.ParameterAccessor#findDynamicProjection()