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 2006/10/07 22:47:40 UTC

svn commit: r454016 - in /incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src: cayenne/java/org/apache/cayenne/ cayenne/java/org/apache/cayenne/access/ tests/java/org/apache/cayenne/access/

Author: aadamchik
Date: Sat Oct  7 13:47:39 2006
New Revision: 454016

URL: http://svn.apache.org/viewvc?view=rev&rev=454016
Log:
applying patches for CAY-565, CAY-652 and CAY-653 to 2.0 branch

Modified:
    incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/CayenneContext.java
    incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/DataContext.java
    incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/DataDomainQueryAction.java
    incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/DataRowStore.java
    incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/ObjectResolver.java
    incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/tests/java/org/apache/cayenne/access/DataContextSerializationTst.java

Modified: incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/CayenneContext.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/CayenneContext.java?view=diff&rev=454016&r1=454015&r2=454016
==============================================================================
--- incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/CayenneContext.java (original)
+++ incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/CayenneContext.java Sat Oct  7 13:47:39 2006
@@ -432,9 +432,11 @@
 
         Persistent object = (Persistent) descriptor.createObject();
 
-        object.setPersistenceState(PersistenceState.NEW);
-        object.setObjectContext(this);
+        // must follow this exact order of property initialization per CAY-653, i.e. have
+        // the id and the context in place BEFORE setPersistence is called
         object.setObjectId(id);
+        object.setObjectContext(this);
+        object.setPersistenceState(PersistenceState.NEW);
 
         descriptor.injectValueHolders(object);
         graphManager.registerNode(object.getObjectId(), object);

Modified: incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/DataContext.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/DataContext.java?view=diff&rev=454016&r1=454015&r2=454016
==============================================================================
--- incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/DataContext.java (original)
+++ incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/DataContext.java Sat Oct  7 13:47:39 2006
@@ -382,6 +382,7 @@
      * @since 1.2
      */
     public DataChannel getChannel() {
+        awakeFromDeserialization();
         return channel;
     }
 

