Hello,
I am using an OpenJPA extension to iterate over an extent. However, when
a problem in my own code throws an exception, there is a problem rolling
back due to what appears to be a bug in the OpenJPA code.
Should I file a bug in JIRA?
Here is my code:
public Void execute( EntityManager entityManager )
throws RepositoryException
{
final OpenJPAEntityManager openJpaEntityManager =
OpenJPAPersistence.cast( entityManager );
final Extent<V> extent =
openJpaEntityManager.createExtent(
getValueObjectType(), false );
final Iterator<V> valueObjectIterator = extent.iterator();
final Iterator<T> modelObjectIterator =
getConverter().convertToModelObjectIterator(
valueObjectIterator, modelObjectType );
while( modelObjectIterator.hasNext() )
{
try
{
callback.next( modelObjectIterator.next() );
}
catch ( Exception e )
{
throw new RepositoryException( e );
}
}
return null;
}
And here is the stack trace:
Caused by: <openjpa-2.0.0-SNAPSHOT-r422266:765846M nonfatal general
error> org.apache.openjpa.persistence.PersistenceException: null
at
org.apache.openjpa.kernel.BrokerImpl.afterCompletion(BrokerImpl.java:1973)
at
org.apache.openjpa.kernel.LocalManagedRuntime.rollback(LocalManagedRuntime.java:124)
at org.apache.openjpa.kernel.BrokerImpl.rollback(BrokerImpl.java:1475)
at
org.apache.openjpa.kernel.DelegatingBroker.rollback(DelegatingBroker.java:903)
at
org.apache.openjpa.persistence.EntityManagerImpl.rollback(EntityManagerImpl.java:561)
at ... lots more
Caused by: java.util.ConcurrentModificationException
at java.util.HashMap$HashIterator.nextEntry(HashMap.java:841)
at java.util.HashMap$KeyIterator.next(HashMap.java:877)
at
org.apache.openjpa.kernel.ManagedCache.dirtyCheck(ManagedCache.java:307)
at
org.apache.openjpa.kernel.BrokerImpl.hasTransactionalObjects(BrokerImpl.java:3907)
at org.apache.openjpa.kernel.BrokerImpl.setDirty(BrokerImpl.java:4024)
at
org.apache.openjpa.kernel.StateManagerImpl.setPCState(StateManagerImpl.java:229)
at
org.apache.openjpa.kernel.StateManagerImpl.dirty(StateManagerImpl.java:1628)
at
org.apache.openjpa.kernel.StateManagerImpl.dirty(StateManagerImpl.java:1568)
at
org.apache.openjpa.kernel.StateManagerImpl.dirtyCheck(StateManagerImpl.java:867)
at
org.apache.openjpa.kernel.ManagedCache.dirtyCheck(ManagedCache.java:307)
at
org.apache.openjpa.kernel.BrokerImpl.hasTransactionalObjects(BrokerImpl.java:3907)
at
org.apache.openjpa.kernel.BrokerImpl.endTransaction(BrokerImpl.java:2292)
at
org.apache.openjpa.kernel.BrokerImpl.afterCompletion(BrokerImpl.java:1949)
... 22 more