Skip to content

Commit e19bdb8

Browse files
committed
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.
1 parent 8029983 commit e19bdb8

File tree

1 file changed

+4
-34
lines changed

1 file changed

+4
-34
lines changed

src/main/java/org/springframework/data/mapping/callback/EntityCallbackDiscoverer.java

+4-34
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,6 @@
1919
import java.lang.reflect.Modifier;
2020
import java.util.ArrayList;
2121
import java.util.Collection;
22-
import java.util.Collections;
2322
import java.util.LinkedHashSet;
2423
import java.util.List;
2524
import java.util.Map;
@@ -188,7 +187,7 @@ ResolvableType resolveDeclaredEntityType(Class<?> callbackType) {
188187
private Collection<EntityCallback<?>> retrieveEntityCallbacks(ResolvableType entityType, ResolvableType callbackType,
189188
@Nullable CallbackRetriever retriever) {
190189

191-
List<EntityCallback<?>> allCallbacks = null;
190+
List<EntityCallback<?>> allCallbacks = new ArrayList<>();
192191
Set<EntityCallback<?>> callbacks;
193192
Set<String> callbackBeans;
194193

@@ -199,9 +198,8 @@ private Collection<EntityCallback<?>> retrieveEntityCallbacks(ResolvableType ent
199198

200199
for (EntityCallback<?> callback : callbacks) {
201200
if (supportsEvent(callback, entityType, callbackType)) {
202-
203-
if (allCallbacks == null) {
204-
allCallbacks = new ArrayList<>();
201+
if (retriever != null) {
202+
retriever.getEntityCallbacks().add(callback);
205203
}
206204
allCallbacks.add(callback);
207205
}
@@ -214,20 +212,14 @@ private Collection<EntityCallback<?>> retrieveEntityCallbacks(ResolvableType ent
214212
Class<?> callbackImplType = beanFactory.getType(callbackBeanName);
215213
if (callbackImplType == null || supportsEvent(callbackImplType, entityType)) {
216214
EntityCallback<?> callback = beanFactory.getBean(callbackBeanName, EntityCallback.class);
217-
218-
if ((allCallbacks == null || !allCallbacks.contains(callback))
219-
&& supportsEvent(callback, entityType, callbackType)) {
215+
if (!allCallbacks.contains(callback) && supportsEvent(callback, entityType, callbackType)) {
220216
if (retriever != null) {
221217
if (beanFactory.isSingleton(callbackBeanName)) {
222218
retriever.entityCallbacks.add(callback);
223219
} else {
224220
retriever.entityCallbackBeans.add(callbackBeanName);
225221
}
226222
}
227-
228-
if (allCallbacks == null) {
229-
allCallbacks = new ArrayList<>();
230-
}
231223
allCallbacks.add(callback);
232224
}
233225
}
@@ -238,10 +230,6 @@ && supportsEvent(callback, entityType, callbackType)) {
238230
}
239231
}
240232

241-
if (allCallbacks == null) {
242-
return Collections.emptyList();
243-
}
244-
245233
AnnotationAwareOrderComparator.sort(allCallbacks);
246234

247235
if (retriever != null && retriever.entityCallbackBeans.isEmpty()) {
@@ -369,8 +357,6 @@ class CallbackRetriever {
369357

370358
private final Set<EntityCallback<?>> entityCallbacks = new LinkedHashSet<>();
371359

372-
private final List<EntityCallback<?>> cachedEntityCallbacks = new ArrayList<>();
373-
374360
private final Set<String> entityCallbackBeans = new LinkedHashSet<>();
375361

376362
private final boolean preFiltered;
@@ -381,22 +367,6 @@ class CallbackRetriever {
381367

382368
Collection<EntityCallback<?>> getEntityCallbacks() {
383369

384-
if (this.entityCallbackBeans.isEmpty()) {
385-
386-
if (cachedEntityCallbacks.size() != entityCallbacks.size()) {
387-
388-
List<EntityCallback<?>> entityCallbacks = new ArrayList<>(this.entityCallbacks);
389-
AnnotationAwareOrderComparator.sort(entityCallbacks);
390-
391-
synchronized (cachedEntityCallbacks) {
392-
cachedEntityCallbacks.clear();
393-
cachedEntityCallbacks.addAll(entityCallbacks);
394-
}
395-
}
396-
397-
return cachedEntityCallbacks;
398-
}
399-
400370
List<EntityCallback<?>> allCallbacks = new ArrayList<>(
401371
this.entityCallbacks.size() + this.entityCallbackBeans.size());
402372
allCallbacks.addAll(this.entityCallbacks);

0 commit comments

Comments
 (0)