Crash while retrieving Results from a Reportquery and query.setEndAtIndex()
Hello, i'm having Problems when retrieving Results with a Reportquery. I set the max number of results to 10 and on the 9th row my loop crashes (because in the database there are only 8 rows). I would expect ojb to only return 8 Rows. Code snippet: var crit = new Packages.org.apache.ojb.broker.query.Criteria(); crit.addEqualToField(logs.menuLinkId,id); var q = new Packages.org.apache.ojb.broker.query.ReportQueryByCriteria(Packages.nymphoon.MenuLink, crit); var attributes = new Array(3); attributes[0] = logs.menuLinkId; attributes[1] = count(*); attributes[2] = name; q.setAttributes(attributes); q.addGroupBy(logs.menuLinkId); q.addGroupBy(name); q.addOrderByDescending(count(*)); q.setEndAtIndex(10); dao.begin(); var it = dao.getReport (q); while ( it.hasNext() ) { var o = it.next(); // crash suggestions.add(o); } dao.commit(); The while loop crashes after the 8th Element. An Iterator of Type broker.accesslayer.PagingIterator (it) is instanciated correctly. I thought that if there are only 8 Rows it.hasNext() would return false? I could add a try/catch in the inner loop, but i don't think this is a good solution. Can anyone help me with this? The loop works fine when i set q.setEndAtIndex(5); i.e. Christoph pgpcucCVfioa7.pgp Description: PGP signature
Re: Crash while retrieving Results from a Reportquery and query.setEndAtIndex()
Jakob Braeuchi schrieb: Hello, what do you mean by 'crash' ? could you please post the exception. hmm of course, sorry that i forgot this :/ The Exception is: org.apache.cocoon.ProcessingException: Failed to execute pipeline.: java.lang.RuntimeException: java.lang.RuntimeException: org.apache.avalon.framework.CascadingRuntimeException: file:/usr/local/jakarta-tomcat-4.1.31/webapps/cocoon_2.1.6/samples/guschtel/nymphoon/flow/authentication.js, line 318: uncaught JavaScript exception: at displayMenu (file:/usr/local/jakarta-tomcat-4.1.31/webapps/cocoon_2.1.6/samples/guschtel/nymphoon/flow/authentication.js, Line 318): java.util.NoSuchElementException: Could not obtain next object: inner hasNext was false 317: while ( it.hasNext() ) { 318: var o = it.next(); // crashes here 319: suggestions.add(o); 320: } Christoph pgpOsS4vqFqk2.pgp Description: PGP signature
Re: Crash while retrieving Results from a Reportquery and query.setEndAtIndex()
Antonio Gallardo schrieb: Hello, Line 318): java.util.NoSuchElementException: Could not obtain next object: inner hasNext was false 317: while ( it.hasNext() ) { 318: var o = it.next(); // crashes here 319: suggestions.add(o); 320: } Thanks. This is inside Cocoon Flow. Seems that OJB has nothing to do in this case. Please send more code of this Javascript. I would recommend to move this business code to a java code and call it from your Flow function. There are some small incompatibilities while manipulating Java object inside Javascript. I have interest in know how is declared it. Which kind of object it is. Same Thing happens when i use it in a java Class. Javascript is just easier to Debug for me, because i'm not using a java IDE. My workaround is to put a try/catch block into the while-loop. My Java-Code: import java.util.ArrayList; import java.util.Collection; import java.util.Iterator; import java.io.*; import java.text.*; import java.util.*; import org.apache.ojb.broker.query.*; ... Criteria crit = new Criteria(); crit.addEqualToField(logs.menuLinkId,id); crit.addEqualToField(stylesheet.id,stylesheetId); ReportQueryByCriteria q = new ReportQueryByCriteria(MenuLink.class,crit); String[] attributes = new String[4]; attributes[0] = logs.menuLinkId; attributes[1] = count(*); attributes[2] = name; attributes[3] = stylesheet.type; q.setAttributes(attributes); q.addGroupBy(logs.menuLinkId); q.addGroupBy(name); q.addGroupBy(stylesheet.type); q.addOrderByDescending(count(*)); // top 10 q.setEndAtIndex(10); ArrayList menulinks = new ArrayList(); dao.begin(); Iterator it = dao.getReport (q); while ( it != null it.hasNext() ) { // Catch Exception try { Object[] o = (Object[]) it.next(); menulinks.add(o); } catch (Exception e) { //nothing } } dao.commit(); Christoph pgp2U6j5MIt9Y.pgp Description: PGP signature