Re: Help! I need the magic no-cache recipe

From: Robert Zeigler (robert..uregumption.com)
Date: Wed Jun 18 2008 - 12:25:18 EDT

  • Next message: Elena Doyle: "RE: Configuring SSL"

    A ToManyList isn't a DataObject. It's a list of DataObjects. :)
    Just treat it like a regular list.

    Robert

    On Jun 18, 2008, at 6/1811:18 AM , Chris Gamache wrote:

    > also........ :)
    >
    > How do I deal with a ToManyList prefetch?
    >
    > I'm getting a ClassCastException trying to cast a ToManyList to a
    > DataObject.
    >
    > On Mon, Jun 16, 2008 at 10:36 AM, Chris Gamache <cgamach..mail.com>
    > wrote:
    >> For clarification:
    >>
    >> DataContext.invalidateObjects(...) What strategy would you use to
    >> invalidate everything?
    >>
    >> For .addPrefetch(String s), does s need to match the relation name in
    >> the xml files?
    >>
    >> And on a related note...
    >>
    >> What does "Max. Number of Shared Objects" actually limit, and what
    >> does the "Use Shared Cache" toggle do?
    >>
    >> If I set my "Max. Number of Shared Objects" to zero, or unchecked
    >> "Use
    >> Shared Cache" would that force Cayenne to hit the database every time
    >> a query was executed or a relation was fetched?
    >>
    >>
    >>
    >>
    >> On Tue, Jun 10, 2008 at 3:03 AM, Andrus Adamchik <andru..bjectstyle.org
    >> > wrote:
    >>> To control relationship refresh you can either use
    >>> DataContext.invalidateObjects(..) or plan a bit ahead and refresh it
    >>> together with the query that fetched the root object by using
    >>> prefetching on
    >>> that relationship. E.g.
    >>>
    >>> someQuery.addPrefetch("relatedRows");
    >>> List rows = context.performQuery(someQuery);
    >>>
    >>> Judging from your example the prefetch option should be exactly
    >>> what you
    >>> need.
    >>>
    >>> Andrus
    >>>
    >>>
    >>> On Jun 9, 2008, at 11:08 PM, Chris Gamache wrote:
    >>>>
    >>>> Using Cayenne 2.0.3 ...
    >>>>
    >>>> I'm having problems when I use an accessor to get rows from a
    >>>> related
    >>>> table. It pulls fresh data the first time I use the accessor, but
    >>>> if
    >>>> data is modified outside of the Java application, it is not
    >>>> reflected
    >>>> the next time I use the accessor in a different execution stack
    >>>> within
    >>>> the same JVM.
    >>>>
    >>>> List rowsA = context.performQuery(someQuery);
    >>>> ...
    >>>> SomeTable dataSetA = rowA.getRelatedRows();
    >>>> //object rowA and dataSetA and someQuery pass out of scope
    >>>> ...
    >>>> //Data is Modified directly on the database, not in Java
    >>>> application
    >>>> ...
    >>>> List rowsB = context.performQuery(theSameQuery);
    >>>> ...
    >>>> SomeTable expectedModifiedButGotSetA = rowB.getRelatedRows();
    >>>>
    >>>>
    >>>> The primary key which the relation uses to get the related data
    >>>> doesn't change from rowsA to rowsB. We're looking at the same
    >>>> related
    >>>> rowset, just updated data.
    >>>>
    >>>> I would like to know what is the magic no-cache recipe to force
    >>>> that
    >>>> particular accessor to always pull fresh data from the database...
    >>>>
    >>>> It appears that SelectQuery doesn't suffer from the same problem.
    >>>>
    >>>> I'm sure there's some configuration switches that I can trip, but
    >>>> there are several places caching policies can be modified and
    >>>> several
    >>>> confusingly similar yet different options to choose from.
    >>>>
    >>>
    >>>
    >>



    This archive was generated by hypermail 2.0.0 : Wed Jun 18 2008 - 12:25:57 EDT