From 8bbcca2ef2b922108da9462e797278e7bd27a15b Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Tue, 27 Mar 2018 15:58:04 +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 c31ead47c..a2e41db65 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.util.Calendar; -import java.util.HashMap; import java.util.Map; import org.springframework.data.annotation.CreatedBy; @@ -30,6 +29,7 @@ import org.springframework.data.mapping.PersistentPropertyAccessor; import org.springframework.data.mapping.context.MappingContext; import org.springframework.data.mapping.context.PersistentEntities; import org.springframework.util.Assert; +import org.springframework.util.ConcurrentReferenceHashMap; /** * {@link AuditableBeanWrapperFactory} that will create am {@link AuditableBeanWrapper} using mapping information @@ -54,7 +54,7 @@ public class MappingAuditableBeanWrapperFactory extends DefaultAuditableBeanWrap Assert.notNull(entities, "PersistentEntities must not be null!"); this.entities = entities; - this.metadataCache = new HashMap, MappingAuditingMetadata>(); + this.metadataCache = new ConcurrentReferenceHashMap, MappingAuditingMetadata>(); } /*