Jon,

just picking up on one of your questions below, as Patrick has provided answers to 
everything else.

Werner

On Thu, 6 May 2004 17:22:43 +0100, Patrick van Kann wrote:

>Hello Jon,
>
>Unfortunately, lazy loading can only be used in short transactions.
>
>The underlying RelationCollection holds a relationship to the transaction context in 
>which the parent object is loaded, which it calls upon to load 
objects when iterator.next is called. If you have closed the transaction that loaded 
the parent object, it can't lazily load when you call iterator.next().
>
>One strategy is to "pre-iterate" in the transaction, which could work in a situation 
>where you are providing "pages" of results from a database query. In 
other words, iterate the first 10 items in the lazy loaded collection before closing 
the transaction and returning the object.
>
>Otherwise, you need to load the object from within your JSP page/presentation tier. 
>If it is jsp, you could use the castor taglibrary to do this quite easily:
>
>http://castor-taglib.sourceforge.ne
>
>Hope this helps,
>
>Patrick
>
>
>-----Original Message-----
>From: Jon Wilmoth [mailto:[EMAIL PROTECTED]
>Sent: Thu 5/6/2004 4:59 PM
>To: [EMAIL PROTECTED]
>Subject: [castor-dev] [JDO] lazy loaded collections
> 
>
>After turning on logging on my JDBC driver, I noticed
>that a seperate query statement was issued for each
>child object in a parent child relationship (i.e.
>ProductGroup --> Product). 
>
>Query   "SELECT
>AA_PRODUCT_GROUP.PROD_GROUP_ID,AA_PRODUCT.PRODUCT_ID,AA_PRODUCT_GROUP.CATEGORY
>FROM AA_PRODUCT_GROUP LEFT OUTER JOIN AA_PRODUCT ON
>AA_PRODUCT_GROUP.PROD_GROUP_ID=AA_PRODUCT.PRODUCT_GROUP_ID"
> execution time: 0       result set fetch time:  0
>
>Followed by...
>
>Query   "SELECT
>AA_PRODUCT.NAME,AA_PRODUCT.PRODUCT_GROUP_ID FROM
>AA_PRODUCT WHERE AA_PRODUCT.PRODUCT_ID=1"     
>execution time: 70      result set fetch time:
>0
>Query   "SELECT
>AA_PRODUCT.NAME,AA_PRODUCT.PRODUCT_GROUP_ID FROM
>AA_PRODUCT WHERE AA_PRODUCT.PRODUCT_ID=2"     
>execution time: 0       result set fetch time:
>0
>Query   "SELECT
>AA_PRODUCT.NAME,AA_PRODUCT.PRODUCT_GROUP_ID FROM
>AA_PRODUCT WHERE AA_PRODUCT.PRODUCT_ID=3"     
>execution time: 70      result set fetch time:
>0
>Query   "SELECT
>AA_PRODUCT.NAME,AA_PRODUCT.PRODUCT_GROUP_ID FROM
>AA_PRODUCT WHERE AA_PRODUCT.PRODUCT_ID=4"     
>execution time: 10      result set fetch time:
>0
>
>In some instances I would want to load the children
>(i.e. a ProductGroup detail page) and other cases I
>wouldn't want to spend time loading the children (i.e.
>a ProductGroup search results page that didn't display
>any Product info).  So...my first question, is there a
>way to specify lazy loading of a field at runtime?
No, there isn't. Imho, it would be an interesting exercise to add such a feature, but 
I personally believe that the calling semantics of such a feature 
would be quite hard to specify.

>In an effort to optimize, I turned the field "lazy"
>attribute value from false to true in the ProductGroup
>mapping, which resulted in just the first sql query
>being issued...so far so good.  However, after closing
>the query via a database.close() call, and returning
>the ProductGroup object to the presentation tier, I
>got the following exception when trying to access the
>ProductGroup's Products:
>
>java.lang.RuntimeException: Transaction is closed!
>
>org.exolab.castor.persist.RelationCollection$IteratorImp.lazyLoad(RelationCollection.java:282)
>
>org.exolab.castor.persist.RelationCollection$IteratorImp.next(RelationCollection.java:266)
>
>Which leads me to my second question: How are lazy
>loaded collections properly used in a web app
>environment?  Am I supposed to leave the database
>object open until the presentation tier is done with
>the query.  Am I supposed to loop through the search
>results (effectively loading them) before returning
>them to the presentation tier?
>
>Thanks,
>Jon
>
>
>
>----------------------------------------------------------- 
>If you wish to unsubscribe from this mailing, send mail to
>[EMAIL PROTECTED] with a subject of:
>        unsubscribe castor-dev
>
>
>
>



----------------------------------------------------------- 
If you wish to unsubscribe from this mailing, send mail to
[EMAIL PROTECTED] with a subject of:
        unsubscribe castor-dev

Reply via email to