My Q4 comment may be based more upon my usage of Cayenne 2 than 3. I know there is some weak reference stuff in 3 that I haven't looked into yet and perhaps it will automatically clean things up now (which would be wonderful). I've always taken the approach of evicting things I no longer wanted so I could control my memory footprint better. Maybe Andrus/Andrey/etc will chime in with better info here if I am incorrect on this one.
mrg On Thu, Apr 8, 2010 at 5:49 PM, Joe Baldwin <[email protected]> wrote: > Hi Michael, > > Thank you for your methodical answers. > > RE Q3 > I suspected that this might be one of my problems, and I am trying to > redesign so that I only filter & order small result lists. > > RE Q4 > Oops! OK, this one totally threw me. Given my understanding of the > behavior and usage of the DataContext is somewhere between "wow" to "hmmm, I > didn't know that", Perhaps I need to review a primer. :) > > But seriously: > Since I am deploying a web-app, my understanding is that in that type of > scenario the container (via the Tomcat CayenneFilter) is instantiating and > controlling the DataContext (and I am, presumably now accessing it via > BaseContext.getThreadObjectContext();) However, beyond that piece of > understanding, I am not sure what to do with it in order to manage objects. > > I read your docs once more and it says that the DataContext uses "weak > references to store registered objects". I *thought* this meant that > (assuming I use the default configuration), that the DataContext would allow > the DataObjects to be garbage collected, if there is no reference (Java > Reference) and if I did not implement query caching. > > I am confused by reading you Q4 comment and then the "Memory Management > Strategy" documentation. > > (Note: I am attempting to learn more about Cayenne so that I can optimize > (and re-factor) my code. I am still uncertain whether I should be > implementing caching, not implementing caching, initiating garbage collection > (after freeing objects), or just sitting back and letting Cayenne DataContext > handle it.) > > Thanks, > Joe > > > > > On Apr 8, 2010, at 5:18 PM, Michael Gentry wrote: > >> Hi Joe, >> >> Assuming 2000 products fetched with a paginated query and a page size >> of 50, I believe the answers are ... >> >> Q1: 2000 hollow objects are created. Cayenne fetches the primary >> keys of the objects first in a paginated query. >> >> Q2: Whichever page (or pages) you access in the paginated list will >> fault those objects for that page (grouped by 50 at a time) into >> memory. >> >> Q3: If you try to filter or sort in-memory, then it will have to fetch >> all of the objects. Might be better to re-issue a query to the DB. >> >> Q4: If your list pointers go out-of-scope, but the DataContext is >> still in-scope, then the objects will still be in the DataContext >> until you evict them. >> >> mrg >> >> >> On Thu, Apr 8, 2010 at 4:24 PM, Joe Baldwin <[email protected]> wrote: >>> Andrus, >>> >>> In this same context, I have a question about what behavior I should expect >>> to see. >>> >>> Let us assume for this scenario: >>> 1. a web deployment with Tomcat, typical webstore pattern >>> 2. 2000-5000 products with an attribute "name" >>> 3. custom search engine built on top of cayenne >>> a. mostly standard configuration >>> b. set PageSize to 50 >>> c. using (presumably) default caching >>> d. custom factory class method used to create a select query >>> 4. a user searches for "guitar" substring in the name field >>> >>> Questions: >>> 1. Based on my tests, it appears that "hollow" objects are created but no >>> faults are fired. (true?) >>> 2. If I display any product data for a subset less than PageSize, then only >>> <PageSize> number of objects are faulted (true ?) >>> 3. If I execute "filterObjects" or "orderList" on the resulting list, I >>> assume the fault is fired for all objects in the list. (true ?) >>> 4. What normally happens to these objects if my list pointers go out of >>> scope? (Are they GarbageCollected per Java rules?) >>> >>> (Note: I have not been able to get much visibility in understanding (3) & >>> (4), but I think my tests show that 1 & 2 are correct.) >>> Joe >>> >>> >>> >>> >>> On Apr 8, 2010, at 12:42 PM, Andrus Adamchik wrote: >>> >>>> BTW, we started on some monitoring hooks inside Cayenne runtime in 3.0 per >>>> http://issues.apache.org/jira/browse/CAY-1173 , however then it was >>>> decided that it'll work much better with the 3.1 DI-based stack. So this >>>> is waiting for its time. >>>> >>>> Andrus >>>> >>>> >>>> On Apr 7, 2010, at 6:16 PM, Joe Baldwin wrote: >>>> >>>>> I am attempting to do more performance monitoring (with an eye towards >>>>> optimizing my design & use of DataObject lists and lifetime). >>>>> >>>>> The first thing I would like to do is monitor how many DataObjects are >>>>> created and which JSP session they belong. >>>>> >>>>> My idea was to simply create a constructor for the DataObject of interest >>>>> and place monitoring hooks inside. I would assume that I could also >>>>> create a finalize method to do similar things. >>>>> >>>>> Is this the best way to create custom monitoring using Cayenne >>>>> DataObjects or is there a better way? >>>>> >>>>> (BTW, even after reading the docs, I am still somewhat mystified by how >>>>> my configuration specifications control the life cycle and performance. >>>>> So I am hoping these custom hooks will make my design decisions more >>>>> visible, especially with multiple users.) >>>>> >>>>> Thanks, >>>>> Joe >>>>> >>>>> >>>> >>> >>> > >
