Hi Andrus,
                 That has worked nicely, thanks a mill for all your help

On Fri, Sep 2, 2011 at 7:02 PM, Andrus Adamchik <and...@objectstyle.org>wrote:

> Another way to refresh an object, including the content of its
> relationships (but not the contents of the related objects) is this:
>
> context.invalidateObjects(Collections.singleton(myObject));
>
> This may be more in line of what you are trying to do.
>
> Andrus
>
> On Sep 2, 2011, at 1:59 PM, Andrus Adamchik wrote:
>
> > In general a Cayenne user may be dealing with an object graph that can
> potentially start at 1 entity and then span the entire DB (prefetches can be
> multi-step). So Cayenne can't guess for you which relationships need to be
> refreshed, without potentially incurring a gigantic query.
> >
> > So it is still your responsibility as a user to tell it how much or how
> little to prefetch. And you can do something dynamic. E.g. if you decide
> that all the relationships you care about are only 1 level deep, you can
> find an ObjEntity and iterate through all relationships to add prefetches:
> >
> > SelectQuery q =
> > ObjEntity entity =
> context.getEntityResolver().lookupObjEntity(MyClass.class);
> > for(Relationship r : entity.getRelationships) {
> >   q.addPrefetch(r.getName());
> > }
> >
> > Andrus
> >
> >
> > On Sep 2, 2011, at 1:51 PM, Anthony Brew wrote:
> >
> >> Hi Andrus,
> >>              Yeah thats the most viable solution I have found so far,
> but
> >> tbh but from a code point of view here I think its a risky option as it
> >> could introduce bugs, it not all changing properties are added to the
> >> prefetch.
> >>
> >> query.addPrefetch(Item.SUB_ITEMS_PROPERTY);
> >>
> >> Would be nice to have a way when the NO_CACHE item is specified to make
> sure
> >> linked objects are pulled fresh also.
> >>
> >> Thanks a million for all your help.
> >> Anthony
> >>
> >> On Fri, Sep 2, 2011 at 6:04 PM, Andrus Adamchik <and...@objectstyle.org
> >wrote:
> >>
> >>> To refresh a relationship, you may use a prefetch on the query:
> >>>
> >>>
> >>>
> >>>
> >>> Andrus
> >>>
> >>>
> >>> On Sep 2, 2011, at 12:51 PM, Joseph Senecal wrote:
> >>>
> >>>> I think the generated code for the getter() should always return the
> >>> existing list because that is the whole point of an ORM, to manage an
> object
> >>> graph in memory.
> >>>>
> >>>> But it should be easy to override that getter() method in the
> generated
> >>> subclass to always do an uncached query.
> >>>>
> >>>> Joe
> >>>>
> >>>> On Sep 2, 2011, at 9:45 AM, Mike Kienenberger wrote:
> >>>>
> >>>>> There may be a better way, but one obvious way this could be done is
> to
> >>>>> change the code generation so that the getter() executes a select
> query
> >>>>> rather than returning an existing list.
> >>>>>
> >>>>> On Fri, Sep 2, 2011 at 11:28 AM, Anthony Brew <
> anthony.b...@swrve.com
> >>>> wrote:
> >>>>>
> >>>>>> Hi,
> >>>>>> Just an update, and I think I forgot to include something important
> >>>>>> Its a one to many relationship that I am seeing cached, (ie I fetch
> >>> "Item"
> >>>>>> and the many to one "Item.getSubItems()" are being fetched from the
> >>> cache)
> >>>>>>
> >>>>>> My code now looks a bit like:
> >>>>>>
> >>>>>>    Expression e1 = Expression.fromString("id = $id");
> >>>>>>    Map params = new HashMap();
> >>>>>>    params.put("id", item.getId());
> >>>>>>
> >>>>>>    SelectQuery query = new SelectQuery(Item.class,
> >>>>>> e1.expWithParameters(params));
> >>>>>>    query.setCacheStrategy(QueryCacheStrategy.NO_CACHE);
> >>>>>>
> >>>>>>    List items = context.performQuery(query);
> >>>>>>    if(items.size() != 1){
> >>>>>>        throw new RuntimeException("");
> >>>>>>    }
> >>>>>>    freshitem = (Item) items.get(0);
> >>>>>>
> >>>>>>    subitems = freshitem.getSubItems()
> >>>>>>
> >>>>>> Where subitems are stale.
> >>>>>>
> >>>>>> I am sure I am making this more complicated than needs be. As I
> >>> mentioned
> >>>>>> before I would like to turn on some flag to essentially always read
> >>> from DB
> >>>>>> when I do items.getSubItems() if possible, or when I reload the Item
> >>> when
> >>>>>> its getter methods are called to make it always read from the DB the
> >>> first
> >>>>>> time when QueryCacheStrategy.NO_CACHE is specified...
> >>>>>>
> >>>>>> Thanks a Million,
> >>>>>> Anthony
> >>>>>>
> >>>>>>
> >>>>>> On Fri, Sep 2, 2011 at 3:54 PM, Mike Kienenberger <
> mkien...@gmail.com
> >>>>>>> wrote:
> >>>>>>
> >>>>>>> You may want to review these two threads from the end of July:
> >>>>>>>
> >>>>>>> OSCache is gone
> >>>>>>> http://www.mail-archive.com/dev@cayenne.apache.org/msg06209.html
> >>>>>>>
> >>>>>>> EhCache integration preview
> >>>>>>> http://www.mail-archive.com/user@cayenne.apache.org/msg06211.html
> >>>>>>>
> >>>>>>>
> >>>>>>> On Fri, Sep 2, 2011 at 10:30 AM, Anthony Brew <
> anthony.b...@swrve.com
> >>>>>>>> wrote:
> >>>>>>>
> >>>>>>>> Hi Andrus,
> >>>>>>>>           I was just about to get back to you on, I accidentally
> >>>>>>>> started two threads when I joined the mailing list.
> >>>>>>>>
> >>>>>>>> Essentially we have a ruby on rails project that creates config on
> >>> the
> >>>>>>>> front
> >>>>>>>> end, this is the part that is changing externally. Then internally
> we
> >>>>>>> read
> >>>>>>>> these config and do a bunch of processing and write the results to
> a
> >>>>>>>> separate set of tables. The tables are in turn read by the R on R
> app
> >>>>>> but
> >>>>>>>> never written to
> >>>>>>>>
> >>>>>>>> so
> >>>>>>>> Tables      Set A                   |     Set B
> >>>>>>>>
> >>>>>>
> >>>
> ------------------------------------------------------------------------
> >>>>>>>> Rails       read and write         |     read only
> >>>>>>>> Java        read only               |     read and write
> >>>>>>>>
> >>>>>>>> The issues I am facing are with set A changing in the app.
> >>>>>>>>
> >>>>>>>> I have tried forcing the Item to reload by doing this, (I cut code
> >>> from
> >>>>>>>> Cayennes:     DataObjectUtils.objectForPK(threadDataContext,
> >>>>>> Item.class,
> >>>>>>>> dirtyItem.getId());)
> >>>>>>>>
> >>>>>>>> private Item getItemWithNoCayenneCache(Item newGame, DataContext
> >>>>>>>> threadDataContext) {
> >>>>>>>>    ObjectId gameIdentifier = buildId(threadDataContext,
> Game.class,
> >>>>>>>> newGame.getId());
> >>>>>>>>
> >>>>>>>>    return (Item) DataObjectUtils.objectForQuery(threadDataContext,
> >>>>>>> new
> >>>>>>>> ObjectIdQuery(
> >>>>>>>>            gameIdentifier,
> >>>>>>>>            false,
> >>>>>>>>            ObjectIdQuery.CACHE_REFRESH));
> >>>>>>>> }
> >>>>>>>> }
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> stepping into *DataObjectUtils.objectForQuery stepping into the
> >>> Cayenne
> >>>>>>>> code
> >>>>>>>> I eventually get to DataContext.java*
> >>>>>>>> *
> >>>>>>>> *
> >>>>>>>> where I see the following method called
> >>>>>>>>
> >>>>>>>> *
> >>>>>>>> @Override
> >>>>>>>> @SuppressWarnings("unchecked")
> >>>>>>>> public List performQuery(Query query) {
> >>>>>>>>    query = nonNullDelegate().willPerformQuery(this, query);
> >>>>>>>>    if (query == null) {
> >>>>>>>>        return new ArrayList<Object>(1);
> >>>>>>>>    }
> >>>>>>>>
> >>>>>>>>    List result = onQuery(this, query).firstList();
> >>>>>>>>    return result != null ? result : new ArrayList<Object>(1);
> >>>>>>>> }
> >>>>>>>> *
> >>>>>>>>
> >>>>>>>> however i see that the delgate in *
> >>>>>>>> nonNullDelegate() is null and so I get back
> NoopDelegate.noopDelegate
> >>>>>>> which
> >>>>>>>> I assume is the route of my woes.
> >>>>>>>> *
> >>>>>>>> *
> >>>>>>>>
> >>>>>>>> *
> >>>>>>>> Im interested in trying the OSCache solution you proposed in my
> other
> >>>>>>>> thread, but I am a little wary the code is stale as my maven
> >>>>>> dependancies
> >>>>>>>> fail (I am actually pretty new to maven so this might be my bad).
> >>>>>>>> OSCache appears to be quite old since the OpenSymphony project
> died,
> >>>>>>> maybe
> >>>>>>>> my maven config is off, are there still active contributors?
> >>>>>>>>
> >>>>>>>> In my pom I have specified
> >>>>>>>> <dependency>
> >>>>>>>> <groupId>opensymphony</groupId>
> >>>>>>>> <artifactId>oscache</artifactId>
> >>>>>>>> <version>2.4</version>
> >>>>>>>> </dependency>
> >>>>>>>>
> >>>>>>>> however the dependancies on
> >>>>>>>>
> >>>>>>>> - javax.jms:jms:1.1
> >>>>>>>>
> >>>>>>>> Thanks a Million
> >>>>>>>> Anthony
> >>>>>>>>
> >>>>>>>>
> >>>>>>>> On Fri, Sep 2, 2011 at 2:34 PM, Andrus Adamchik <
> >>>>>> and...@objectstyle.org
> >>>>>>>>> wrote:
> >>>>>>>>
> >>>>>>>>> Could you please explain your data access patterns?
> >>>>>>>>>
> >>>>>>>>> E.g. if you fetch some objects and store them in an instance
> >>> variable
> >>>>>>> in
> >>>>>>>>> your application, they are not going to get refreshed
> automatically.
> >>>>>> To
> >>>>>>>>> refresh objects you need to either invalidate them explicitly via
> >>>>>>>>> context.invalidateObjects() or run a query. All the cache
> settings
> >>>>>> are
> >>>>>>>>> essentially about optimizing query execution (refresh data, but
> only
> >>>>>> as
> >>>>>>>>> often as needed).
> >>>>>>>>>
> >>>>>>>>> Andrus
> >>>>>>>>>
> >>>>>>>>> On Sep 2, 2011, at 9:28 AM, Anthony Brew wrote:
> >>>>>>>>>
> >>>>>>>>>> Hi Gary,
> >>>>>>>>>>        Yeah thats what I am seeing in the code, but I cant for
> >>>>>>> the
> >>>>>>>>> life
> >>>>>>>>>> of me see how to turn off the caching completely in the
> modeller, I
> >>>>>>>>> actually
> >>>>>>>>>> think it wont hit our performance very badly to have no caching.
> >>>>>>>>>>
> >>>>>>>>>> The cache setting I see are the in the DataDomain Configuration
> >>>>>>>>>>
> >>>>>>>>>> Which has an option for a Query Cache Factory with a choice of
> two
> >>>>>>>>> classes.
> >>>>>>>>>>  - org.apache.cayenne.cache.MapQueryCacheFactory
> >>>>>>>>>>  - org.apache.cayenne.cache.OSQueryCacheFactory
> >>>>>>>>>>
> >>>>>>>>>> I selected the MapQueryCache and trie to set the size of the
> object
> >>>>>>>> cache
> >>>>>>>>> to
> >>>>>>>>>> 1 (couldn't set this to zero) as the application barfed saying
> >>>>>> caches
> >>>>>>>> had
> >>>>>>>>> to
> >>>>>>>>>> be greater than size zero.
> >>>>>>>>>>
> >>>>>>>>>> in my cayenne.xml I see the line
> >>>>>>>>>>
> >>>>>>>>>> <property name="cayenne.DataRowStore.snapshot.size" value="1"/>
> >>>>>>>>>>
> >>>>>>>>>> was added, perhaps there is some manual setting I can add to
> this
> >>>>>>> file
> >>>>>>>> to
> >>>>>>>>>> turn caching off?
> >>>>>>>>>>
> >>>>>>>>>> All the Best,
> >>>>>>>>>> Anthony
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>>
> >>>>>>>>>> On Fri, Sep 2, 2011 at 12:20 AM, Gary Jarrel <
> garyjar...@gmail.com
> >>>>>>>
> >>>>>>>>> wrote:
> >>>>>>>>>>
> >>>>>>>>>>> I'd say that would be cache related, as Cayenne is caching the
> >>>>>> data
> >>>>>>>>>>> from the database, switch the cache of in the Modeler perhaps
> and
> >>>>>>> that
> >>>>>>>>>>> should fix your problem.
> >>>>>>>>>>>
> >>>>>>>>>>> G
> >>>>>>>>>>>
> >>>>>>>>>>> On Fri, Sep 2, 2011 at 3:04 AM, Anthony Brew <
> >>>>>>> anthony.b...@swrve.com>
> >>>>>>>>>>> wrote:
> >>>>>>>>>>>> Hi,
> >>>>>>>>>>>> I have a two processes one which writes to a several database
> >>>>>>>> tables
> >>>>>>>>>>> (a
> >>>>>>>>>>>> ruby on rails application) and a java application that reads
> the
> >>>>>>>> state
> >>>>>>>>>>> these
> >>>>>>>>>>>> data base tables using Cayenne and writes to other tables.
> >>>>>>>>>>>>
> >>>>>>>>>>>> When the ruby modifies the underlying data-base I am seeing
> that
> >>>>>>>>> Cayenne
> >>>>>>>>>>> is
> >>>>>>>>>>>> not automatically picking up that the underlying data is now
> >>>>>>>>> inconsistant
> >>>>>>>>>>>> and not reloading. Is there some way I can config Cayenne to
> >>>>>>>> aggressive
> >>>>>>>>>>>> check some tables for updates while ignoring others?
> >>>>>>>>>>>>
> >>>>>>>>>>>> Thanks a Million
> >>>>>>>>>>>> Anthony Brew
> >>>>>>>>>>>>
> >>>>>>>>>>>
> >>>>>>>>>
> >>>>>>>>>
> >>>>>>>>
> >>>>>>>
> >>>>>>
> >>>>
> >>>>
> >>>
> >>>
> >
> >
>
>

Reply via email to