The only concern I have with my patch is whether sending out events will cause a problem, or whether it's even necessary to send out events when there's no shared snapshot cache. Maybe the snapshot should be cleared without sending out the events.
On Mon, Nov 4, 2013 at 10:59 AM, Mike Kienenberger <[email protected]> wrote: > The full patch looks like it would need to be something like this: > > --- > framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java > (revision 1524993) > +++ > framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java > (working copy) > @@ -272,6 +272,9 @@ > // not sending any events - peer contexts will not > get refreshed > if (domain.getSharedSnapshotCache() != null) { > domain.getSharedSnapshotCache().clear(); > + } else { > + // remove snapshots from local ObjectStore only > + context.getObjectStore().getDataRowCache().clear(); > } > context.getQueryCache().clear(); > > @@ -298,8 +301,16 @@ > Collections.EMPTY_LIST, > ids, > Collections.EMPTY_LIST); > + } else { > + // remove snapshots from local ObjectStore only > + > context.getObjectStore().getDataRowCache().processSnapshotChanges( > + context.getObjectStore(), > + Collections.EMPTY_MAP, > + Collections.EMPTY_LIST, > + ids, > + Collections.EMPTY_LIST); > } > > GenericResponse response = new GenericResponse(); > response.addUpdateCount(1); > this.response = response; > > > > On Mon, Nov 4, 2013 at 10:48 AM, Mike Kienenberger <[email protected]> wrote: >> I reran my tests, and, yes, the invalidateObjects is failing because I >> had sharedCacheEnabled set to false. (I had set it in my java code >> rather than in the model, so it took me awhile to find it.) >> >> dataDomain.setSharedCacheEnabled(false); >> >> Once I change that to true, invalidateObjects works again. >> >> The problem appears to be in DataDomainQueryAction.interceptRefreshQuery() >> >> if (domain.getSharedSnapshotCache() != null) { >> // send an event for removed snapshots >> domain.getSharedSnapshotCache().processSnapshotChanges( >> context.getObjectStore(), >> Collections.EMPTY_MAP, >> Collections.EMPTY_LIST, >> ids, >> Collections.EMPTY_LIST); >> } >> >> should have an else statement along these lines. >> >> else { >> // remove snapshots from local ObjectStore only >> >> context.getObjectStore(),getDataRowCache().processSnapshotChanges( >> context.getObjectStore(), >> Collections.EMPTY_MAP, >> Collections.EMPTY_LIST, >> ids, >> Collections.EMPTY_LIST); >> } >> >> >> On Mon, Nov 4, 2013 at 8:44 AM, Mike Kienenberger <[email protected]> wrote: >>> On Mon, Nov 4, 2013 at 8:36 AM, Andrus Adamchik <[email protected]> >>> wrote: >>>> ObjectStores listen for each other’s events. See >>>> ObjectStore.setDataRowCache(..) (BTW this is the code I want to simplify >>>> per 'Removing "use shared cache” option’ thread). >>> >>> I wonder if I had unchecked "use shared cache" when I was looking into >>> this problem. >>> >>> I haven't looked at this in a month, so I'll have to go review it >>> again. I'll try to find some time to do that today.
