From 8f7a6d30e0ceae391d34c5df7cbbe09e600210d8 Mon Sep 17 00:00:00 2001 From: Mark Paluch Date: Tue, 20 Jul 2021 10:16:19 +0200 Subject: [PATCH] Polishing. Extract adding the actual entity to the MappingContext into its own method along with error handling spanning the entire entity initialization process. See #2329 Original pull request: #2367. --- .../context/AbstractMappingContext.java | 39 ++++++++++++------- 1 file changed, 24 insertions(+), 15 deletions(-) diff --git a/src/main/java/org/springframework/data/mapping/context/AbstractMappingContext.java b/src/main/java/org/springframework/data/mapping/context/AbstractMappingContext.java index 62a4bfc92..432a7e180 100644 --- a/src/main/java/org/springframework/data/mapping/context/AbstractMappingContext.java +++ b/src/main/java/org/springframework/data/mapping/context/AbstractMappingContext.java @@ -357,15 +357,34 @@ public abstract class AbstractMappingContext type = typeInformation.getType(); - E entity = null; + E entity; try { write.lock(); + entity = doAddPersistentEntity(typeInformation); - entity = createPersistentEntity(typeInformation); + } catch (BeansException e) { + throw new MappingException(e.getMessage(), e); + } finally { + write.unlock(); + } + + // Inform listeners + if (applicationEventPublisher != null) { + applicationEventPublisher.publishEvent(new MappingContextEvent<>(this, entity)); + } + + return Optional.of(entity); + } + + private E doAddPersistentEntity(TypeInformation typeInformation) { + try { + + Class type = typeInformation.getType(); + + E entity = createPersistentEntity(typeInformation); entity.setEvaluationContextProvider(evaluationContextProvider); // Eagerly cache the entity as we might have to find it during recursive lookups. @@ -373,7 +392,7 @@ public abstract class AbstractMappingContext descriptors = new HashMap<>(); + Map descriptors = new HashMap<>(); for (PropertyDescriptor descriptor : pds) { descriptors.put(descriptor.getName(), descriptor); } @@ -388,21 +407,11 @@ public abstract class AbstractMappingContext(this, entity)); - } - - return Optional.of(entity); } /*