Craig, Thanks for updating the description. There is still one NPE here.
"I put a check before this "for" loop then the NPE disappeared.". Please change it to "I put a check before this "for" loop then the UnsupportedOperationException disappeared." Or it doesn't matter.. Thanks again Teresa On 6/19/07, Craig L Russell <[EMAIL PROTECTED]> wrote:
Hi Teresa, I've edited the JIRA but you should look and see if it makes sense with the minimum editing I did. Craig On Jun 19, 2007, at 4:08 PM, Teresa Kan wrote: > Is there a way to change the JIAR subject to > UnsupportedOperationException? > > > > On 6/19/07, Teresa Kan < [EMAIL PROTECTED]> 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.checkChainInte >> grity(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.checkChainInte >> grity(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) <[EMAIL PROTECTED]> 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. >> > >> > >> Craig Russell Architect, Sun Java Enterprise System http://java.sun.com/products/jdo 408 276-5638 mailto: [EMAIL PROTECTED] P.S. A good JDO? O, Gasp!
