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.