Skip to content

ConcurrencyModificationException in EntityCallbackDiscoverer caused by concurrent cachedEntityCallbacks modification [DATACMNS-1735] #2156

Closed
@spring-projects-issues

Description

@spring-projects-issues

MyeongHyeonLee opened DATACMNS-1735 and commented

Occasionally ConcurrentModificationException occurs.

 

Caused by: java.util.ConcurrentModificationException: nullCaused by: java.util.ConcurrentModificationException: null at java.base/java.util.ArrayList.sort(ArrayList.java:1751) at org.springframework.core.annotation.AnnotationAwareOrderComparator.sort(AnnotationAwareOrderComparator.java:111) at org.springframework.data.mapping.callback.EntityCallbackDiscoverer$CallbackRetriever.getEntityCallbacks(EntityCallbackDiscoverer.java:388) at org.springframework.data.mapping.callback.EntityCallbackDiscoverer.getEntityCallbacks(EntityCallbackDiscoverer.java:142) at org.springframework.data.mapping.callback.DefaultEntityCallbacks.callback(DefaultEntityCallbacks.java:83) at org.springframework.data.jdbc.core.JdbcAggregateTemplate.triggerBeforeSave(JdbcAggregateTemplate.java:414) at org.springframework.data.jdbc.core.JdbcAggregateTemplate.store(JdbcAggregateTemplate.java:335) at org.springframework.data.jdbc.core.JdbcAggregateTemplate.update(JdbcAggregateTemplate.java:183)

 

In a concurrency situation, I think it's a clear() and sort() conflict below.

if (cachedEntityCallbacks.size() != entityCallbacks.size()) {
   cachedEntityCallbacks.clear();
   cachedEntityCallbacks.addAll(entityCallbacks);
   AnnotationAwareOrderComparator.sort(cachedEntityCallbacks);
}

It seems necessary to defend against concurrency situations.

 


Affects: 2.3 GA (Neumann)

Referenced from: pull request #446

Backported to: 2.3.1 (Neumann SR1)

Metadata

Metadata

Assignees

Labels

in: mappingMapping and conversion infrastructuretype: bugA general bug

Type

No type

Projects

No projects

Relationships

None yet

Development

No branches or pull requests

Issue actions