ConcurrentModificationException in ClassBindingFactory
Caused by: org.simantics.databoard.binding.error.RuntimeBindingConstructionException: org.simantics.databoard.binding.error.BindingConstructionException: java.util.ConcurrentModificationException
at org.simantics.databoard.Bindings.getBindingUnchecked(Bindings.java:374)
at org.simantics.db.layer0.util.DraftStatusBean.<clinit>(DraftStatusBean.java:12)
... 75 more
Caused by: org.simantics.databoard.binding.error.BindingConstructionException: java.util.ConcurrentModificationException
at org.simantics.databoard.binding.reflection.ClassBindingFactory.construct(ClassBindingFactory.java:629)
at org.simantics.databoard.binding.reflection.ClassBindingFactory.doConstruct(ClassBindingFactory.java:220)
at org.simantics.databoard.binding.reflection.ClassBindingFactory.construct(ClassBindingFactory.java:608)
at org.simantics.databoard.binding.reflection.ClassBindingFactory.doConstruct(ClassBindingFactory.java:589)
at org.simantics.databoard.binding.reflection.ClassBindingFactory.construct(ClassBindingFactory.java:608)
at org.simantics.databoard.binding.reflection.ClassBindingFactory.getBinding(ClassBindingFactory.java:712)
at org.simantics.databoard.binding.impl.BeanBinding.create(BeanBinding.java:60)
at org.simantics.databoard.serialization.impl.MutableVariantSerializer.deserialize(MutableVariantSerializer.java:48)
at org.simantics.databoard.serialization.impl.MapSerializer.deserializeTo(MapSerializer.java:78)
at org.simantics.databoard.serialization.Serializer.deserializeToTry(Serializer.java:111)
at org.simantics.databoard.serialization.impl.GenericRecordSerializer.deserializeTo(GenericRecordSerializer.java:133)
at org.simantics.databoard.serialization.Serializer.deserializeToTry(Serializer.java:111)
at org.simantics.databoard.serialization.impl.ArraySerializer.deserializeToTry(ArraySerializer.java:103)
at org.simantics.databoard.serialization.impl.GenericRecordSerializer.deserializeTo(GenericRecordSerializer.java:133)
at org.simantics.databoard.serialization.Serializer$CompositeSerializer.deserializeTo(Serializer.java:416)
at org.simantics.databoard.serialization.Serializer.deserialize(Serializer.java:208)
at org.simantics.databoard.util.Bean.deserialize(Bean.java:381)
at org.simantics.browsing.ui.common.state.IdentifiedStatePersistor.deserialize(IdentifiedStatePersistor.java:55)
at org.simantics.browsing.ui.common.state.IdentifiedStatePersistor.deserialize(IdentifiedStatePersistor.java:33)
at org.simantics.browsing.ui.common.state.ExplorerStates$ReaderJob.run(ExplorerStates.java:49)
at org.eclipse.core.internal.jobs.Worker.run(Worker.java:56)
Caused by: java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextNode(Unknown Source)
at java.util.HashMap$ValueIterator.next(Unknown Source)
at org.simantics.databoard.binding.reflection.ClassBindingFactory.isComplete(ClassBindingFactory.java:637)
at org.simantics.databoard.binding.reflection.ClassBindingFactory.construct(ClassBindingFactory.java:612)
... 20 more
Synchronization of classBindingFactory.construct(..) seems to be lacking from multiple locations:
- ObjectVariantBinding.getContentBinding(..) calls classBindingFactory.construct(..) without synchronization
- BeanBinding.create(..) calls bindingFactory.getBinding(..) which calls classBindingFactory.construct(..) without synchronization