[OFBiz] Dev - Problem with new OFBiz version

Adrian Crum adrianc at hlmksw.com
Fri Apr 8 17:37:37 EDT 2005


I agree with you 100%. I submitted a bug report to Advantage.

David E. Jones wrote:

> 
> Adrian,
> 
> I don't really like this fix, here's why:
> 
> 1. According to the spec we are doing it right, and the Advantage JDBC  
> driver is doing it wrong; they should return false and not throw an  
> exception when there are no more rows. Here is the JavaDoc for this  
> method that clearly explains what is returned:
> 
> ==============================================
> ext
> public boolean next()
>              throws SQLException
> Moves the cursor down one row from its current position.  A ResultSet  
> cursor is initially positioned  before the first row; the first call to  
> the method  next makes the first row the current row; the  second call  
> makes the second row the current row, and so on.
> 
>  If an input stream is open for the current row, a call  to the method  
> next will  implicitly close it. A ResultSet object's  warning chain is  
> cleared when a new row is read.
> 
>  Returns:
> true if the new current row is valid;  false if there are no more rows
>  Throws:
> SQLException - if a database access error occurs
> ==============================================
> 
> In general when implementing such specs in Java it is not allowed to  
> throw undocumented exceptions. If the fix didn't cause any other  
> problems, I'd be fine with it, but this one does because of....
> 
> 2. Performance impact. The isAfterLast method may not be a big issue  
> for some JDBC drivers, but it depends on how they are implemented and I  
> know that in some cases this can require round-trips to the database  
> and such, which is a huge performance impact. That's why we call next  
> over and over instead of hasNext, even though that is implemented  
> because the EntityListIterator implements the ListIterator interface.
> 
> Does that make sense? This should be a bug report to Advantage, not to  
> OFBiz. I know it is usually easier to get something fixed in an open  
> source project than a closed source commercial application, and it's  
> flattering that you would try to resolve the issue in this way.
> 
> But, for the sake of just about everyone else who is using OFBiz, my  
> decision must be to decline this change. Of course, it is open to  
> discussion and I'd be happy to consider what you or anyone else has to  
> say.
> 
> -David
> 
> 
> On Apr 7, 2005, at 3:46 PM, Adrian Crum wrote:
> 
>> The latest OFBiz version generates this error:
>>
>> java.lang.Thread.run(Unknown Source)
>> org.ofbiz.base.util.GeneralRuntimeException: Error getting the next  
>> result ([Extended Systems][Advantage JDBC]Result set is after last  row.)
>> org.ofbiz.entity.util.EntityListIterator.next(EntityListIterator.java: 
>> 308)
>> org.ofbiz.widget.form.ModelForm.safeNext(ModelForm.java:972)
>>
>> It looks like the ResultSet next() method is being called after it's  
>> past the last row.
>>
>> I made this patch to EntityListIterator to get it to work:
>>
>>     public Object next() {
>>         try {
>>             if (!resultSet.isAfterLast() && resultSet.next()) {
>>                 return currentGenericValue();
>>             } else {
>>                 return null;
>>             }
>>         } catch (SQLException e) {
>>
>>
>> _______________________________________________
>> Dev mailing list
>> Dev at lists.ofbiz.org
>> http://lists.ofbiz.org/mailman/listinfo/dev
> 
> 
> ------------------------------------------------------------------------
> 
>  
> _______________________________________________
> Dev mailing list
> Dev at lists.ofbiz.org
> http://lists.ofbiz.org/mailman/listinfo/dev


More information about the Dev mailing list