From 73103f35510a5388ed90a243a0a22a68e53f55f3 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 28f201eb5..08afabda5 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<>(); } /*