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



Reply via email to