[ 
https://issues.apache.org/jira/browse/OPENJPA-2340?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Piotr Kubowicz updated OPENJPA-2340:
------------------------------------

    Summary: [patch] UnsupportedOperationException on commit/rollback a 
transaction without writes  (was: UnsupportedOperationException on 
commit/rollback a transaction without writes)
    
> [patch] UnsupportedOperationException on commit/rollback a transaction 
> without writes
> -------------------------------------------------------------------------------------
>
>                 Key: OPENJPA-2340
>                 URL: https://issues.apache.org/jira/browse/OPENJPA-2340
>             Project: OpenJPA
>          Issue Type: Bug
>          Components: kernel
>    Affects Versions: 2.2.1
>            Reporter: Piotr Kubowicz
>         Attachments: BrokerImpl-trans-cache.patch
>
>
> I met the following exception:
> Caused by: <openjpa-2.2.1-r422266:1396819 nonfatal general error> 
> org.apache.openjpa.persistence.PersistenceException: IteratorChains must 
> contain at least one Iterator
>         at 
> org.apache.openjpa.kernel.BrokerImpl.afterCompletion(BrokerImpl.java:2036)
>         at 
> org.apache.openjpa.kernel.LocalManagedRuntime.commit(LocalManagedRuntime.java:94)
>         at org.apache.openjpa.kernel.BrokerImpl.commit(BrokerImpl.java:1516)
>         at 
> org.apache.openjpa.kernel.DelegatingBroker.commit(DelegatingBroker.java:933)
>         at 
> org.apache.openjpa.persistence.EntityManagerImpl.commit(EntityManagerImpl.java:570)
>         ... 37 more
> Caused by: java.lang.UnsupportedOperationException: IteratorChains must 
> contain at least one Iterator
>         at 
> org.apache.commons.collections.iterators.IteratorChain.checkChainIntegrity(Unknown
>  Source)
>         at 
> org.apache.commons.collections.iterators.IteratorChain.lockChain(Unknown 
> Source)
>         at 
> org.apache.commons.collections.iterators.IteratorChain.hasNext(Unknown Source)
>         at 
> org.apache.openjpa.kernel.BrokerImpl.endTransaction(BrokerImpl.java:2407)
>         at 
> org.apache.openjpa.kernel.BrokerImpl.afterCompletion(BrokerImpl.java:2012)
>         ... 41 more
> It's hard for me to provide a minimal reproduction steps. Generally what I am 
> doing is:
> manager.getTransaction().begin();
> // save some entities joined in a complex way
> manager.getTransaction().commit(); // fine
> manager.clear();
> manager.getTransaction().begin();
> manager.getTransaction().rollback(); // throws exception
> What is funny, I have an @After method in my test that does another:
> manager.getTransaction().rollback();
> and it succeeds.
> After some debugging I found that the bug is in how 
> BrokerImpl.endTransaction() initializes transStates:
> - in the rollback that throws exceptions, hasTransactionalObjects() returns 
> true, although _transCache.size() returns 0; iterator returned by the empty 
> _transCache throws UnsupportedOperationException
> - in the rollback in @After, hasTransactionalObjects() returns false, 
> transStates is initialized with Collections.EMPTY_SET and there is no problem 
> with the iterator
> I attached a patch which makes hasTransactionalObjects() check not only if 
> _transCache is null, but also if its empty.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators
For more information on JIRA, see: http://www.atlassian.com/software/jira

Reply via email to