Author: aadamchik
Date: Thu May 25 17:23:56 2006
New Revision: 409519
URL: http://svn.apache.org/viewvc?rev=409519&view=rev
Log:
CAY-525 - further optimizing object creation - faster initialization of value
holders (skipoing noop SimpleProperties), lazy checking for partial snapshots
Modified:
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataRowUtils.java
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/map/EntityDescriptor.java
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/property/BaseClassDescriptor.java
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/property/Property.java
Modified:
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataRowUtils.java
URL:
http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataRowUtils.java?rev=409519&r1=409518&r2=409519&view=diff
==============================================================================
---
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataRowUtils.java
(original)
+++
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/access/DataRowUtils.java
Thu May 25 17:23:56 2006
@@ -123,14 +123,17 @@
while (it.hasNext()) {
Map.Entry entry = (Map.Entry) it.next();
- String attrName = (String) entry.getKey();
+
ObjAttribute attr = (ObjAttribute) entry.getValue();
String dbAttrPath = attr.getDbAttributePath();
- object.writePropertyDirectly(attrName,
snapshot.get(dbAttrPath));
+
+ Object value = snapshot.get(dbAttrPath);
+ object.writePropertyDirectly(attr.getName(), value);
// note that a check "snaphsot.get(..) == null" would be
incorrect in this
- // case, as NULL value is entirely valid.
- if (!snapshot.containsKey(dbAttrPath)) {
+ // case, as NULL value is entirely valid; still save a map
lookup by
+ // checking for the null value first
+ if (value == null && !snapshot.containsKey(dbAttrPath)) {
isPartialSnapshot = true;
}
}
@@ -143,7 +146,7 @@
Map.Entry e = (Map.Entry) it.next();
ObjRelationship rel = (ObjRelationship) e.getValue();
-
+
if (rel.isToMany()) {
// "to many" relationships have no information to collect
from
Modified:
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/map/EntityDescriptor.java
URL:
http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/map/EntityDescriptor.java?rev=409519&r1=409518&r2=409519&view=diff
==============================================================================
---
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/map/EntityDescriptor.java
(original)
+++
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/map/EntityDescriptor.java
Thu May 25 17:23:56 2006
@@ -152,8 +152,16 @@
// init property descriptors...
Map allDescriptors = new HashMap();
- compileAttributes(allDescriptors);
+
compileRelationships(resolver, allDescriptors);
+
+ // before we compile attributes, extract all relationship descriptors
to a
+ // separate value holder map
+ if(!allDescriptors.isEmpty()) {
+ this.valueHolderProperties = new HashMap(allDescriptors);
+ }
+
+ compileAttributes(allDescriptors);
this.declaredProperties = allDescriptors;
Modified:
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/property/BaseClassDescriptor.java
URL:
http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/property/BaseClassDescriptor.java?rev=409519&r1=409518&r2=409519&view=diff
==============================================================================
---
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/property/BaseClassDescriptor.java
(original)
+++
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/property/BaseClassDescriptor.java
Thu May 25 17:23:56 2006
@@ -80,6 +80,7 @@
// compiled properties ...
protected Class objectClass;
protected Map declaredProperties;
+ protected Map valueHolderProperties;
protected Map subclassDescriptors;
protected PropertyAccessor persistenceStateProperty;
@@ -210,10 +211,12 @@
getSuperclassDescriptor().injectValueHolders(object);
}
- Iterator it = declaredProperties.values().iterator();
- while (it.hasNext()) {
- Property property = (Property) it.next();
- property.injectValueHolder(object);
+ if (valueHolderProperties != null) {
+ Iterator it = valueHolderProperties.values().iterator();
+ while (it.hasNext()) {
+ Property property = (Property) it.next();
+ property.injectValueHolder(object);
+ }
}
}
Modified:
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/property/Property.java
URL:
http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/property/Property.java?rev=409519&r1=409518&r2=409519&view=diff
==============================================================================
---
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/property/Property.java
(original)
+++
incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne/property/Property.java
Thu May 25 17:23:56 2006
@@ -83,6 +83,9 @@
* unfaulted value holder and inject it into the object, if an object
doesn't have it
* set yet.
*/
+ // TODO: andrus 5/25/2006 - maybe move this to ArcProperty as simple
properties do not
+ // support ValueHolders and ClassDescriptors are smart enough to avoid
calling this
+ // method on non-arc property.
void injectValueHolder(Object object) throws PropertyAccessException;
/**