From 29d2240d297a3278a7787d170bc42dcb0a162637 Mon Sep 17 00:00:00 2001 From: Stefan Forstenlechner Date: Thu, 9 Nov 2023 14:40:44 +0100 Subject: [PATCH 1/3] Spring Boot 3/Spring 6 Upgrade Includes required upgrade to java 17 Use jakarta.validation-api rather than hibernate-validator hibernate was not really used. Only its transitive dependency to the validation api was used as of 6.0, in favor of custom exception messages with selective inclusion of cause messages See ExceptionHandlerTest and SimpleDynamoDBCrudRepositoryTest --- pom.xml | 164 +++++++++--------- .../config/DynamoDBAuditingRegistrar.java | 9 +- .../config/EnableDynamoDBAuditing.java | 4 +- .../AbstractDynamoDBDateMarshaller.java | 2 +- .../ValidatingDynamoDBEventListener.java | 8 +- .../data/dynamodb/repository/Query.java | 2 +- .../cdi/DynamoDBRepositoryBean.java | 14 +- .../cdi/DynamoDBRepositoryExtension.java | 12 +- .../config/DynamoDBMapperConfigFactory.java | 2 +- .../config/DynamoDBMapperFactory.java | 2 +- .../config/EnableDynamoDBRepositories.java | 2 +- .../DynamoDBRepositoryFactoryBean.java | 10 +- .../support/SimpleDynamoDBCrudRepository.java | 9 +- .../Entity2DynamoDBTableSynchronizer.java | 2 +- .../config/AuditingIntegrationTests.java | 9 +- .../domain/sample/FeedPagingRepository.java | 5 +- .../sample/UserPaginationRepository.java | 3 +- .../ValidatingDynamoDBEventListenerTest.java | 6 +- .../cdi/DynamoDBRepositoryBeanTest.java | 12 +- .../query/AbstractDynamoDBQueryTest.java | 32 ++-- .../SimpleDynamoDBCrudRepositoryTest.java | 5 +- .../dynamodb/utils/ExceptionHandlerTest.java | 17 +- 22 files changed, 172 insertions(+), 159 deletions(-) diff --git a/pom.xml b/pom.xml index 216efa84..8f3e1a91 100644 --- a/pom.xml +++ b/pom.xml @@ -37,23 +37,22 @@ - 5.3.15 - 2.4.15 + 6.0.13 + 3.1.5 - 6.2.2.Final - 1.12.150 + 1.12.583 4.13.2 - 2.23.0 - 2.0 + 5.7.0 + 4.0.1 1.2.0 1.0.392 3.0.5 UTF-8 UTF-8 - 1.8 - 1.8 - 2.6.3 + 17 + 17 + 3.1.5 @@ -71,19 +70,12 @@ ${spring-data.version} - - org.hibernate.validator - hibernate-validator - ${hibernate-validator.version} - - junit junit ${junit.version} - org.mockito mockito-core @@ -102,11 +94,11 @@ DynamoDBLocal [1.11,2.0) - - org.apache.logging.log4j - log4j-to-slf4j - 2.17.1 - + + org.apache.logging.log4j + log4j-to-slf4j + 2.17.1 + uk.org.lidalia @@ -145,11 +137,11 @@ org.springframework spring-tx - - org.springframework.boot - spring-boot-starter-validation + + org.springframework.boot + spring-boot-starter-validation ${spring-boot-starter-validation.version} - + org.springframework.data @@ -157,8 +149,10 @@ - org.hibernate.validator - hibernate-validator + jakarta.validation + jakarta.validation-api + 3.0.2 + compile @@ -169,8 +163,8 @@ - javax.enterprise - cdi-api + jakarta.enterprise + jakarta.enterprise.cdi-api ${cdi.version} compile @@ -186,11 +180,11 @@ DynamoDBLocal test - - org.apache.logging.log4j - log4j-to-slf4j - test - + + org.apache.logging.log4j + log4j-to-slf4j + test + junit junit @@ -336,7 +330,7 @@ org.jacoco jacoco-maven-plugin - 0.8.5 + 0.8.11 @@ -396,26 +390,28 @@ src/checkstyle.xml - - com.github.spotbugs - spotbugs-maven-plugin - 4.0.4 - - Max - - Max - - src/spotbugs-exclude.xml - - - - verify - - check - - - - + + com.github.spotbugs + spotbugs-maven-plugin + 4.8.1.0 + + + true + Max + + Max + + src/spotbugs-exclude.xml + + + + verify + + check + + + + org.apache.maven.plugins maven-release-plugin @@ -648,31 +644,31 @@ true - - - com.github.github - site-maven-plugin - 0.12 - - - - site - - - site-deploy - - - github - - Building site - - ${site.path} - - true - - - - + + + com.github.github + site-maven-plugin + 0.12 + + + + site + + + site-deploy + + + github + + Building site + + ${site.path} + + true + + + + @@ -692,7 +688,7 @@ 0 - derjust + derjust Sebastian J zeeman@zeeman.de America/New_York @@ -739,7 +735,7 @@ Rene Enriquez enriquezrene - + Ryon Day https://github.com/ryonday @@ -763,8 +759,8 @@ - GitHub - https://github.com/boostchicken/spring-data-dynamodb/issues + GitHub + https://github.com/boostchicken/spring-data-dynamodb/issues diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/config/DynamoDBAuditingRegistrar.java b/src/main/java/org/socialsignin/spring/data/dynamodb/config/DynamoDBAuditingRegistrar.java index 1b0dff98..9478464f 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/config/DynamoDBAuditingRegistrar.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/config/DynamoDBAuditingRegistrar.java @@ -28,12 +28,14 @@ import org.springframework.data.auditing.config.AuditingBeanDefinitionRegistrarSupport; import org.springframework.data.auditing.config.AuditingConfiguration; import org.springframework.data.config.ParsingUtils; +import org.springframework.data.repository.config.PersistentEntitiesFactoryBean; import org.springframework.util.Assert; import java.lang.annotation.Annotation; import static org.socialsignin.spring.data.dynamodb.config.BeanNames.MAPPING_CONTEXT_BEAN_NAME; import static org.springframework.beans.factory.config.BeanDefinition.ROLE_INFRASTRUCTURE; +import static org.springframework.beans.factory.support.BeanDefinitionBuilder.rootBeanDefinition; /** * {@link org.springframework.context.annotation.ImportBeanDefinitionRegistrar} @@ -97,8 +99,11 @@ protected BeanDefinitionBuilder getAuditHandlerBeanDefinitionBuilder(AuditingCon LOGGER.trace("getAuditHandlerBeanDefinitionBuilder"); Assert.notNull(configuration, "AuditingConfiguration must not be null!"); + BeanDefinitionBuilder persistentEntities = rootBeanDefinition(PersistentEntitiesFactoryBean.class); + persistentEntities.addConstructorArgReference(MAPPING_CONTEXT_BEAN_NAME); + BeanDefinitionBuilder builder = BeanDefinitionBuilder.rootBeanDefinition(IsNewAwareAuditingHandler.class); - builder.addConstructorArgReference(MAPPING_CONTEXT_BEAN_NAME); + builder.addConstructorArgValue(persistentEntities.getBeanDefinition()); return configureDefaultAuditHandlerAttributes(configuration, builder); } @@ -151,4 +156,4 @@ private void defaultDependenciesIfNecessary(BeanDefinitionRegistry registry, Obj registry.registerBeanDefinition(MAPPING_CONTEXT_BEAN_NAME, definition); } } -} \ No newline at end of file +} diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/config/EnableDynamoDBAuditing.java b/src/main/java/org/socialsignin/spring/data/dynamodb/config/EnableDynamoDBAuditing.java index 38e08d42..48c38e5a 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/config/EnableDynamoDBAuditing.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/config/EnableDynamoDBAuditing.java @@ -57,8 +57,8 @@ /** * @return Configures a * {@link org.springframework.data.auditing.DateTimeProvider} bean name - * that allows customizing the {@link org.joda.time.DateTime} to be used + * that allows customizing the {@link java.time.LocalDateTime} to be used * for setting creation and modification dates. */ String dateTimeProviderRef() default ""; -} \ No newline at end of file +} diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/AbstractDynamoDBDateMarshaller.java b/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/AbstractDynamoDBDateMarshaller.java index 2ce6e89e..fc12d410 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/AbstractDynamoDBDateMarshaller.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/AbstractDynamoDBDateMarshaller.java @@ -64,4 +64,4 @@ public Date unmarshall(Class clazz, String obj) throws IllegalArgumentExce } } -} +} \ No newline at end of file diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/event/ValidatingDynamoDBEventListener.java b/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/event/ValidatingDynamoDBEventListener.java index b253640f..d68b7443 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/event/ValidatingDynamoDBEventListener.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/mapping/event/ValidatingDynamoDBEventListener.java @@ -34,16 +34,16 @@ import org.slf4j.LoggerFactory; import org.springframework.util.Assert; -import javax.validation.ConstraintViolation; -import javax.validation.ConstraintViolationException; -import javax.validation.Validator; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.ConstraintViolationException; +import jakarta.validation.Validator; import java.util.ArrayList; import java.util.HashSet; import java.util.List; import java.util.Set; /** - * javax.validation dependant entities validator. When it is registered as + * jakarta.validation dependant entities validator. When it is registered as * Spring component its automatically invoked before entities are saved in * database. * diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/Query.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/Query.java index 65dddc27..358854d1 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/Query.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/Query.java @@ -111,4 +111,4 @@ * @return expression value mappings for query */ ExpressionAttribute[] expressionMappingValues() default @ExpressionAttribute; -} +} \ No newline at end of file diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/cdi/DynamoDBRepositoryBean.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/cdi/DynamoDBRepositoryBean.java index 9054d11e..409a6a86 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/cdi/DynamoDBRepositoryBean.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/cdi/DynamoDBRepositoryBean.java @@ -24,11 +24,10 @@ import org.springframework.data.repository.cdi.CdiRepositoryBean; import org.springframework.util.Assert; -import javax.enterprise.context.spi.CreationalContext; -import javax.enterprise.inject.spi.Bean; -import javax.enterprise.inject.spi.BeanManager; +import jakarta.enterprise.context.spi.CreationalContext; +import jakarta.enterprise.inject.spi.Bean; +import jakarta.enterprise.inject.spi.BeanManager; import java.lang.annotation.Annotation; -import java.util.Optional; import java.util.Set; /** @@ -85,13 +84,11 @@ class DynamoDBRepositoryBean extends CdiRepositoryBean { /* * (non-Javadoc) * - * @see javax.enterprise.context.spi.Contextual#create(javax.enterprise + * @see jakarta.enterprise.context.spi.Contextual#create(jakarta.enterprise * .context.spi.CreationalContext, Class, Optional) */ @Override - protected T create(CreationalContext creationalContext, Class repositoryType, - Optional customImplementation) { - + protected T create(CreationalContext creationalContext, Class repositoryType) { // Get an instance from the associated AmazonDynamoDB bean. AmazonDynamoDB amazonDynamoDB = getDependencyInstance(amazonDynamoDBBean, AmazonDynamoDB.class); @@ -121,5 +118,4 @@ protected T create(CreationalContext creationalContext, Class repositoryTy DynamoDBRepositoryFactory factory = new DynamoDBRepositoryFactory(dynamoDBOperations); return factory.getRepository(repositoryType); } - } diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/cdi/DynamoDBRepositoryExtension.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/cdi/DynamoDBRepositoryExtension.java index 55f6775a..003af3c4 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/cdi/DynamoDBRepositoryExtension.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/cdi/DynamoDBRepositoryExtension.java @@ -24,12 +24,12 @@ import org.socialsignin.spring.data.dynamodb.core.DynamoDBOperations; import org.springframework.data.repository.cdi.CdiRepositoryExtensionSupport; -import javax.enterprise.event.Observes; -import javax.enterprise.inject.UnsatisfiedResolutionException; -import javax.enterprise.inject.spi.AfterBeanDiscovery; -import javax.enterprise.inject.spi.Bean; -import javax.enterprise.inject.spi.BeanManager; -import javax.enterprise.inject.spi.ProcessBean; +import jakarta.enterprise.event.Observes; +import jakarta.enterprise.inject.UnsatisfiedResolutionException; +import jakarta.enterprise.inject.spi.AfterBeanDiscovery; +import jakarta.enterprise.inject.spi.Bean; +import jakarta.enterprise.inject.spi.BeanManager; +import jakarta.enterprise.inject.spi.ProcessBean; import java.lang.annotation.Annotation; import java.lang.reflect.Type; import java.util.HashMap; diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/DynamoDBMapperConfigFactory.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/DynamoDBMapperConfigFactory.java index 424baa7f..97d12bea 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/DynamoDBMapperConfigFactory.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/DynamoDBMapperConfigFactory.java @@ -80,4 +80,4 @@ private DynamoDBMapperConfig createDynamoDBMapperConfig(DynamoDBMapperConfig dyn // Deprecated but the only way how DynamoDBMapperConfig#merge is exposed return new DynamoDBMapperConfig(dynamoDBMapperConfig, emptyBuilder.build()); } -} +} \ No newline at end of file diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/DynamoDBMapperFactory.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/DynamoDBMapperFactory.java index c4665c18..b1f18561 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/DynamoDBMapperFactory.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/DynamoDBMapperFactory.java @@ -45,4 +45,4 @@ public void setBeanFactory(BeanFactory beanFactory) throws BeansException { this.beanFactory = beanFactory; } -} +} \ No newline at end of file diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/EnableDynamoDBRepositories.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/EnableDynamoDBRepositories.java index 92967d66..ccf2d2eb 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/EnableDynamoDBRepositories.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/config/EnableDynamoDBRepositories.java @@ -159,7 +159,7 @@ String dynamoDBMapperRef() default ""; /** - * Returns the {@link javax.validation.Validator } reference to be used for to + * Returns the {@link jakarta.validation.Validator } reference to be used for to * validate DynamoDB entities * * @return The diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBRepositoryFactoryBean.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBRepositoryFactoryBean.java index b89d29b3..c21ec6d3 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBRepositoryFactoryBean.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/DynamoDBRepositoryFactoryBean.java @@ -19,7 +19,7 @@ import org.socialsignin.spring.data.dynamodb.mapping.DynamoDBMappingContext; import org.socialsignin.spring.data.dynamodb.repository.util.DynamoDBMappingContextProcessor; import org.socialsignin.spring.data.dynamodb.repository.util.Entity2DynamoDBTableSynchronizer; -import org.springframework.beans.factory.annotation.Required; +import org.springframework.beans.factory.annotation.Autowired; import org.springframework.data.repository.Repository; import org.springframework.data.repository.core.support.RepositoryFactoryBeanSupport; import org.springframework.data.repository.core.support.RepositoryFactorySupport; @@ -59,23 +59,23 @@ protected RepositoryFactorySupport createRepositoryFactory() { return dynamoDBRepositoryFactory; } - @Required + @Autowired public void setDynamoDBMappingContextProcessor( DynamoDBMappingContextProcessor dynamoDBMappingContextProcessor) { this.dynamoDBMappingContextProcessor = dynamoDBMappingContextProcessor; } - @Required + @Autowired public void setEntity2DynamoDBTableSynchronizer(Entity2DynamoDBTableSynchronizer tableSynchronizer) { this.tableSynchronizer = tableSynchronizer; } - @Required + @Autowired public void setDynamoDBOperations(DynamoDBOperations dynamoDBOperations) { this.dynamoDBOperations = dynamoDBOperations; } - @Required + @Autowired public void setDynamoDBMappingContext(DynamoDBMappingContext dynamoDBMappingContext) { setMappingContext(dynamoDBMappingContext); } diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBCrudRepository.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBCrudRepository.java index fdf35bd7..7b164515 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBCrudRepository.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBCrudRepository.java @@ -32,7 +32,6 @@ import java.util.Map; import java.util.Optional; import java.util.concurrent.atomic.AtomicInteger; -import java.util.stream.Collectors; import java.util.stream.StreamSupport; /** @@ -102,7 +101,7 @@ public List findAllById(Iterable ids) { } else { return new KeyPair().withHashKey(id); } - }).collect(Collectors.toList()); + }).toList(); Map, List> keyPairsMap = Collections., List>singletonMap(domainType, keyPairs); @@ -189,6 +188,12 @@ public void delete(T entity) { dynamoDBOperations.delete(entity); } + @Override + public void deleteAllById(Iterable ids) { + var bla = StreamSupport.stream(ids.spliterator(), false).map(id -> (ID)id).toList(); + deleteAll(findAllById(bla)); + } + @Override public void deleteAll(Iterable entities) { diff --git a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/util/Entity2DynamoDBTableSynchronizer.java b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/util/Entity2DynamoDBTableSynchronizer.java index 73bfafe9..e3eb533c 100644 --- a/src/main/java/org/socialsignin/spring/data/dynamodb/repository/util/Entity2DynamoDBTableSynchronizer.java +++ b/src/main/java/org/socialsignin/spring/data/dynamodb/repository/util/Entity2DynamoDBTableSynchronizer.java @@ -235,4 +235,4 @@ private DescribeTableResult performValidate(DynamoDBEntityInformation ent return result; } -} +} \ No newline at end of file diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/config/AuditingIntegrationTests.java b/src/test/java/org/socialsignin/spring/data/dynamodb/config/AuditingIntegrationTests.java index 7a1f4f4f..cddea7c7 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/config/AuditingIntegrationTests.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/config/AuditingIntegrationTests.java @@ -15,8 +15,9 @@ */ package org.socialsignin.spring.data.dynamodb.config; +import java.time.LocalDateTime; + import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBTable; -import org.joda.time.DateTime; import org.junit.Test; import org.socialsignin.spring.data.dynamodb.mapping.DynamoDBMappingContext; import org.socialsignin.spring.data.dynamodb.mapping.event.BeforeSaveEvent; @@ -69,11 +70,11 @@ class Entity { @Id Long id; @CreatedDate - DateTime created; - DateTime modified; + LocalDateTime created; + LocalDateTime modified; @LastModifiedDate - public DateTime getModified() { + public LocalDateTime getModified() { return modified; } } diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/FeedPagingRepository.java b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/FeedPagingRepository.java index 015e0cb4..a781ee2c 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/FeedPagingRepository.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/FeedPagingRepository.java @@ -20,9 +20,10 @@ import org.socialsignin.spring.data.dynamodb.repository.EnableScanCount; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import org.springframework.data.repository.CrudRepository; @EnableScan @EnableScanCount -public interface FeedPagingRepository extends DynamoDBPagingAndSortingRepository { +public interface FeedPagingRepository extends DynamoDBPagingAndSortingRepository, CrudRepository { Page findAllByMessageOrderByRegDateDesc(String message, Pageable pageable); -} \ No newline at end of file +} diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/UserPaginationRepository.java b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/UserPaginationRepository.java index 786334a1..33f9df29 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/UserPaginationRepository.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/domain/sample/UserPaginationRepository.java @@ -21,9 +21,10 @@ import org.socialsignin.spring.data.dynamodb.repository.EnableScanCount; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; +import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.PagingAndSortingRepository; -public interface UserPaginationRepository extends PagingAndSortingRepository { +public interface UserPaginationRepository extends PagingAndSortingRepository, CrudRepository { @EnableScan @EnableScanCount diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/mapping/event/ValidatingDynamoDBEventListenerTest.java b/src/test/java/org/socialsignin/spring/data/dynamodb/mapping/event/ValidatingDynamoDBEventListenerTest.java index 13da1052..4a488674 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/mapping/event/ValidatingDynamoDBEventListenerTest.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/mapping/event/ValidatingDynamoDBEventListenerTest.java @@ -24,9 +24,9 @@ import org.mockito.junit.MockitoJUnitRunner; import org.socialsignin.spring.data.dynamodb.domain.sample.User; -import javax.validation.ConstraintViolation; -import javax.validation.ConstraintViolationException; -import javax.validation.Validator; +import jakarta.validation.ConstraintViolation; +import jakarta.validation.ConstraintViolationException; +import jakarta.validation.Validator; import java.util.HashSet; import java.util.Set; diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/cdi/DynamoDBRepositoryBeanTest.java b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/cdi/DynamoDBRepositoryBeanTest.java index c8d2e2fd..75085e3a 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/cdi/DynamoDBRepositoryBeanTest.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/cdi/DynamoDBRepositoryBeanTest.java @@ -29,12 +29,11 @@ import org.socialsignin.spring.data.dynamodb.domain.sample.User; import org.springframework.data.repository.Repository; -import javax.enterprise.context.spi.CreationalContext; -import javax.enterprise.inject.spi.Bean; -import javax.enterprise.inject.spi.BeanManager; +import jakarta.enterprise.context.spi.CreationalContext; +import jakarta.enterprise.inject.spi.Bean; +import jakarta.enterprise.inject.spi.BeanManager; import java.lang.annotation.Annotation; import java.util.Collections; -import java.util.Optional; import java.util.Set; import static org.junit.Assert.assertNotNull; @@ -59,7 +58,7 @@ interface SampleRepository extends Repository { @Mock private AmazonDynamoDB amazonDynamoDB; @Mock - private javax.enterprise.inject.spi.Bean dynamoDBMapperConfigBean; + private jakarta.enterprise.inject.spi.Bean dynamoDBMapperConfigBean; @Mock private Bean dynamoDBOperationsBean; @@ -121,8 +120,7 @@ public void testCreateRepostiory() { DynamoDBRepositoryBean underTest = new DynamoDBRepositoryBean<>(beanManager, amazonDynamoDBBean, dynamoDBMapperConfigBean, null, dynamoDBMapperBean, qualifiers, repositoryType); - SampleRepository actual = underTest.create(repoCreationalContext, SampleRepository.class, - Optional.empty()); + SampleRepository actual = underTest.create(repoCreationalContext, SampleRepository.class); assertNotNull(actual); } } diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryTest.java b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryTest.java index 7d6eb4e7..f3594a30 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryTest.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/query/AbstractDynamoDBQueryTest.java @@ -15,21 +15,6 @@ */ package org.socialsignin.spring.data.dynamodb.repository.query; -import static org.hamcrest.CoreMatchers.instanceOf; -import static org.hamcrest.CoreMatchers.is; -import static org.hamcrest.MatcherAssert.assertThat; -import static org.junit.Assert.assertEquals; -import static org.mockito.ArgumentMatchers.*; -import static org.mockito.Mockito.doReturn; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; - -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; - import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -47,6 +32,22 @@ import org.springframework.data.repository.core.RepositoryMetadata; import org.springframework.data.util.TypeInformation; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.List; + +import static org.hamcrest.CoreMatchers.instanceOf; +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.junit.Assert.assertEquals; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.anyInt; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.never; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + @RunWith(MockitoJUnitRunner.class) public class AbstractDynamoDBQueryTest { @@ -120,6 +121,7 @@ public void setUp() { doReturn(Page.class).when(typeInformation).getType(); doReturn(typeInformation).when(metadata) .getReturnType(ArgumentMatchers.argThat(argument -> "findByName".equals(argument.getName()))); + doReturn(TypeInformation.of(Page.class)).when(metadata).getDomainTypeInformation(); doReturn(UserRepository.class).when(metadata).getRepositoryInterface(); doReturn(User.class).when(metadata).getReturnedDomainClass(any()); } diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBCrudRepositoryTest.java b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBCrudRepositoryTest.java index 6096a6ec..d5daeb34 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBCrudRepositoryTest.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/repository/support/SimpleDynamoDBCrudRepositoryTest.java @@ -41,9 +41,11 @@ import java.util.Optional; import java.util.concurrent.ThreadLocalRandom; +import static org.hamcrest.core.IsEqual.equalTo; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertSame; +import static org.junit.internal.matchers.ThrowableMessageMatcher.hasMessage; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyIterable; import static org.mockito.ArgumentMatchers.eq; @@ -266,8 +268,9 @@ public void testBatchSaveFailure() { expectedException.expect(BatchWriteException.class); expectedException.expectMessage( - "Processing of entities failed!; nested exception is java.lang.Exception: First exception"); + "Processing of entities failed!"); + expectedException.expectCause(hasMessage(equalTo("First exception"))); repoForEntityWithOnlyHashKey.saveAll(entities); } } diff --git a/src/test/java/org/socialsignin/spring/data/dynamodb/utils/ExceptionHandlerTest.java b/src/test/java/org/socialsignin/spring/data/dynamodb/utils/ExceptionHandlerTest.java index 23d5e2f4..55ca4142 100644 --- a/src/test/java/org/socialsignin/spring/data/dynamodb/utils/ExceptionHandlerTest.java +++ b/src/test/java/org/socialsignin/spring/data/dynamodb/utils/ExceptionHandlerTest.java @@ -15,15 +15,17 @@ */ package org.socialsignin.spring.data.dynamodb.utils; -import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper; -import org.junit.Test; -import org.socialsignin.spring.data.dynamodb.exception.BatchWriteException; - import java.util.ArrayList; import java.util.Collections; import java.util.List; +import com.amazonaws.services.dynamodbv2.datamodeling.DynamoDBMapper; +import org.junit.Test; +import org.socialsignin.spring.data.dynamodb.exception.BatchWriteException; + import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; import static org.junit.Assert.assertTrue; public class ExceptionHandlerTest { @@ -50,8 +52,11 @@ public void testSimple() { BatchWriteException actual = underTest.repackageToException(failedBatches, BatchWriteException.class); - assertEquals("Processing of entities failed!; nested exception is java.lang.Exception: Test Exception", - actual.getMessage()); + assertEquals("Processing of entities failed!", actual.getMessage()); + + assertNotNull(actual.getCause()); + assertEquals("Test Exception", actual.getCause().getMessage()); + assertNull(actual.getCause().getCause()); assertEquals(1, actual.getSuppressed().length); assertEquals("Followup Exception", actual.getSuppressed()[0].getMessage()); From 334324c8e62238e62433213af2ffe777ee82f543 Mon Sep 17 00:00:00 2001 From: Stefan Forstenlechner Date: Fri, 10 Nov 2023 09:13:55 +0100 Subject: [PATCH 2/3] Increase major version due to breaking changes and to match spring version --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 8f3e1a91..6b67975e 100644 --- a/pom.xml +++ b/pom.xml @@ -20,7 +20,7 @@ 4.0.0 io.github.boostchicken spring-data-dynamodb - 5.2.6-SNAPSHOT + 6.0.0-SNAPSHOT Spring Data DynamoDB 2018 From dace6b157e432e275a6acbd988018cc9656d1fb4 Mon Sep 17 00:00:00 2001 From: Stefan Forstenlechner Date: Tue, 14 Nov 2023 11:48:37 +0100 Subject: [PATCH 3/3] Add new entry in README version table --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index d2c13cef..bd92c6c0 100644 --- a/README.md +++ b/README.md @@ -167,7 +167,7 @@ API changes will follow SEMVER and loosly the Spring Framework releases. | 5.0.x | >= 2.0 && < 2.1 | >= 5.0 && < 5.1 | Kay-SR1 | | 5.1.x | == 2.1 | >= 5.1 | Lovelace-SR1 | | 5.2.x | >= 2.2 | >= 5.2 | Moore-RELEASE, Nuemann-RELASE | - +| 6.0.x | >= 3.0 | >= 6.0 | 2023.0.5 | `spring-data-dynamodb` depends directly on `spring-data` as also `spring-context`, `spring-data` and `spring-tx`.