Is there a way to change the JIAR subject to UnsupportedOperationException? On 6/19/07, Teresa Kan wrote: > > Sorry it was not NPE, it was UnsupportedOperationException. I had the NPE > before and somehow mixed up with two. Anyway, it caused by : > java.lang.UnsupportedOperationException: IteratorChains must contain at > least one Iterator > > The Collecitons.EMPTY_LIST.iterator() does not return null. > Here is the exception stack: > > 4781 emptest TRACE [main] openjpa.Runtime - An exception occurred while > ending the transaction. This exception will be re-thrown. > > <0.0.0 nonfatal user error> org.apache.openjpa.util.NoTransactionException: > Can only perform operation while a transaction is active. > > at org.apache.openjpa.kernel.BrokerImpl.assertActiveTransaction( > BrokerImpl.java:4307) > > at org.apache.openjpa.kernel.BrokerImpl.afterCompletion(BrokerImpl.java > :1806) > > at org.apache.openjpa.kernel.LocalManagedRuntime.rollback( > LocalManagedRuntime.java:123) > > at org.apache.openjpa.kernel.LocalManagedRuntime.commit( > LocalManagedRuntime.java:104) > > at org.apache.openjpa.kernel.BrokerImpl.commit(BrokerImpl.java:1319) > > at org.apache.openjpa.kernel.DelegatingBroker.commit(DelegatingBroker.java > :869) > > at org.apache.openjpa.persistence.EntityManagerImpl.commit( > EntityManagerImpl.java:409) > > at tutorial.ejb.TestEmpsPerClass.main(TestEmpsPerClass.java:135) > > 4781 emptest TRACE [main] openjpa.Runtime - An exception occurred while > ending the transaction. This exception will be re-thrown. > > <0.0.0 nonfatal store error> org.apache.openjpa.util.StoreException: > IteratorChains must contain at least one Iterator > > at org.apache.openjpa.kernel.BrokerImpl.afterCompletion(BrokerImpl.java > :1833) > > at org.apache.openjpa.kernel.LocalManagedRuntime.commit( > LocalManagedRuntime.java:93) > > at org.apache.openjpa.kernel.BrokerImpl.commit(BrokerImpl.java:1319) > > at org.apache.openjpa.kernel.DelegatingBroker.commit(DelegatingBroker.java > :869) > > at org.apache.openjpa.persistence.EntityManagerImpl.commit( > EntityManagerImpl.java:409) > > at tutorial.ejb.TestEmpsPerClass.main(TestEmpsPerClass.java:135) > > 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 > :2196) > > at org.apache.openjpa.kernel.BrokerImpl.afterCompletion(BrokerImpl.java > :1809) > > ... 5 more > > <0.0.0 fatal store error> org.apache.openjpa.persistence.RollbackException: > IteratorChains must contain at least one Iterator > > at org.apache.openjpa.persistence.EntityManagerImpl.commit( > EntityManagerImpl.java:420) > > at tutorial.ejb.TestEmpsPerClass.main(TestEmpsPerClass.java:135) > > Caused by: <0.0.0 nonfatal general error> > org.apache.openjpa.persistence.PersistenceException: IteratorChains must > contain at least one Iterator > > at org.apache.openjpa.kernel.BrokerImpl.afterCompletion(BrokerImpl.java > :1833) > > at org.apache.openjpa.kernel.LocalManagedRuntime.commit( > LocalManagedRuntime.java:93) > > at org.apache.openjpa.kernel.BrokerImpl.commit(BrokerImpl.java:1319) > > at org.apache.openjpa.kernel.DelegatingBroker.commit(DelegatingBroker.java > :869) > > at org.apache.openjpa.persistence.EntityManagerImpl.commit( > EntityManagerImpl.java:409) > > ... 1 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)update different fields > > at org.apache.openjpa.kernel.BrokerImpl.endTransaction(BrokerImpl.java > :2196) > > at org.apache.openjpa.kernel.BrokerImpl.afterCompletion(BrokerImpl.java > :1809) > > ... 5 more > > > On 6/19/07, Patrick Linskey (JIRA) wrote: > > > > > > [ > > https://issues.apache.org/jira/browse/OPENJPA-261?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel#action_12506312] > > > > Patrick Linskey commented on OPENJPA-261: > > ----------------------------------------- > > > > So you're saying that Collections.EMPTY_LIST.iterator() is returning > > null? That seems surprising. What version of Java are you using? Can you > > check if your Java version is returning null from > > Collecitons.EMPTY_LIST.iterator ()? > > > > > NullPointerException occurred in BrokerImpl.java > > > ------------------------------------------------ > > > > > > Key: OPENJPA-261 > > > URL: https://issues.apache.org/jira/browse/OPENJPA-261 > > > Project: OpenJPA > > > Issue Type: Bug > > > Components: kernel > > > Affects Versions: 0.9.7 > > > Environment: Window XP > > > Reporter: Teresa Kan > > > Priority: Critical > > > Attachments: NPE.patch > > > > > > > > > While I was testing against the openjpa code, I got a NPE in the > > BrokerImpl.endtransaction () method. The method set the transState to an > > empty Collection if there is no cache for transactions. Later the code did > > not check this Collection and tried to iterate on it and a > > NullPointerException occurred. > > > Original code: > > > Collection transStates = _transCache; > > > if (transStates == null) > > > transStates = Collections.EMPTY_LIST; > > > ..... > > > for (Iterator itr = transStates.iterator(); itr.hasNext ();) { <--- > > NPE occurred here. > > > sm = (StateManagerImpl) itr.next(); > > > try { > > > if (rollback) { > > > // tell objects that may have been derefed then > > flushed > > > // (and therefore deleted) to un-deref > > > sm.setDereferencedDependent(false, false); > > > sm.rollback(); > > > } else > > > sm.commit(); > > > } catch (RuntimeException re) { > > > exceps = add(exceps, re); > > > } > > > } > > > I put a check before this "for" loop then the NPE disappeared. > > > if (!transStates.isEmpty()) { > > > for (Iterator itr = transStates.iterator(); itr.hasNext();) > > { > > > sm = (StateManagerImpl) itr.next(); > > > try { > > > if (rollback) { > > > // tell objects that may have been derefed then > > flushed > > > // (and therefore deleted) to un-deref > > > sm.setDereferencedDependent(false, false); > > > sm.rollback(); > > > } else > > > sm.commit(); > > > } catch (RuntimeException re) { > > > exceps = add(exceps, re); > > > } > > > } > > > } > > > The NPE.patch is attached in this jiar. > > > > -- > > This message is automatically generated by JIRA. > > - > > You can reply to this email to add a comment to the issue online. > > > > >