Crash while retrieving Results from a Reportquery and query.setEndAtIndex()

2005-02-14 Thread Christoph Hermann
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()

2005-02-14 Thread Christoph Hermann
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()

2005-02-14 Thread Christoph Hermann
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