[ https://issues.apache.org/jira/browse/CAUSEWAY-3675?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Daniel Keir Haywood updated CAUSEWAY-3675: ------------------------------------------ Attachment: (was: image-2024-01-16-15-53-58-096.png) > Suppress autoflush if called by EntityChangeTracker (to avoid concurrent > modification exceptions). > -------------------------------------------------------------------------------------------------- > > Key: CAUSEWAY-3675 > URL: https://issues.apache.org/jira/browse/CAUSEWAY-3675 > Project: Causeway > Issue Type: New Feature > Components: Persistence (commons) > Affects Versions: 2.0.0-RC4 > Reporter: Daniel Keir Haywood > Assignee: Daniel Keir Haywood > Priority: Minor > Fix For: 2.0.0-RC5 > > > The following observed under JDO... > Parent <->* Child as a 1:m managed relationship. > there are lots of derived properties on the Parent > create a new child object; as it is flushed, then JDO calls back to add the > child to the parent's children collection. This is done in > RelationshipManagerImpl#process (one of these per entity dirties in the > xactn). > The JDO lifecycle callbacks result in EntityChangeTracker being called. This > iterates over all properties (or at least those with > @Property(entityChangePublishing = ENABLED) implicitly or explicitly. Some > of these may be derived, resulting in a call to RepositoryServiceDefault. It > has an autoFlush which will cause the transaction to be flushed. > However, JDO is not re-entrant in this respect, and so hits a > ConcurrentModificationException upon itself. > > ~~~ > As things stand currently there are two workarounds: either disable autoFlush > for repository, or use @Property(entityChangePublishing=...). > This ticket is to introduce a new option, which is to automatically suppress > autoflush when EntityChangeTracker is called. > In addition, move RepositoryServiceDefault into persistence.commons, and > update the location of its 'disable-auto-flush' property, and introduce a new > config property to control this new behaviour. -- This message was sent by Atlassian Jira (v8.20.10#820010)