cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Anthony Brew <anthony.b...@swrve.com>
Subject Re: Data base externally modified
Date Fri, 02 Sep 2011 14:30:04 GMT
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 <andrus@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 <garyjarrel@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.brew@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
> >>>
> >>
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message