I take that back, setting eager-release=true had no impact on my results (I
had changed something else, Foolish me)
-John

-----Original Message-----
From: McCaffrey, John G. 
Sent: Monday, June 02, 2003 11:57 AM
To: 'OJB Users List'
Subject: RE: Limited collection returned


Gary,
I tried eager-release=true, and that must be specifc to JBoss, because on
WSAD it actually made things a little worse. Instead of returning the
collection with n+1 entries (as it is now), it would only give back the
*new* entry (the most recently fetched) without any of the previously
fetched rows.

So with eager-release=false for each time I repeat a call to the exact same
query, I get the previous results+1 *new* row, but with eager-release=true,
I only got the 1 new row, and not the previous rows.

What happens when you set eager-release=false?
have you added or omitted any of the reccommended jars for ojb? 

I agree that the thing we have in common is that we are using datasources,
are you using
ConnectionFactoryClass=org.apache.ojb.broker.accesslayer.ConnectionFactoryMa
nagedImpl  ?

I hope that Armin, or someone can help us.

any luck finding out when the call to close the resultset is made? ( maybe
you could step through the code in the debugger, grab a reference to the
resultset, and continue stepping to see when it is closed)



-----Original Message-----
From: Gary Richards [mailto:[EMAIL PROTECTED]
Sent: Monday, June 02, 2003 10:57 AM
To: OJB Users List
Subject: RE: Limited collection returned


Hi John,

My setup is JBoss 3.2.1, MySql 4, OJB 1.0 RC3 (with a little patch to make
sure batch connections are not used, that's another story... Thread:
Failures running ejb unit tests against JBoss/MySql -
http://article.gmane.org/gmane.comp.jakarta.ojb.user/5965 ) using the ODMG
api, on both Windows 2000 (at work) and Windows XP Home (at home).
 
My OJB.properties is configured as per the deployment guide, only I am using
persistant locks instead of in-memory locks.
 
repository _database.xml is configured as follows, where java:DefaultDS is a
MySql datasource setup within JBoss.
 
    <jdbc-connection-descriptor
          jcd-alias="default"
          default-connection="true"
          platform="MySQL"
          jdbc-level="2.0"
          jndi-datasource-name="java:DefaultDS"
          username="username"
          password="password"
          eager-release="true"
          batch-mode="false"
          useAutoCommit="0"
          ignoreAutoCommitExceptions="false"
     >
        <sequence-manager
className="org.apache.ojb.broker.util.sequence.SequenceManagerMySQLImpl"/>
   </jdbc-connection-descriptor>
 
the eager-release="true" attribute is required for JBoss, as I understand it
tells OJB to return a connection sooner than it would in any other
environment. Do you have eager-release set? 
 
>From the deployment doc...
"When using jboss >3.0 you have to set eager-release="true" - when using
other application server false should be ok. "
 
Seems at the very least what we have in common is that we are operation in
managed environments.
 
HTH
 
Gary
 

-----Original Message-----
From: McCaffrey, John G. [mailto:[EMAIL PROTECTED]
Sent: 02 June 2003 16:02
To: 'OJB Users List'
Subject: RE: Limited collection returned


Thanks for your investigation Gary. This is exactly what I was suspecting
(RSIterator not iterating), now I guess the thing is to figure out how the
result set got closed. I am not sure why there seem to be only a few people
having this problem, it seems like such basic functionality that there would
be more of an uproar. It makes me wonder what the afflicted have in common,
and for those people that can get a collection of dependent objects, how is
their setup different (assuming that there are people that are not having
this problem)

my setup
I have the basic OJB.props settings 
default PersistenceBrokerImpl,  PersistenceBrokerFactoryDefaultImpl,
ConnectionManagerImpl, 
and I am using ConnectionFactoryDBCPImpl (though I have tried the others and
still have the problem).

 Windows 2000, db-ojb-1.0.rc3.jar, commons-dbcp.jar
I am using WSAD (with datasource) and DB2, and I am using the PB API.


######
Gary, Dan, Jin, Ken, etc what is your basic setup?

Is there anybody with this same setup that is able to get a collection of
dependent objects? (help me figure out what i have that is different)
######
I feel like a solution is right around the corner. (and its a good thing,
because I am supposed to go to production by the end of the week!)

Thanks to Gary and everyone that is looking into this.
-john

-----Original Message-----
From: Gary Richards [mailto:[EMAIL PROTECTED]
Sent: Monday, June 02, 2003 9:05 AM
To: OJB Users List
Subject: RE: Limited collection returned


 
Hi everyone,
 
Thought I'd offer my current observations on this as I work with Dan and am
running off the same codebase (JBoss 3.2.x, MySql, ODMG etc....) and
therefore trying to crack the same problem.
 
I've been using the eclipse debugger to step through the action of invoking
a query. I have spent most of the recent time observing 
private ManageableCollection getCollectionByQuery(Class collectionClass,
Class itemClass, Query query) of the PersistanceBrokerImpl class (line
1293), inparticular the actions of the while loop on line 1335 which reads
as,
 
 while (((endAt == Query.NO_END_AT_INDEX) || (retrievedCount <
numberOfObjectsToFetch)) && iter.hasNext())
 
I have witnessed the hasNext() call of this condition to return false during
the second cycle of the loop, even though I now there to be 13 rows in the
database table and 13 elements behind the Iterator. I have determined this
(for those who know eclipse) by editing the detail formatter of the
RSIterator class to read "this.size()" which shows 13 when I highlight it.
 
This leads me onto RSIterator.hasNext() (line 216) which I have moved onto
observe as a result. 
I noticed that on the second cycle of the iterator, the call from within
hasNext() will issue
 
hasNext = m_rsAndStmt.m_rs.next(); (line 223)
 
This throws an expection which is caught by the same method so that false is
returned. 
 
catch (Exception ex)
{
 hasNext = false;
}
 
I have noticed that the message given by this exception ex (which is not
logged, only gets caught) is "Operation not allowed after ResultSet closed".
This certainly suggests that something has closed the ResultSet before the
iterator has been fininshed with (exactly what it says in the message ;) ).
 
This almost always seems to happen after dependant objects have been
retieved as when we set auto-retrieve = "false"  in repository_user.xml for
the appropriate property we get all rows of the single table we query on but
no dependant objects, however when we set auto-retrieve = "true"  we get
only the first row of the single table and all its dependant objects.
 
Is this possibly linked to the eager-release feature which needs to be
enabled for operation on JBoss, or a side effect of bug OJB172?
 
Any other thoughts?
 
regards
 
Gary


        -----Original Message----- 
        From: Dan Hanley 
        Sent: Mon 02/06/2003 14:38 
        To: OJB Users List 
        Cc: 
        Subject: RE: Limited collection returned
        
        

        Jin
        Are you also running in a managed environment (e.g. jBoss)?
        I suspect the bug you're referring to is:
        Type :        Defect
        Issue Id :    OJB172
        Reported by: Rob Kischuk
                     rkischuk - (rkischuk <at> gttx.org)
        
        Details:
        
        Platform: PC
        Operating system: windows 2000
        Summary: Loading composite object leads to truncated collection
        Description: Repeated calls to retrieve a collection of objects that
each contain another object are
        retrieving truncated results, which are incrementally built to their
proper length using repeated
        requests.
        Status: New
        Priority: Undecided
        Severity: Major
        Functional area: Setup
        
        ... which sounds like it could be the culprit. A colleague of mine
is trying to trace through with the eclipse debugger to see if we can cast
any light on this.
        
        You are not alone, its holding a lot of people up...
        
        Dan
        
                -----Original Message-----
                From: Jin Bal [mailto:[EMAIL PROTECTED]
                Sent: Fri 30/05/2003 22:07
                To: OJB Users List
                Cc:
                Subject: Re: Limited collection returned
               
               
        
                I'm also having this problem - thank god someone else's said
so !  it's been
                driving me mad ;-)
               
                i've been using ojb since 0.9.5 and have only noticed it
recently. (sorry
                can't be more precise than that)
                here's the offending class descriptor
               
                    <class-descriptor
class="com.buyacar.businessobjects.Vehicle"
                table="vehicle">
                   ....blah  blah properties etc
                  <!-- IMAGES -->
                   <collection-descriptor
                         name="images"
                         auto-retrieve="true"
        
element-class-ref="com.buyacar.businessobjects.VehicleImage">
                         <inverse-foreignkey field-id-ref="1"/>
                      </collection-descriptor>
                    </class-descriptor>
               
                    <class-descriptor
class="com.buyacar.businessobjects.BACVehicleDetails"
                table="bac_details">
               
                             <reference-descriptor
                                        name="vehicle"
        
class-ref="com.buyacar.businessobjects.Vehicle"
                                        auto-retrieve="true">
                                <foreignkey field-id-ref="2"/>
                             </reference-descriptor>
               
                    </class-descriptor>
               
                whenever I load a BACVehicleDetails (and therefore a
Vehicle)  I only ever
                get one image in the collection.
               
               
                more over I have a search engine that only returns 1 result
the first time
                then 2 on the second submit then 3 ......etc  :-(
               
                heres the search engine code
               
                        PersistenceBroker broker = null;
                        try {
                            broker = getBroker();
                            Criteria criteria = new Criteria();
               
                            // check if theyve specified a price bracket
                            if(searchParams.getMaxPrice() !=null &&
                searchParams.getMinPrice()!=null) {
               
        
criteria.addBetween("price",searchParams.getMinPrice(),searchParams.getMaxPr
                ice());
                            } else if(searchParams.getMaxPrice()!=null &&
                searchParams.getMinPrice()==null) {
               
        
criteria.addLessOrEqualThan("price",searchParams.getMaxPrice());
                            } else if(searchParams.getMaxPrice()==null &&
                searchParams.getMinPrice()!=null)  {
               
        
criteria.addGreaterOrEqualThan("price",searchParams.getMinPrice());
                            }
               
                            if(searchParams.getManufacturer() !=null &&
                searchParams.getModel()==null) {
               
        
criteria.addEqualTo("vehicle.model.manufacturerId",searchParams.getManufactu
                rer());
                            }
               
                            if(searchParams.getModel() !=null) {
               
        
criteria.addEqualTo("vehicle.modelId",searchParams.getModel());
                            }
                            if(searchParams.getBodyStyle() != null) {
               
        
criteria.addEqualTo("vehicle.derivative.bodyStyleId",searchParams.getBodySty
                le());
                            }
                            if(searchParams.getFuelType() != null) {
               
        
criteria.addEqualTo("vehicle.derivative.fuelId",searchParams.getFuelType());
                            }
               
                            if(searchParams.getOrderBy() !=null) {
        
criteria.addOrderByAscending(searchParams.getOrderBy());
                            }
               
                            if(searchParams.getChannel()!=null &&
                !searchParams.getChannel().equals("")) {
        
criteria.addEqualTo("channel",searchParams.getChannel());
                            }
               
        
criteria.addEqualTo("status",searchParams.getStatus());
        
criteria.addEqualTo("visibility",searchParams.getVisibility());
                            criteria.addGreaterOrEqualThan("displayTo",new
                java.util.Date());
                            criteria.addLessOrEqualThan("displayFrom",new
java.util.Date());
                            Query query = new
                QueryByCriteria(BACVehicleDetails.class,criteria,true);
               
                            Collection c =
broker.getCollectionByQuery(query);
                            logger.debug("collection size: "+c.size());
                            Iterator results = c.iterator();
                           ArrayList list = new ArrayList();
               
                            while(results.hasNext()) {
                                // perform cast now to check that we've got
the correct
                object type
                                BACVehicleDetails vDetails =
(BACVehicleDetails)
                results.next();
                                list.add(vDetails);
                            }
                            return list;
                        } finally {
                            if (broker!=null) {
                                broker.close();
                            }
                        }
               
                sorry for the long code post
               
               
                it seems that when the cache is filled up it works ok
               
                help this is stopping me going live with the site  :-(
               
                BTW I did a search on the dev list and noticed a bug opened
on the 23rd MAy
                but i can't find it now
               
                cheers
               
               
                Jin
               
                ----- Original Message -----
                From: "McCaffrey, John G." <[EMAIL PROTECTED]>
                To: "'OJB Users List'" <[EMAIL PROTECTED]>
                Sent: Friday, May 30, 2003 5:52 PM
                Subject: RE: Limited collection returned
               
               
                > yes, I also noticed that, and I tried pre-fetching, but
that didn't help
                me
                > either.
                >
                > so are you having the same problem then? You are only
getting one row
                back,
                > instead of many?
                >
                > (my collection is filled properly with the right child
elements, but I am
                > not getting all of the parents that match the query, and
the query is
                select
                > all parents)
                >
                > can you see the SQL? I couldn't get P6Spy to work, so I
don't know what
                the
                > sql looks like.
                >
                > thanks for speaking up, I wonder if anyone else has had/is
having this
                > problem!
                >
                > -John
                >
                > -----Original Message-----
                > From: Dan Hanley [mailto:[EMAIL PROTECTED]
                > Sent: Friday, May 30, 2003 11:47 AM
                > To: OJB Users List
                > Subject: RE: Limited collection returned
                >
                >
                > John
                > Setting auto-retrieve = "false" works for me using JBoss &
mySQL *except*
                > that then I don't get any dependant ojbects loaded :-(
                >
                >
                > -----Original Message-----
                > From: McCaffrey, John G. [mailto:[EMAIL PROTECTED]
                > Sent: 30 May 2003 17:45
                > To: 'OJB Users List'
                > Subject: RE: Limited collection returned
                >
                >
                > I have been having the same problem. It seems like the
initial query
                > actually gets all the rows, but the RSIterator only gives
you one at a
                time.
                > In my situation if I  have 4 rows that match the query,
and I execute the
                > query once, I only get one row, each additional time I
execute the query I
                > get one more row (all previous rows are also returned in
the collection).
                > This is only happening for a referenced collection, all of
my other
                queries
                > are working fine.  I have no Idea what the deal is, I
really hope that
                > someone can help you.
                >
                > -John
                >
                > -----Original Message-----
                > From: Ken Dempster [mailto:[EMAIL PROTECTED]
                > Sent: Friday, May 30, 2003 11:38 AM
                > To: [EMAIL PROTECTED]
                > Subject: Limited collection returned
                >
                >
                > Most everything works except I only get one out of the
know four row
                > objects from the table in my collection.  I want to get
all the row
                > objects in the table.  My question is why am I only
getting only one row
                > object?  I am not sure what I am doing something wrong.
                >
                > Here is how I have things setup.  I have set jboss 3.2 as
suggested in
                > the deployment section of the documentation and have jboss
configured it
                > with data source to connect to a DB2 database.  I am
requesting a
                > collection from a client to a SessionBean that delegates
to a
                > PersistenceBroker instance.   Basicly I am using the code
in
                > PersistenceBrokerBean as a template for my EJB.  I do
generate my own
                > JdbcConnectionDescriptor and pass it to the
ConnectionRepository instead
                > of using the repository.xml to define my
JdbcConnectionDescriptor.
                >
                > My query looks as follows:
                > Query query = new QueryByCriteria(Runner.class, null);
                >
                > Collection list =
                > getPersistenceBrokerRemote().getCollectionByQuery(query);
                >
                >
                > My ClassDescriptor of the collection of objects I am
trying to get is
                > defined in the repository_user.xml as follows :
                >
                > <class-descriptor class="test.ojb.Runner"
table="KENLIB.RUNNER">
                >
                > <field-descriptor name="m_id" column="ID"
jdbc-type="INTEGER"
                > primarykey="true" autoincrement="true"/>
                >
                > <field-descriptor name="m_name" column="NAME"
jdbc-type="VARCHAR"/>
                >
                > <collection-descriptor name="m_times"
element-class-ref="test.ojb.Time">
                >
                > <inverse-foreignkey field-ref="m_id"/>
                >
                > </collection-descriptor>
                >
                > </class-descriptor>
                >
                > <class-descriptor class="test.ojb.Race"
table="KENLIB.RACE">
                >
                > <field-descriptor name="m_id" column="ID"
jdbc-type="INTEGER"
                > primarykey="true" autoincrement="true"/>
                >
                > <field-descriptor name="m_location" column="LOCATION"
                > jdbc-type="VARCHAR"/>
                >
                > <field-descriptor name="m_date" column="DATE"
jdbc-type="DATE"/>
                >
                > </class-descriptor>
                >
                > <class-descriptor class="test.ojb.Time"
table="KENLIB.RACE_TIME">
                >
                > <field-descriptor name="m_id" column="ID"
jdbc-type="INTEGER"
                > primarykey="true" autoincrement="true"/>
                >
                > <field-descriptor name="m_runner_id" column="RUNNER_ID"
                > jdbc-type="INTEGER"/>
                >
                > <field-descriptor name="m_race_id" column="RACE_ID"
                > jdbc-type="INTEGER"/>
                >
                > <field-descriptor name="m_time" column="TIME"
jdbc-type="VARCHAR"/>
                >
                > <reference-descriptor name="m_race"
class-ref="test.ojb.Race">
                >
                > <foreignkey field-ref="m_race_id"/>
                >
                > </reference-descriptor>
                >
                > </class-descriptor>
                >
                >
                >
                >
                > Ken Dempster
                > Programmer Analyst
                > Vision Solutions, Inc.
                >
                > 17911 Von Karman Ave,  5th Floor
                > Irvine, CA 92614
                > UNITED STATES
                >
                > Tel: +1 (949) 253-6500
                > Fax: +1 (949) 253-6501
                > Email: [EMAIL PROTECTED]
                > <http://www.visionsolutions.com/>
                > Disclaimer - 5/30/2003
                > The contents of this e-mail (and any attachments) are
confidential, may be
                > privileged, and may contain copyright material of Vision
Solutions, Inc.
                or
                > third parties. You may only reproduce or distribute the
material if you
                are
                > expressly authorized by Vision Solutions to do so. If you
are not the
                > intended recipient, any use, disclosure or copying of this
e-mail (and any
                > attachments) is unauthorized. If you have received this
e-mail in error,
                > please immediately delete it and any copies of it from
your system and
                > notify us via e-mail at [EMAIL PROTECTED]
                >
                >
                >
---------------------------------------------------------------------
                > To unsubscribe, e-mail: [EMAIL PROTECTED]
                > For additional commands, e-mail:
[EMAIL PROTECTED]
                >
                >
                >
---------------------------------------------------------------------
                > To unsubscribe, e-mail: [EMAIL PROTECTED]
                > For additional commands, e-mail:
[EMAIL PROTECTED]
                >
                >
---------------------------------------------------------------------
                > To unsubscribe, e-mail: [EMAIL PROTECTED]
                > For additional commands, e-mail:
[EMAIL PROTECTED]
                >
                >
               
        
---------------------------------------------------------------------
                To unsubscribe, e-mail: [EMAIL PROTECTED]
                For additional commands, e-mail: [EMAIL PROTECTED]
               
               
        
        


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to