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:
@@ -306,12 +306,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, entity);
|
||||
@@ -340,18 +341,18 @@ public abstract class AbstractMappingContext<E extends MutablePersistentEntity<?
|
||||
throw e;
|
||||
}
|
||||
|
||||
// Inform listeners
|
||||
if (null != applicationEventPublisher) {
|
||||
applicationEventPublisher.publishEvent(new MappingContextEvent<E, P>(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<E, P>(this, entity));
|
||||
}
|
||||
|
||||
return entity;
|
||||
}
|
||||
|
||||
/*
|
||||
|
||||
Reference in New Issue
Block a user