To refresh a relationship, you may use a prefetch on the query: query.addPrefetch(Item.SUB_ITEMS_PROPERTY);
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 >>>>>>>>> >>>>>>>> >>>>>> >>>>>> >>>>> >>>> >>> > >