From 8c5bf9802f6bf45f983bd8a1713aea5b88b84e24 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Wed, 16 Dec 2015 16:02:14 +0100 Subject: [PATCH] DATAREST-723 - PropertyMappings now get eagerly initialized. Switched to eager initialization of PropertyMappings to avoid potential ConcurrentModificationException. --- .../rest/core/mapping/MappingResourceMetadata.java | 11 +++-------- .../mapping/PersistentEntitiesResourceMappings.java | 2 -- .../mapping/MappingResourceMetadataUnitTests.java | 8 ++++---- 3 files changed, 7 insertions(+), 14 deletions(-) diff --git a/spring-data-rest-core/src/main/java/org/springframework/data/rest/core/mapping/MappingResourceMetadata.java b/spring-data-rest-core/src/main/java/org/springframework/data/rest/core/mapping/MappingResourceMetadata.java index 6dfa2f7d6..f5e676b14 100644 --- a/spring-data-rest-core/src/main/java/org/springframework/data/rest/core/mapping/MappingResourceMetadata.java +++ b/spring-data-rest-core/src/main/java/org/springframework/data/rest/core/mapping/MappingResourceMetadata.java @@ -49,19 +49,14 @@ class MappingResourceMetadata extends TypeBasedCollectionResourceMapping impleme super(entity.getType()); - this.entity = entity; this.propertyMappings = new PropertyMappings(resourceMappings); - RestResource annotation = entity.findAnnotation(RestResource.class); - this.explicitlyExported = annotation != null && annotation.exported(); - } - - public MappingResourceMetadata init() { - + this.entity = entity; this.entity.doWithAssociations(propertyMappings); this.entity.doWithProperties(propertyMappings); - return this; + RestResource annotation = entity.findAnnotation(RestResource.class); + this.explicitlyExported = annotation != null && annotation.exported(); } /* diff --git a/spring-data-rest-core/src/main/java/org/springframework/data/rest/core/mapping/PersistentEntitiesResourceMappings.java b/spring-data-rest-core/src/main/java/org/springframework/data/rest/core/mapping/PersistentEntitiesResourceMappings.java index a5a371018..99673ba04 100644 --- a/spring-data-rest-core/src/main/java/org/springframework/data/rest/core/mapping/PersistentEntitiesResourceMappings.java +++ b/spring-data-rest-core/src/main/java/org/springframework/data/rest/core/mapping/PersistentEntitiesResourceMappings.java @@ -99,8 +99,6 @@ public class PersistentEntitiesResourceMappings implements ResourceMappings { mappingMetadata = new MappingResourceMetadata(entity, this); mappingCache.put(type, mappingMetadata); - mappingMetadata.init(); - return mappingMetadata; } diff --git a/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/mapping/MappingResourceMetadataUnitTests.java b/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/mapping/MappingResourceMetadataUnitTests.java index 812fde399..46658e5ba 100644 --- a/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/mapping/MappingResourceMetadataUnitTests.java +++ b/spring-data-rest-core/src/test/java/org/springframework/data/rest/core/mapping/MappingResourceMetadataUnitTests.java @@ -41,9 +41,9 @@ public class MappingResourceMetadataUnitTests { MongoMappingContext context = new MongoMappingContext(); MongoPersistentEntity entity = context.getPersistentEntity(Entity.class); - ResourceMappings resourceMappings = new PersistentEntitiesResourceMappings(new PersistentEntities( - Arrays.asList(context))); - MappingResourceMetadata metadata = new MappingResourceMetadata(entity, resourceMappings).init(); + ResourceMappings resourceMappings = new PersistentEntitiesResourceMappings( + new PersistentEntities(Arrays.asList(context))); + MappingResourceMetadata metadata = new MappingResourceMetadata(entity, resourceMappings); /** * @see DATAREST-514 @@ -76,7 +76,7 @@ public class MappingResourceMetadataUnitTests { public void isExportedIfExplicitlyAnnotated() { MappingResourceMetadata metadata = new MappingResourceMetadata(context.getPersistentEntity(Related.class), - resourceMappings).init(); + resourceMappings); assertThat(metadata.isExported(), is(true)); }