You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by dk...@apache.org on 2011/08/23 17:01:46 UTC
svn commit: r1160731 - in
/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src:
main/java/org/apache/cayenne/ main/java/org/apache/cayenne/access/
main/java/org/apache/cayenne/configuration/rop/client/
main/java/org/apache/cayenne/configuration...
Author: dkazimirchyk
Date: Tue Aug 23 15:01:46 2011
New Revision: 1160731
URL: http://svn.apache.org/viewvc?rev=1160731&view=rev
Log:
CAY-1537 Implement ObjectContext local caches as NestedQueryCache over the shared cache
implemented context's queryCaches as NestedQueryCaches over the singleton QueryCache injected from DI-container
Added:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/cache/QueryCacheTest.java
Modified:
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/BaseContext.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/rop/client/CayenneContextFactory.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/rop/client/ClientModule.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataContextFactory.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/BaseContextTest.java
cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/configuration/server/DataDomainProviderTest.java
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/BaseContext.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/BaseContext.java?rev=1160731&r1=1160730&r2=1160731&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/BaseContext.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/BaseContext.java Tue Aug 23 15:01:46 2011
@@ -24,10 +24,10 @@ import java.util.HashMap;
import java.util.List;
import java.util.Map;
+import org.apache.cayenne.cache.NestedQueryCache;
import org.apache.cayenne.cache.QueryCache;
import org.apache.cayenne.configuration.CayenneRuntime;
import org.apache.cayenne.di.Injector;
-import org.apache.cayenne.di.Key;
import org.apache.cayenne.event.EventManager;
import org.apache.cayenne.exp.ValueInjector;
import org.apache.cayenne.graph.CompoundDiff;
@@ -154,9 +154,8 @@ public abstract class BaseContext implem
protected void attachToRuntime(Injector injector) {
attachToChannel(injector.getInstance(DataChannel.class));
- setQueryCache(injector.getInstance(Key.get(
- QueryCache.class,
- QUERY_CACHE_INJECTION_KEY)));
+ setQueryCache(
+ new NestedQueryCache(injector.getInstance(QueryCache.class)));
}
/**
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java?rev=1160731&r1=1160730&r2=1160731&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java Tue Aug 23 15:01:46 2011
@@ -98,6 +98,7 @@ public class DataDomain implements Query
protected DataRowStore sharedSnapshotCache;
protected TransactionDelegate transactionDelegate;
protected String name;
+ protected QueryCache queryCache;
// these are initialized from properties...
protected boolean sharedCacheEnabled;
@@ -114,12 +115,6 @@ public class DataDomain implements Query
*/
protected EntitySorter entitySorter;
- /**
- * @since 3.1
- */
- @Inject
- protected QueryCache queryCache;
-
protected boolean stopped;
/**
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/rop/client/CayenneContextFactory.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/rop/client/CayenneContextFactory.java?rev=1160731&r1=1160730&r2=1160731&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/rop/client/CayenneContextFactory.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/rop/client/CayenneContextFactory.java Tue Aug 23 15:01:46 2011
@@ -18,16 +18,15 @@
****************************************************************/
package org.apache.cayenne.configuration.rop.client;
-import org.apache.cayenne.BaseContext;
import org.apache.cayenne.CayenneContext;
import org.apache.cayenne.DataChannel;
import org.apache.cayenne.ObjectContext;
+import org.apache.cayenne.cache.NestedQueryCache;
import org.apache.cayenne.cache.QueryCache;
import org.apache.cayenne.configuration.ObjectContextFactory;
import org.apache.cayenne.configuration.RuntimeProperties;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.di.Injector;
-import org.apache.cayenne.di.Key;
public class CayenneContextFactory implements ObjectContextFactory {
@@ -36,6 +35,9 @@ public class CayenneContextFactory imple
@Inject
protected RuntimeProperties properties;
+
+ @Inject
+ protected QueryCache queryCache;
@Inject
protected Injector injector;
@@ -54,9 +56,7 @@ public class CayenneContextFactory imple
false);
CayenneContext context = new CayenneContext(parent, changeEvents, lifecycleEvents);
- context.setQueryCache(injector.getInstance(Key.get(
- QueryCache.class,
- BaseContext.QUERY_CACHE_INJECTION_KEY)));
+ context.setQueryCache(new NestedQueryCache(queryCache));
return context;
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/rop/client/ClientModule.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/rop/client/ClientModule.java?rev=1160731&r1=1160730&r2=1160731&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/rop/client/ClientModule.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/rop/client/ClientModule.java Tue Aug 23 15:01:46 2011
@@ -73,6 +73,7 @@ public class ClientModule implements Mod
binder.bind(EventManager.class).to(DefaultEventManager.class);
binder.bind(RuntimeProperties.class).to(DefaultRuntimeProperties.class);
binder.bind(DataChannel.class).toProvider(ClientChannelProvider.class);
+ binder.bind(QueryCache.class).toProvider(MapQueryCacheProvider.class);
binder
.bind(Key.get(QueryCache.class, BaseContext.QUERY_CACHE_INJECTION_KEY))
.toProvider(MapQueryCacheProvider.class)
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataContextFactory.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataContextFactory.java?rev=1160731&r1=1160730&r2=1160731&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataContextFactory.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataContextFactory.java Tue Aug 23 15:01:46 2011
@@ -18,19 +18,18 @@
****************************************************************/
package org.apache.cayenne.configuration.server;
-import org.apache.cayenne.BaseContext;
import org.apache.cayenne.DataChannel;
import org.apache.cayenne.ObjectContext;
import org.apache.cayenne.access.DataContext;
import org.apache.cayenne.access.DataDomain;
import org.apache.cayenne.access.DataRowStore;
import org.apache.cayenne.access.ObjectStore;
+import org.apache.cayenne.cache.NestedQueryCache;
import org.apache.cayenne.cache.QueryCache;
import org.apache.cayenne.configuration.ObjectContextFactory;
import org.apache.cayenne.configuration.ObjectStoreFactory;
import org.apache.cayenne.di.Inject;
import org.apache.cayenne.di.Injector;
-import org.apache.cayenne.di.Key;
import org.apache.cayenne.event.EventManager;
/**
@@ -49,6 +48,9 @@ public class DataContextFactory implemen
@Inject
protected ObjectStoreFactory objectStoreFactory;
+
+ @Inject
+ protected QueryCache queryCache;
public ObjectContext createContext() {
return createdFromDataDomain(dataDomain);
@@ -81,9 +83,7 @@ public class DataContextFactory implemen
DataContext context = new DataContext(
parent, objectStoreFactory.createObjectStore(snapshotCache));
context.setValidatingObjectsOnCommit(dataDomain.isValidatingObjectsOnCommit());
- context.setQueryCache(injector.getInstance(Key.get(
- QueryCache.class,
- BaseContext.QUERY_CACHE_INJECTION_KEY)));
+ context.setQueryCache(new NestedQueryCache(queryCache));
return context;
}
@@ -96,9 +96,7 @@ public class DataContextFactory implemen
context.setValidatingObjectsOnCommit(parent.isValidatingObjectsOnCommit());
context.setUsingSharedSnapshotCache(parent.isUsingSharedSnapshotCache());
- context.setQueryCache(injector.getInstance(Key.get(
- QueryCache.class,
- BaseContext.QUERY_CACHE_INJECTION_KEY)));
+ context.setQueryCache(new NestedQueryCache(queryCache));
return context;
}
@@ -114,9 +112,7 @@ public class DataContextFactory implemen
DataContext context = new DataContext(
parent, objectStoreFactory.createObjectStore(snapshotCache));
context.setValidatingObjectsOnCommit(parent.isValidatingObjectsOnCommit());
- context.setQueryCache(injector.getInstance(Key.get(
- QueryCache.class,
- BaseContext.QUERY_CACHE_INJECTION_KEY)));
+ context.setQueryCache(new NestedQueryCache(queryCache));
return context;
}
}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java?rev=1160731&r1=1160730&r2=1160731&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/main/java/org/apache/cayenne/configuration/server/DataDomainProvider.java Tue Aug 23 15:01:46 2011
@@ -29,6 +29,8 @@ import org.apache.cayenne.DataChannelFil
import org.apache.cayenne.access.DataDomain;
import org.apache.cayenne.access.DataNode;
import org.apache.cayenne.access.dbsync.SchemaUpdateStrategy;
+import org.apache.cayenne.cache.NestedQueryCache;
+import org.apache.cayenne.cache.QueryCache;
import org.apache.cayenne.configuration.AdhocObjectFactory;
import org.apache.cayenne.configuration.ConfigurationTree;
import org.apache.cayenne.configuration.DataChannelDescriptor;
@@ -99,6 +101,9 @@ public class DataDomainProvider implemen
@Inject
protected JdbcEventLogger jdbcEventLogger;
+
+ @Inject
+ protected QueryCache queryCache;
public DataDomain get() throws ConfigurationException {
@@ -176,6 +181,7 @@ public class DataDomainProvider implemen
DataChannelDescriptor descriptor = descriptorMerger.merge(descriptors);
DataDomain dataDomain = createDataDomain(descriptor.getName());
+ dataDomain.setQueryCache(new NestedQueryCache(queryCache));
dataDomain.setEntitySorter(injector.getInstance(EntitySorter.class));
dataDomain.setEventManager(injector.getInstance(EventManager.class));
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/BaseContextTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/BaseContextTest.java?rev=1160731&r1=1160730&r2=1160731&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/BaseContextTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/BaseContextTest.java Tue Aug 23 15:01:46 2011
@@ -56,6 +56,7 @@ public class BaseContextTest extends Tes
QueryCache.class,
BaseContext.QUERY_CACHE_INJECTION_KEY);
binder.bind(cacheKey).toInstance(cache);
+ binder.bind(QueryCache.class).toInstance(cache);
}
};
@@ -72,7 +73,6 @@ public class BaseContextTest extends Tes
assertTrue(context.attachToRuntimeIfNeeded());
assertSame(channel, context.channel);
- assertSame(cache, context.queryCache);
assertFalse(context.attachToRuntimeIfNeeded());
assertFalse(context.attachToRuntimeIfNeeded());
Added: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/cache/QueryCacheTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/cache/QueryCacheTest.java?rev=1160731&view=auto
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/cache/QueryCacheTest.java (added)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/cache/QueryCacheTest.java Tue Aug 23 15:01:46 2011
@@ -0,0 +1,55 @@
+/*****************************************************************
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ ****************************************************************/
+package org.apache.cayenne.cache;
+
+import java.util.List;
+
+import org.apache.cayenne.ObjectContext;
+import org.apache.cayenne.di.Inject;
+import org.apache.cayenne.query.QueryCacheStrategy;
+import org.apache.cayenne.query.SelectQuery;
+import org.apache.cayenne.testdo.testmap.Artist;
+import org.apache.cayenne.unit.di.server.ServerCase;
+import org.apache.cayenne.unit.di.server.UseServerRuntime;
+
+@UseServerRuntime(ServerCase.TESTMAP_PROJECT)
+public class QueryCacheTest extends ServerCase {
+
+ @Inject
+ private ObjectContext context1;
+
+ @Inject
+ private ObjectContext context2;
+
+ public void testLocalCache() {
+
+ Artist a = context1.newObject(Artist.class);
+ a.setArtistName("artist");
+ context1.commitChanges();
+
+ SelectQuery q = new SelectQuery(Artist.class);
+ q.setCacheStrategy(QueryCacheStrategy.LOCAL_CACHE);
+ List<Artist> result1 = context1.performQuery(q);
+ List<Artist> result2 = context2.performQuery(q);
+
+ assertNotSame(
+ result1.get(0).getObjectContext(),
+ result2.get(0).getObjectContext());
+ }
+}
Modified: cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/configuration/server/DataDomainProviderTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/configuration/server/DataDomainProviderTest.java?rev=1160731&r1=1160730&r2=1160731&view=diff
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/configuration/server/DataDomainProviderTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.5-unpublished/src/test/java/org/apache/cayenne/configuration/server/DataDomainProviderTest.java Tue Aug 23 15:01:46 2011
@@ -35,6 +35,7 @@ import org.apache.cayenne.access.dbsync.
import org.apache.cayenne.access.dbsync.SkipSchemaUpdateStrategy;
import org.apache.cayenne.access.dbsync.ThrowOnPartialOrCreateSchemaStrategy;
import org.apache.cayenne.ashwood.AshwoodEntitySorter;
+import org.apache.cayenne.cache.QueryCache;
import org.apache.cayenne.configuration.AdhocObjectFactory;
import org.apache.cayenne.configuration.ConfigurationNameMapper;
import org.apache.cayenne.configuration.ConfigurationTree;
@@ -147,6 +148,7 @@ public class DataDomainProviderTest exte
new MockDataSourceFactory());
binder.bind(AdhocObjectFactory.class).to(DefaultAdhocObjectFactory.class);
binder.bind(JdbcEventLogger.class).to(CommonsJdbcEventLogger.class);
+ binder.bind(QueryCache.class).toInstance(mock(QueryCache.class));
}
};