From efdfee50fe9e2d5049e1588c85b34bc7df21272c Mon Sep 17 00:00:00 2001 From: Oliver Gierke Date: Tue, 10 Oct 2017 16:35:44 +0200 Subject: [PATCH] DATACMNS-901 - AbstractMappingContext publishes entity added events outside the write lock. Previously, the publication of the event that indicated a PersistentEntity having been added to it took place before the write lock over the entities had been released. We now keep the lock smaller and publish the addition event *after* the lock has been released. --- .../mapping/context/AbstractMappingContext.java | 17 +++++++++-------- 1 file changed, 9 insertions(+), 8 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 a825bd255..7782ebaac 100644 --- a/src/main/java/org/springframework/data/mapping/context/AbstractMappingContext.java +++ b/src/main/java/org/springframework/data/mapping/context/AbstractMappingContext.java @@ -301,12 +301,13 @@ public abstract class AbstractMappingContext type = typeInformation.getType(); + E entity = null; try { write.lock(); - final E entity = createPersistentEntity(typeInformation); + entity = createPersistentEntity(typeInformation); // Eagerly cache the entity as we might have to find it during recursive lookups. persistentEntities.put(typeInformation, entity); @@ -331,18 +332,18 @@ public abstract class AbstractMappingContext(this, entity)); - } - - return entity; - } catch (BeansException e) { throw new MappingException(e.getMessage(), e); } finally { write.unlock(); } + + // Inform listeners + if (applicationEventPublisher != null && entity != null) { + applicationEventPublisher.publishEvent(new MappingContextEvent(this, entity)); + } + + return entity; } /*