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.
This commit is contained in:
Oliver Gierke
2017-10-10 16:10:41 +02:00
parent aabd9d9860
commit 370b37fbfd

View File

@@ -368,12 +368,13 @@ public abstract class AbstractMappingContext<E extends MutablePersistentEntity<?
}
Class<?> 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, Optional.of(entity));
@@ -402,18 +403,18 @@ public abstract class AbstractMappingContext<E extends MutablePersistentEntity<?
throw e;
}
// Inform listeners
if (null != applicationEventPublisher) {
applicationEventPublisher.publishEvent(new MappingContextEvent<>(this, entity));
}
return Optional.of(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 Optional.of(entity);
}
/*