You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cayenne.apache.org by aa...@apache.org on 2007/03/09 13:38:18 UTC

svn commit: r516397 - in /cayenne/main/trunk: docs/doc/src/main/resources/ framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/ framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/

Author: aadamchik
Date: Fri Mar  9 04:38:17 2007
New Revision: 516397

URL: http://svn.apache.org/viewvc?view=rev&rev=516397
Log:
CAY-765 Programmatically overriding "use share cache" fails - 3.0 fix

Modified:
    cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java
    cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataDomainTest.java

Modified: cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt?view=diff&rev=516397&r1=516396&r2=516397
==============================================================================
--- cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt (original)
+++ cayenne/main/trunk/docs/doc/src/main/resources/RELEASE-NOTES.txt Fri Mar  9 04:38:17 2007
@@ -87,6 +87,8 @@
 CAY-751 AS400 datafields containing # in field names do not get mapped correctly
 CAY-752 Importing EOModel gives Cast Exception
 CAY-754 Local jNDI hack breaks when running with Jetty6-Maven
+CAY-764 Exception when importing an EOModel with single table inheritance
+CAY-765 Programmatically overriding "use share cache" fails
 
 API Changes
 ----------------------------------

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java?view=diff&rev=516397&r1=516396&r2=516397
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/cayenne/access/DataDomain.java Fri Mar  9 04:38:17 2007
@@ -312,7 +312,8 @@
     /**
      * Returns <code>true</code> if DataContexts produced by this DataDomain are using
      * shared DataRowStore. Returns <code>false</code> if each DataContext would work
-     * with its own DataRowStore.
+     * with its own DataRowStore. Note that this setting can be overwritten per
+     * DataContext. See {@link #createDataContext(boolean)}.
      */
     public boolean isSharedCacheEnabled() {
         return sharedCacheEnabled;
@@ -392,7 +393,7 @@
 
     /**
      * Returns snapshots cache for this DataDomain, lazily initializing it on the first
-     * call.
+     * call if 'sharedCacheEnabled' flag is true.
      */
     public synchronized DataRowStore getSharedSnapshotCache() {
         if (sharedSnapshotCache == null && sharedCacheEnabled) {
@@ -401,6 +402,21 @@
 
         return sharedSnapshotCache;
     }
+    
+    /**
+     * Returns a guaranteed non-null shared snapshot cache regardless of the
+     * 'sharedCacheEnabled' flag setting. This allows to build DataContexts that do not
+     * follow the default policy.
+     * 
+     * @since 3.0
+     */
+    synchronized DataRowStore nonNullSharedSnapshotCache() {
+        if (sharedSnapshotCache == null) {
+            this.sharedSnapshotCache = new DataRowStore(name, properties, eventManager);
+        }
+
+        return sharedSnapshotCache;
+    }
 
     /**
      * Shuts down the previous cache instance, sets cache to the new DataSowStore instance
@@ -561,7 +577,7 @@
         // for new dataRowStores use the same name for all stores
         // it makes it easier to track the event subject
         DataRowStore snapshotCache = (useSharedCache)
-                ? getSharedSnapshotCache()
+                ? nonNullSharedSnapshotCache()
                 : new DataRowStore(name, properties, eventManager);
 
         DataContext context;

Modified: cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataDomainTest.java
URL: http://svn.apache.org/viewvc/cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataDomainTest.java?view=diff&rev=516397&r1=516396&r2=516397
==============================================================================
--- cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataDomainTest.java (original)
+++ cayenne/main/trunk/framework/cayenne-jdk1.4-unpublished/src/test/java/org/apache/cayenne/access/DataDomainTest.java Fri Mar  9 04:38:17 2007
@@ -177,24 +177,32 @@
                 .getSharedSnapshotCache());
     }
 
-    public void testCreateDataContextWithLocalCache() throws Exception {
+    public void testCreateDataContextWithDedicatedCache() throws Exception {
         Map properties = new HashMap();
         properties
                 .put(DataDomain.SHARED_CACHE_ENABLED_PROPERTY, Boolean.FALSE.toString());
 
         DataDomain domain = new DataDomain("d1", properties);
         assertFalse(domain.isSharedCacheEnabled());
-
-        DataContext c2 = domain.createDataContext(true);
-        assertSame(c2.getObjectStore().getDataRowCache(), domain.getSharedSnapshotCache());
+        assertNull(domain.getSharedSnapshotCache());
 
         DataContext c3 = domain.createDataContext(false);
+        assertNotNull(c3.getObjectStore().getDataRowCache());
+        assertNull(domain.getSharedSnapshotCache());
         assertNotSame(c3.getObjectStore().getDataRowCache(), domain
                 .getSharedSnapshotCache());
 
         DataContext c1 = domain.createDataContext();
+        assertNotNull(c1.getObjectStore().getDataRowCache());
+        assertNull(domain.getSharedSnapshotCache());
         assertNotSame(c1.getObjectStore().getDataRowCache(), domain
                 .getSharedSnapshotCache());
+
+        // this should trigger shared cache creation
+        DataContext c2 = domain.createDataContext(true);
+        assertNotNull(c2.getObjectStore().getDataRowCache());
+        assertNotNull(domain.getSharedSnapshotCache());
+        assertSame(c2.getObjectStore().getDataRowCache(), domain.getSharedSnapshotCache());
 
         DataContext c4 = domain.createDataContext();
         assertNotSame(c4.getObjectStore().getDataRowCache(), c1