From b0dc8be7f04f32158ef5ca9a4a8aebe0fa40f423 Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Tue, 27 Mar 2018 15:54:27 +0200 Subject: [PATCH] DATACMNS-1281 - Fixed potential concurrency issue in MappingAuditableBeanWrapperFactory. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit We now use a ConcurrentReferenceHashMap to cache the metadata calculated to prevent ConcurrentModificationExceptions getBeanWrapperFor(…). --- .../data/auditing/MappingAuditableBeanWrapperFactory.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/org/springframework/data/auditing/MappingAuditableBeanWrapperFactory.java b/src/main/java/org/springframework/data/auditing/MappingAuditableBeanWrapperFactory.java index ed200215b..3cde192ed 100644 --- a/src/main/java/org/springframework/data/auditing/MappingAuditableBeanWrapperFactory.java +++ b/src/main/java/org/springframework/data/auditing/MappingAuditableBeanWrapperFactory.java @@ -16,7 +16,6 @@ package org.springframework.data.auditing; import java.time.temporal.TemporalAccessor; -import java.util.HashMap; import java.util.Map; import java.util.Optional; @@ -32,6 +31,7 @@ import org.springframework.data.mapping.context.MappingContext; import org.springframework.data.mapping.context.PersistentEntities; import org.springframework.data.util.Optionals; import org.springframework.util.Assert; +import org.springframework.util.ConcurrentReferenceHashMap; /** * {@link AuditableBeanWrapperFactory} that will create am {@link AuditableBeanWrapper} using mapping information @@ -57,7 +57,7 @@ public class MappingAuditableBeanWrapperFactory extends DefaultAuditableBeanWrap Assert.notNull(entities, "PersistentEntities must not be null!"); this.entities = entities; - this.metadataCache = new HashMap<>(); + this.metadataCache = new ConcurrentReferenceHashMap<>(); } /*