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/05/26 02:23:57 UTC
svn commit: r409519 - in
/incubator/cayenne/main/trunk/cayenne/cayenne-java/src/cayenne/java/org/objectstyle/cayenne:
access/DataRowUtils.java map/EntityDescriptor.java
property/BaseClassDescriptor.java property/Property.java
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;
/**