[hibernate-issues] [Hibernate-JIRA] Resolved: (OGM-31) ConcurrentModificationException on ArrayList representing the collection
Emmanuel Bernard (JIRA)
noreply at atlassian.com
Fri Jun 10 10:56:25 EDT 2011
[ http://opensource.atlassian.com/projects/hibernate/browse/OGM-31?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Emmanuel Bernard resolved OGM-31.
---------------------------------
Resolution: Fixed
Fix Version/s: 3.0-next
This should be fixed with OGM-32
> ConcurrentModificationException on ArrayList representing the collection
> -------------------------------------------------------------------------
>
> Key: OGM-31
> URL: http://opensource.atlassian.com/projects/hibernate/browse/OGM-31
> Project: Hibernate OGM
> Issue Type: Bug
> Components: core
> Reporter: Emmanuel Bernard
> Fix For: 3.0-next
>
>
> Several instances can access the collection and try and update things. Since the underlying implementation is a simple ArrayList, you can get ConcurrentModificationException if someone reads it while someone else update it.
> {code}
> Exception in thread "pool-5-thread-2" java.util.ConcurrentModificationException
> at java.util.AbstractList$Itr.checkForComodification(AbstractList.java:372)
> at java.util.AbstractList$Itr.next(AbstractList.java:343)
> at org.hibernate.ogm.util.impl.PropertyMetadataProvider.findMatchingTuple(PropertyMetadataProvider.java:137)
> at org.hibernate.ogm.persister.Dehydrator.doRemovePropertyMetadata(Dehydrator.java:219)
> at org.hibernate.ogm.persister.Dehydrator.dehydrate(Dehydrator.java:140)
> at org.hibernate.ogm.persister.OgmEntityPersister.dehydrate(OgmEntityPersister.java:784)
> at org.hibernate.ogm.persister.OgmEntityPersister.update(OgmEntityPersister.java:747)
> at org.hibernate.action.EntityUpdateAction.execute(EntityUpdateAction.java:113)
> at org.hibernate.engine.ActionQueue.execute(ActionQueue.java:273)
> at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:265)
> at org.hibernate.engine.ActionQueue.executeActions(ActionQueue.java:185)
> at org.hibernate.event.def.AbstractFlushingEventListener.performExecutions(AbstractFlushingEventListener.java:321)
> at org.hibernate.event.def.DefaultFlushEventListener.onFlush(DefaultFlushEventListener.java:51)
> at org.hibernate.impl.SessionImpl.flush(SessionImpl.java:1216)
> at org.hibernate.impl.SessionImpl.managedFlush(SessionImpl.java:383)
> at org.hibernate.transaction.JDBCTransaction.commit(JDBCTransaction.java:133)
> at pt.ist.fenixframework.example.bankbench.hib.HibTxSystem.doIt(HibTxSystem.java:85)
> at pt.ist.fenixframework.example.bankbench.TxCommand.run(TxCommand.java:14)
> at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
> at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
> at java.lang.Thread.run(Thread.java:680)
> {code}
> Problem:
> - the collection should be copied on read and that's not the case
> - the proper approach is to wrap it as an AtomicMap to benefit from the "diff" change
> - longer term, we need the merge on conflict policy in Infinispan.
--
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: http://opensource.atlassian.com/projects/hibernate/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira
More information about the hibernate-issues
mailing list