Author: aadamchik
Date: Fri May 26 14:06:18 2006
New Revision: 409749

URL: http://svn.apache.org/viewvc?rev=409749&view=rev
Log:
CAY-525 - speeding up diff creation and processing by caching ClassDescriptor

Modified:
    
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/ObjectDiff.java

Modified: 
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/ObjectDiff.java
URL: 
http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/ObjectDiff.java?rev=409749&r1=409748&r2=409749&view=diff
==============================================================================
--- 
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/ObjectDiff.java
 (original)
+++ 
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/ObjectDiff.java
 Fri May 26 14:06:18 2006
@@ -14,6 +14,7 @@
 import org.objectstyle.cayenne.graph.GraphChangeHandler;
 import org.objectstyle.cayenne.graph.GraphDiff;
 import org.objectstyle.cayenne.graph.NodeDiff;
+import org.objectstyle.cayenne.map.EntityResolver;
 import org.objectstyle.cayenne.map.ObjEntity;
 import org.objectstyle.cayenne.map.ObjRelationship;
 import org.objectstyle.cayenne.property.ClassDescriptor;
@@ -30,6 +31,10 @@
 class ObjectDiff extends NodeDiff {
 
     private final ObjectStore objectStore;
+    private final String entityName;
+
+    private transient ClassDescriptor classDescriptor;
+
     private Collection otherDiffs;
 
     private Map snapshot;
@@ -41,7 +46,11 @@
 
         super(object.getObjectId());
 
+        EntityResolver entityResolver = 
objectStore.getContext().getEntityResolver();
+
+        this.entityName = object.getObjectId().getEntityName();
         this.objectStore = objectStore;
+        this.classDescriptor = entityResolver.getClassDescriptor(entityName);
 
         int state = object.getPersistenceState();
 
@@ -51,14 +60,13 @@
                 || state == PersistenceState.DELETED
                 || state == PersistenceState.MODIFIED) {
 
-            ObjEntity entity = 
objectStore.getContext().getEntityResolver().getObjEntity(
-                    object.getObjectId().getEntityName());
+            ObjEntity entity = entityResolver.getObjEntity(entityName);
             final boolean lock = entity.getLockType() == 
ObjEntity.LOCK_TYPE_OPTIMISTIC;
 
             this.snapshot = new HashMap();
             this.arcSnapshot = new HashMap();
 
-            getClassDescriptor().visitProperties(new PropertyVisitor() {
+            classDescriptor.visitProperties(new PropertyVisitor() {
 
                 public boolean visitProperty(Property property) {
                     snapshot.put(property.getName(), 
property.readProperty(object));
@@ -87,6 +95,16 @@
         }
     }
 
+    ClassDescriptor getClassDescriptor() {
+        // class descriptor is initiated in constructor, but is nullified on 
serialization
+        if (classDescriptor == null) {
+            EntityResolver entityResolver = 
objectStore.getContext().getEntityResolver();
+            this.classDescriptor = 
entityResolver.getClassDescriptor(entityName);
+        }
+
+        return classDescriptor;
+    }
+
     Object getSnapshotValue(String propertyName) {
         return snapshot != null ? snapshot.get(propertyName) : null;
     }
@@ -142,7 +160,6 @@
             Object targetId = arcDiff.getTargetNodeId();
             String arcId = arcDiff.getArcId().toString();
 
-            Persistent object = (Persistent) objectStore.getNode(nodeId);
             Property property = getClassDescriptor().getProperty(arcId);
 
             // note that some collection properties implement 
'SingleObjectArcProperty',
@@ -153,7 +170,7 @@
 
                 // record flattened op changes
                 ObjEntity entity = 
objectStore.context.getEntityResolver().getObjEntity(
-                        object.getObjectId().getEntityName());
+                        entityName);
 
                 ObjRelationship relationship = (ObjRelationship) entity
                         .getRelationship(property.getName());
@@ -337,11 +354,6 @@
         }
 
         arcSnapshot.put(propertyName, object != null ? object.getObjectId() : 
null);
-    }
-
-    ClassDescriptor getClassDescriptor() {
-        return objectStore.context.getEntityResolver().getClassDescriptor(
-                ((ObjectId) nodeId).getEntityName());
     }
 
     static final class ArcOperation extends NodeDiff {


Reply via email to