But ... why not simply add a flushCachedResults(query) method directly
into Cayenne's API? It's implementation will likely consist of a single
line of code and will save us a lot of work on the outside.
Gili
Cris Daniluk wrote:
> Geee.... open your mouth one time and next thing you know, you've
> volunteered for something :)
>
> The code is fairly integrated into our design, so it won't be
> meanignful for me to post it. I will try to clean it up so that it is
> standalone, and post a wiki entry.
>
> As for Gili's question, this method really does not allow you to "lazy
> load" the objects. I'd be inclined to think that the performance gains
> you might expect from lazy loading are fictitious. However, I have no
> desire to hear you tell me why not, so I won't go down that road :)
> I'll just say, if you want to lazy load, you should probably look at
> writing your own manager to access your named queries. You can pass in
> a DataContext and pull out the named query. The Context can then
> decide whether or not to set refresh=true on a "one time only" basis,
> based on the monitor that I will provide to the wiki when I get a
> chance.
>
> Cris
>
> On 9/14/05, Gentry, Michael (Contractor) <michael_gentr..anniemae.com> wrote:
>
>>*sniff* *sniff*
>>
>>Smells like a new wiki page? :-)
>>
>>/dev/mrg
>>
>>
>>-----Original Message-----
>>From: Gili [mailto:cowwo..bs.darktech.org]
>>Sent: Wednesday, September 14, 2005 9:51 AM
>>To: cayenne-use..bjectstyle.org
>>Subject: Re: Clearing query cache on commit
>>
>>
>>
>> Yes... I'm also quite interested. It sounds exactly like what
>>I'm
>>looking for, minus having to invoking the query right away with
>>refresh=true. For performance reasons, I'd want to fault the query
>>results right away but not actually invoke it. Is this possible?
>>
>>Gili
>>
>>Eric Schneider wrote:
>>
>>>Cris,
>>>
>>>This sounds very cool. Would you mind sharing your implementation?
>>>
>>>Thanks,
>>>Eric
>>>
>>>
>>>On Sep 14, 2005, at 9:04 AM, Cris Daniluk wrote:
>>>
>>>
>>>>I just have a process that iterates cached queries and looks to see
>>
>>if
>>
>>>>the class type matches the class type of any just-committed objects.
>>>>If so, I re-execute those queries with caching disabled
>>>>(refresh=true).
>>>>
>>>>Actually, I do it in a slightly different way that avoids unnecessary
>>>>refetching, etc, but that's what you get for free. As currently
>>>>running, it never unnecessarily tosses a cached query, and never
>>>>misses a query that needs tossing.
>>>>
>>>>On 9/13/05, Gili <cowwo..bs.darktech.org> wrote:
>>>>
>>>>
>>>>> I did some more research and it seems that depending on the
>>
>>>>>cache type
>>>>>(local or shared) the cached results are either stored in
>>>>>DataRowCache.snapshotLists (for shared) or
>>
>>ObjectStore.queryResultMap
>>
>>>>>(for local).
>>>>>
>>>>> As far as I can tell, currently it is impossible to flush
>>>>>these caches
>>>>>safely (DRC.clear() always flushes another unrelated map). I'm
>>
>>looking
>>
>>>>>for a single method that will flush both the local and shared query
>>>>>result caches.
>>>>>
>>>>>Gili
>>>>>
>>>>>Gili wrote:
>>>>>
>>>>>
>>>>>>Hi,
>>>>>>
>>>>>> I need to clear the query cache on DataContext.commitChanges
>>
>>().
>>
>>>>>>The
>>>>>>only way I can see this working is if I invoke DataRowStore.clear
>>
>>()
>>
>>>>>>but
>>>>>>as Mike mentioned to me offline this sounds like an overly
>>
>>aggressive
>>
>>>>>>approach.
>>>>>>
>>>>>> Is there a finer-grained method for clearing query cache for
>>
>>all
>>
>>>>>>queries?
>>>>>>
>>>>>> My use-case is:
>>>>>>
>>>>>>1) Database is empty
>>>>>>2) ContentType.getCanonicalInstance() returns an empty set, so I
>>>>>>commit
>>>>>>a new object to the database
>>>>>>3) DataContext.commitChanges()
>>>>>>4) I invoke ContentType.getCanonicalInstance() again. This time it
>>
>>I
>>
>>>>>>expect it to return the instance I commited to the DB in step 3,
>>>>>>but it
>>>>>>returns the cached result (empty set).
>>>>>>5) DataContext.commitChanges()
>>>>>>6) Database complains of unique constraint violation
>>>>>>
>>>>>> Currently I invoke
>>>>>>"context.invalidateObjects(context.getObjectStore().getObjects ())"
>>
>>>>>>after
>>>>>>each commitChanges(). I'd want to do something equivilent for the
>>>>>>query
>>>>>>cache.
>>>>>>
>>>>>>Thanks,
>>>>>>Gili
>>>>>>
>>>>>
>>>>>--
>>>>>http://www.desktopbeautifier.com/
>>>>>
>>>>
>>>
>>--
>>http://www.desktopbeautifier.com/
>>
>
>
-- http://www.desktopbeautifier.com/
This archive was generated by hypermail 2.0.0 : Wed Sep 14 2005 - 10:14:29 EDT