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 {