Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ConcurrentModificationException on the second commit updating a multi-valued object property #274

Closed
cristianolongoodhl opened this issue Nov 10, 2024 · 2 comments · Fixed by #279
Labels
Milestone

Comments

@cristianolongoodhl
Copy link

I'm using Jopa 2.1.0 with ontodriver-jena. My model consists of a Child class, and a Parent class with a property hasChild with a Set of Child as range. Once a Parent instance p is stored in the ontology, I need to add several instances of Child as children of p, one by one and using different transactions. Using an in-memory storage, two additions works well. Instead, using a file storage, only the first addition works fine, where as the second one cause the runtime exception reported below.

A test showing this use case both with in-memory and file storage is available at https://github.com/cristianolongoodhl/jopamiltivaluedpropertiesissue.

Also, workaround suggestions are welcome.

`cz.cvut.kbss.jopa.exceptions.RollbackException: java.util.ConcurrentModificationException

at cz.cvut.kbss.jopa.transactions.EntityTransactionWrapper.commit(EntityTransactionWrapper.java:56)
at cz.cvut.kbss.jopa.transactions.EntityTransactionImpl.commit(EntityTransactionImpl.java:58)
at it.unict.gallosiciliani.importing.persistence.LexiconOntologyWriterTest.testStoringMultipleEntriesAtomic(LexiconOntologyWriterTest.java:169)
at java.base/java.lang.reflect.Method.invoke(Method.java:569)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)

Caused by: java.util.ConcurrentModificationException
at org.apache.jena.mem.ArrayBunch$2.forEachRemaining(ArrayBunch.java:130)
at org.apache.jena.util.iterator.WrappedIterator.forEachRemaining(WrappedIterator.java:113)
at org.apache.jena.util.iterator.FilterIterator.forEachRemaining(FilterIterator.java:97)
at org.apache.jena.util.iterator.WrappedIterator.forEachRemaining(WrappedIterator.java:113)
at org.apache.jena.mem.TrackingTripleIterator.forEachRemaining(TrackingTripleIterator.java:58)
at org.apache.jena.util.iterator.Map1Iterator.forEachRemaining(Map1Iterator.java:54)
at org.apache.jena.util.iterator.WrappedIterator.forEachRemaining(WrappedIterator.java:113)
at cz.cvut.kbss.ontodriver.jena.connector.LocalStorage.remove(LocalStorage.java:123)
at cz.cvut.kbss.ontodriver.jena.connector.SharedStorageConnector.lambda$removePropertyValues$6(SharedStorageConnector.java:160)
at java.base/java.lang.Iterable.forEach(Iterable.java:75)
at cz.cvut.kbss.ontodriver.jena.connector.SharedStorageConnector.removePropertyValues(SharedStorageConnector.java:158)
at cz.cvut.kbss.ontodriver.jena.connector.ChangeTrackingStorageConnector.mergeRemovedStatements(ChangeTrackingStorageConnector.java:80)
at cz.cvut.kbss.ontodriver.jena.connector.ChangeTrackingStorageConnector.commit(ChangeTrackingStorageConnector.java:59)
at cz.cvut.kbss.ontodriver.jena.JenaAdapter.commit(JenaAdapter.java:66)
at cz.cvut.kbss.ontodriver.jena.JenaConnection.commit(JenaConnection.java:66)
at cz.cvut.kbss.jopa.sessions.ConnectionWrapper.commit(ConnectionWrapper.java:103)
at cz.cvut.kbss.jopa.sessions.ChangeTrackingUnitOfWork.commitToStorage(ChangeTrackingUnitOfWork.java:114)
at cz.cvut.kbss.jopa.sessions.AbstractUnitOfWork.commitUnitOfWork(AbstractUnitOfWork.java:199)
at cz.cvut.kbss.jopa.sessions.AbstractUnitOfWork.commit(AbstractUnitOfWork.java:190)
at cz.cvut.kbss.jopa.transactions.EntityTransactionWrapper.commit(EntityTransactionWrapper.java:53)
`

@cristianolongoodhl
Copy link
Author

The workaround is: add children by SPARQL queries.

@ledsoft
Copy link
Contributor

ledsoft commented Nov 11, 2024

Hi, thanks for reporting the issue as well as finding a workaround. I will try to look into it as soon as possible.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

Successfully merging a pull request may close this issue.

2 participants