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));
             }
         };