RE: Clearing query cache on commit

From: Gentry, Michael \(Contractor\) ("Gentry,)
Date: Wed Sep 14 2005 - 09:56:09 EDT

  • Next message: Gili: "Re: JForum for Cayenne now up"

    *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/
    



    This archive was generated by hypermail 2.0.0 : Wed Sep 14 2005 - 09:56:13 EDT