DATACMNS-1758 - Revert optimizations from DATACMNS-1698.
We ensure that each EntityCallback retrieval operates on its own List to not share the retrieved callback list with other threads.
This commit is contained in:
@@ -19,7 +19,6 @@ import java.lang.reflect.Method;
|
||||
import java.lang.reflect.Modifier;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collection;
|
||||
import java.util.Collections;
|
||||
import java.util.LinkedHashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
@@ -188,7 +187,7 @@ class EntityCallbackDiscoverer {
|
||||
private Collection<EntityCallback<?>> retrieveEntityCallbacks(ResolvableType entityType, ResolvableType callbackType,
|
||||
@Nullable CallbackRetriever retriever) {
|
||||
|
||||
List<EntityCallback<?>> allCallbacks = null;
|
||||
List<EntityCallback<?>> allCallbacks = new ArrayList<>();
|
||||
Set<EntityCallback<?>> callbacks;
|
||||
Set<String> callbackBeans;
|
||||
|
||||
@@ -199,9 +198,8 @@ class EntityCallbackDiscoverer {
|
||||
|
||||
for (EntityCallback<?> callback : callbacks) {
|
||||
if (supportsEvent(callback, entityType, callbackType)) {
|
||||
|
||||
if (allCallbacks == null) {
|
||||
allCallbacks = new ArrayList<>();
|
||||
if (retriever != null) {
|
||||
retriever.getEntityCallbacks().add(callback);
|
||||
}
|
||||
allCallbacks.add(callback);
|
||||
}
|
||||
@@ -214,9 +212,7 @@ class EntityCallbackDiscoverer {
|
||||
Class<?> callbackImplType = beanFactory.getType(callbackBeanName);
|
||||
if (callbackImplType == null || supportsEvent(callbackImplType, entityType)) {
|
||||
EntityCallback<?> callback = beanFactory.getBean(callbackBeanName, EntityCallback.class);
|
||||
|
||||
if ((allCallbacks == null || !allCallbacks.contains(callback))
|
||||
&& supportsEvent(callback, entityType, callbackType)) {
|
||||
if (!allCallbacks.contains(callback) && supportsEvent(callback, entityType, callbackType)) {
|
||||
if (retriever != null) {
|
||||
if (beanFactory.isSingleton(callbackBeanName)) {
|
||||
retriever.entityCallbacks.add(callback);
|
||||
@@ -224,10 +220,6 @@ class EntityCallbackDiscoverer {
|
||||
retriever.entityCallbackBeans.add(callbackBeanName);
|
||||
}
|
||||
}
|
||||
|
||||
if (allCallbacks == null) {
|
||||
allCallbacks = new ArrayList<>();
|
||||
}
|
||||
allCallbacks.add(callback);
|
||||
}
|
||||
}
|
||||
@@ -238,10 +230,6 @@ class EntityCallbackDiscoverer {
|
||||
}
|
||||
}
|
||||
|
||||
if (allCallbacks == null) {
|
||||
return Collections.emptyList();
|
||||
}
|
||||
|
||||
AnnotationAwareOrderComparator.sort(allCallbacks);
|
||||
|
||||
if (retriever != null && retriever.entityCallbackBeans.isEmpty()) {
|
||||
@@ -369,8 +357,6 @@ class EntityCallbackDiscoverer {
|
||||
|
||||
private final Set<EntityCallback<?>> entityCallbacks = new LinkedHashSet<>();
|
||||
|
||||
private final List<EntityCallback<?>> cachedEntityCallbacks = new ArrayList<>();
|
||||
|
||||
private final Set<String> entityCallbackBeans = new LinkedHashSet<>();
|
||||
|
||||
private final boolean preFiltered;
|
||||
@@ -381,22 +367,6 @@ class EntityCallbackDiscoverer {
|
||||
|
||||
Collection<EntityCallback<?>> getEntityCallbacks() {
|
||||
|
||||
if (this.entityCallbackBeans.isEmpty()) {
|
||||
|
||||
if (cachedEntityCallbacks.size() != entityCallbacks.size()) {
|
||||
|
||||
List<EntityCallback<?>> entityCallbacks = new ArrayList<>(this.entityCallbacks);
|
||||
AnnotationAwareOrderComparator.sort(entityCallbacks);
|
||||
|
||||
synchronized (cachedEntityCallbacks) {
|
||||
cachedEntityCallbacks.clear();
|
||||
cachedEntityCallbacks.addAll(entityCallbacks);
|
||||
}
|
||||
}
|
||||
|
||||
return cachedEntityCallbacks;
|
||||
}
|
||||
|
||||
List<EntityCallback<?>> allCallbacks = new ArrayList<>(
|
||||
this.entityCallbacks.size() + this.entityCallbackBeans.size());
|
||||
allCallbacks.addAll(this.entityCallbacks);
|
||||
|
||||
Reference in New Issue
Block a user