Modified: incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/DataDomainQueryAction.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/DataDomainQueryAction.java?view=diff&rev=454016&r1=454015&r2=454016
==============================================================================
--- incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/DataDomainQueryAction.java (original)
+++ incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/DataDomainQueryAction.java Sat Oct  7 13:47:39 2006
@@ -134,22 +134,6 @@
                 if (oidQuery.isFetchAllowed()) {
 
                     runQueryInTransaction();
-
-                    List result = response.firstList();
-                    if (result != null && !result.isEmpty()) {
-
-                        if (result.size() > 1) {
-                            throw new CayenneRuntimeException(
-                                    "More than 1 row found for ObjectId "
-                                            + oidQuery.getObjectId()
-                                            + ". Fetch matched "
-                                            + result.size()
-                                            + " rows.");
-                        }
-
-                        // cache for future use
-                        cache.snapshots.put(oidQuery.getObjectId(), result.get(0));
-                    }
                 }
                 else {
                     response = new ListResponse();

Modified: incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/DataRowStore.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/DataRowStore.java?view=diff&rev=454016&r1=454015&r2=454016
==============================================================================
--- incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/DataRowStore.java (original)
+++ incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/DataRowStore.java Sat Oct  7 13:47:39 2006
@@ -233,53 +233,55 @@
         Map modified = null;
         Object eventPostedBy = null;
 
-        for (int i = 0; i < size; i++) {
-            Persistent object = (Persistent) objects.get(i);
-
-            // skip HOLLOW objects as they likely were created from partial snapshots
-            if (object.getPersistenceState() == PersistenceState.HOLLOW) {
-                continue;
-            }
+        synchronized (this) {
+            for (int i = 0; i < size; i++) {
+                Persistent object = (Persistent) objects.get(i);
+
+                // skip HOLLOW objects as they likely were created from partial snapshots
+                if (object.getPersistenceState() == PersistenceState.HOLLOW) {
+                    continue;
+                }
 
-            ObjectId oid = object.getObjectId();
+                ObjectId oid = object.getObjectId();
 
-            // add snapshots if refresh is forced, or if a snapshot is
-            // missing
+                // add snapshots if refresh is forced, or if a snapshot is
+                // missing
 
-            DataRow cachedSnapshot = (DataRow) this.snapshots.get(oid);
-            if (refresh || cachedSnapshot == null) {
+                DataRow cachedSnapshot = (DataRow) this.snapshots.get(oid);
+                if (refresh || cachedSnapshot == null) {
 
-                DataRow newSnapshot = (DataRow) snapshots.get(i);
-
-                if (cachedSnapshot != null) {
-                    // use old snapshot if no changes occurred
-                    if (object instanceof DataObject
-                            && cachedSnapshot.equals(newSnapshot)) {
-                        ((DataObject) object).setSnapshotVersion(cachedSnapshot
-                                .getVersion());
-                        continue;
+                    DataRow newSnapshot = (DataRow) snapshots.get(i);
+
+                    if (cachedSnapshot != null) {
+                        // use old snapshot if no changes occurred
+                        if (object instanceof DataObject
+                                && cachedSnapshot.equals(newSnapshot)) {
+                            ((DataObject) object).setSnapshotVersion(cachedSnapshot
+                                    .getVersion());
+                            continue;
+                        }
+                        else {
+                            newSnapshot.setReplacesVersion(cachedSnapshot.getVersion());
+                        }
                     }
-                    else {
-                        newSnapshot.setReplacesVersion(cachedSnapshot.getVersion());
+
+                    if (modified == null) {
+                        modified = new HashMap();
+                        eventPostedBy = object.getObjectContext().getGraphManager();
                     }
-                }
 
-                if (modified == null) {
-                    modified = new HashMap();
-                    eventPostedBy = object.getObjectContext().getGraphManager();
+                    modified.put(oid, newSnapshot);
                 }
-
-                modified.put(oid, newSnapshot);
             }
-        }
 
-        if (modified != null) {
-            processSnapshotChanges(
-                    eventPostedBy,
-                    modified,
-                    Collections.EMPTY_LIST,
-                    Collections.EMPTY_LIST,
-                    Collections.EMPTY_LIST);
+            if (modified != null) {
+                processSnapshotChanges(
+                        eventPostedBy,
+                        modified,
+                        Collections.EMPTY_LIST,
+                        Collections.EMPTY_LIST,
+                        Collections.EMPTY_LIST);
+            }
         }
     }
 
@@ -412,14 +414,14 @@
     /**
      * Registers a list of snapshots with internal cache, using a String key.
      */
-    public void cacheSnapshots(String key, List snapshots) {
+    public synchronized void cacheSnapshots(String key, List snapshots) {
         snapshotLists.put(key, snapshots);
     }
 
     /**
      * Returns a list of previously cached snapshots.
      */
-    public List getCachedSnapshots(String key) {
+    public synchronized List getCachedSnapshots(String key) {
         if (key == null) {
             return null;
         }

Modified: incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/ObjectResolver.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/ObjectResolver.java?view=diff&rev=454016&r1=454015&r2=454016
==============================================================================
--- incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/ObjectResolver.java (original)
+++ incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/cayenne/java/org/apache/cayenne/access/ObjectResolver.java Sat Oct  7 13:47:39 2006
@@ -94,9 +94,7 @@
      */
     List synchronizedObjectsFromDataRows(List rows) {
         synchronized (context.getObjectStore()) {
-            synchronized (context.getObjectStore().getDataRowCache()) {
-                return objectsFromDataRows(rows);
-            }
+            return objectsFromDataRows(rows);
         }
     }
 

Modified: incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/tests/java/org/apache/cayenne/access/DataContextSerializationTst.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/tests/java/org/apache/cayenne/access/DataContextSerializationTst.java?view=diff&rev=454016&r1=454015&r2=454016
==============================================================================
--- incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/tests/java/org/apache/cayenne/access/DataContextSerializationTst.java (original)
+++ incubator/cayenne/main/branches/STABLE-2.0/cayenne/cayenne-java/src/tests/java/org/apache/cayenne/access/DataContextSerializationTst.java Sat Oct  7 13:47:39 2006
@@ -36,6 +36,10 @@
 
     private static Logger logObj = Logger.getLogger(DataContextSerializationTst.class);
 
+    protected void setUp() throws Exception {
+        fixSharedConfiguration();
+    }
+
     protected void fixSharedConfiguration() {
         // for context to deserialize properly,
         // Configuration singleton must have the right default domain
@@ -49,7 +53,6 @@
     }
 
     public void testSerializeResolver() throws Exception {
-        fixSharedConfiguration();
 
         DataContext context = createDataContextWithSharedCache();
 
@@ -60,8 +63,18 @@
         assertSame(context.getEntityResolver(), deserializedContext.getEntityResolver());
     }
 
+    public void testSerializeChannel() throws Exception {
+
+        DataContext context = createDataContextWithSharedCache();
+
+        DataContext deserializedContext = (DataContext) Util
+                .cloneViaSerialization(context);
+
+        assertNotNull(deserializedContext.getChannel());
+        assertSame(context.getChannel(), deserializedContext.getChannel());
+    }
+
     public void testSerializeWithSharedCache() throws Exception {
-        fixSharedConfiguration();
 
         DataContext context = createDataContextWithSharedCache();
 
@@ -84,7 +97,6 @@
     }
 
     public void testSerializeWithLocalCache() throws Exception {
-        fixSharedConfiguration();
 
         DataContext context = createDataContextWithLocalCache();
 
@@ -109,7 +121,6 @@
     }
 
     public void testSerializeNew() throws Exception {
-        fixSharedConfiguration();
 
         DataContext context = createDataContextWithSharedCache();
 
@@ -136,7 +147,6 @@
     }
 
     public void testSerializeCommitted() throws Exception {
-        fixSharedConfiguration();
 
         DataContext context = createDataContextWithSharedCache();
 
@@ -178,7 +188,6 @@
     }
 
     public void testSerializeModified() throws Exception {
-        fixSharedConfiguration();
 
         DataContext context = createDataContextWithSharedCache();