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/11/22 04:32:11 UTC

svn commit: r478021 - in /incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access: ObjectDiff.java ObjectStore.java

Author: aadamchik
Date: Tue Nov 21 19:32:11 2006
New Revision: 478021

URL: http://svn.apache.org/viewvc?view=rev&rev=478021
Log:
CAY-709: Leak-free ObjectContext
(redefining ObjectDiff, removing dependency on ObjectStore and eliminating object lookups)

Modified:
    incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/ObjectDiff.java
    incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/ObjectStore.java

Modified: incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/ObjectDiff.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/ObjectDiff.java?view=diff&rev=478021&r1=478020&r2=478021
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/ObjectDiff.java (original)
+++ incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/ObjectDiff.java Tue Nov 21 19:32:11 2006
@@ -50,7 +50,6 @@
  */
 class ObjectDiff extends NodeDiff {
 
-    private final ObjectStore objectStore;
     private final String entityName;
 
     private transient ClassDescriptor classDescriptor;
@@ -62,9 +61,9 @@
     private Map currentArcSnapshot;
     private Map flatIds;
 
-    Persistent object;
+    private Persistent object;
 
-    ObjectDiff(ObjectStore objectStore, final Persistent object) {
+    ObjectDiff(final Persistent object) {
 
         super(object.getObjectId());
 
@@ -72,10 +71,9 @@
         // objects and we can't allow it to deallocate dirty objects.
         this.object = object;
 
-        EntityResolver entityResolver = objectStore.getContext().getEntityResolver();
+        EntityResolver entityResolver = object.getObjectContext().getEntityResolver();
 
         this.entityName = object.getObjectId().getEntityName();
-        this.objectStore = objectStore;
         this.classDescriptor = entityResolver.getClassDescriptor(entityName);
 
         int state = object.getPersistenceState();
@@ -124,7 +122,7 @@
     ClassDescriptor getClassDescriptor() {
         // class descriptor is initiated in constructor, but is nullified on serialization
         if (classDescriptor == null) {
-            EntityResolver entityResolver = objectStore.getContext().getEntityResolver();
+            EntityResolver entityResolver = object.getObjectContext().getEntityResolver();
             this.classDescriptor = entityResolver.getClassDescriptor(entityName);
         }
 
@@ -139,9 +137,8 @@
         Object value = arcSnapshot != null ? arcSnapshot.get(propertyName) : null;
 
         if (value instanceof Fault) {
-            Persistent source = (Persistent) objectStore.getNode(nodeId);
             Persistent target = (Persistent) ((Fault) value).resolveFault(
-                    source,
+                    object,
                     propertyName);
 
             value = target != null ? target.getObjectId() : null;
@@ -195,8 +192,10 @@
             if (property instanceof CollectionProperty) {
 
                 // record flattened op changes
-                ObjEntity entity = objectStore.context.getEntityResolver().getObjEntity(
-                        entityName);
+                ObjEntity entity = object
+                        .getObjectContext()
+                        .getEntityResolver()
+                        .getObjEntity(entityName);
 
                 ObjRelationship relationship = (ObjRelationship) entity
                         .getRelationship(property.getName());
@@ -259,7 +258,6 @@
         }
 
         final boolean[] modFound = new boolean[1];
-        final Persistent object = (Persistent) objectStore.getNode(nodeId);
 
         int state = object.getPersistenceState();
         if (state == PersistenceState.NEW || state == PersistenceState.DELETED) {
@@ -328,7 +326,7 @@
     }
 
     private void applySimplePropertyChanges(final GraphChangeHandler handler) {
-        final Persistent object = (Persistent) objectStore.getNodeNoSync(nodeId);
+
         getClassDescriptor().visitProperties(new PropertyVisitor() {
 
             public boolean visitAttributeProperty(AttributeProperty property) {

Modified: incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/ObjectStore.java
URL: http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/ObjectStore.java?view=diff&rev=478021&r1=478020&r2=478021
==============================================================================
--- incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/ObjectStore.java (original)
+++ incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/ObjectStore.java Tue Nov 21 19:32:11 2006
@@ -176,7 +176,7 @@
                 }
             }
 
-            objectDiff = new ObjectDiff(this, object);
+            objectDiff = new ObjectDiff(object);
             objectDiff.setDiffId(++currentDiffId);
             changes.put(nodeId, objectDiff);
         }