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