Author: aadamchik
Date: Fri Dec 15 13:34:28 2006
New Revision: 487677
URL: http://svn.apache.org/viewvc?view=rev&rev=487677
Log:
CAY-724: Bogus FaultFailureExceptions
(this fix seems to be working in production for me; although I still don't have
a full explanation of the initial problem)
Modified:
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java
Modified:
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java
URL:
http://svn.apache.org/viewvc/incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java?view=diff&rev=487677&r1=487676&r2=487677
==============================================================================
---
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java
(original)
+++
incubator/cayenne/main/trunk/core/cayenne-jdk1.4/src/main/java/org/apache/cayenne/access/DataDomainQueryAction.java
Fri Dec 15 13:34:28 2006
@@ -34,8 +34,8 @@
import org.apache.cayenne.ObjectId;
import org.apache.cayenne.Persistent;
import org.apache.cayenne.QueryResponse;
-import org.apache.cayenne.cache.QueryCacheEntryFactory;
import org.apache.cayenne.cache.QueryCache;
+import org.apache.cayenne.cache.QueryCacheEntryFactory;
import org.apache.cayenne.map.DataMap;
import org.apache.cayenne.map.DbRelationship;
import org.apache.cayenne.map.ObjEntity;
@@ -76,6 +76,7 @@
Map prefetchResultsByPath;
Map queriesByNode;
Map queriesByExecutedQueries;
+ boolean noObjectConversion;
/*
* A constructor for the "new" way of performing a query via 'execute' with
@@ -119,8 +120,9 @@
}
}
- // turn results to objects
- interceptObjectConversion();
+ if (!noObjectConversion) {
+ interceptObjectConversion();
+ }
return response;
}
@@ -208,25 +210,21 @@
DataRow targetRow = cache.getCachedSnapshot(targetId);
- DataRow resultRow;
-
if (targetRow != null) {
- resultRow = targetRow;
- }
- // if no inheritance involved, we can return a valid partial row
made from
- // the target Id alone...
- else if (domain.getEntityResolver().lookupInheritanceTree(
- (ObjEntity) relationship.getTargetEntity()) == null) {
-
- resultRow = new DataRow(targetId.getIdSnapshot());
+ this.response = new
GenericResponse(Collections.singletonList(targetRow));
+ return DONE;
}
- else {
- // can't guess the right target...
- return !DONE;
+ // a hack to prevent passing partial snapshots to ObjectResolver
... See
+ // CAY-724 for details.
+ else if (context != null
+ && domain.getEntityResolver().lookupInheritanceTree(
+ (ObjEntity) relationship.getTargetEntity()) ==
null) {
+
+ this.noObjectConversion = true;
+ Object object = context.localObject(targetId, null);
+ this.response = new
GenericResponse(Collections.singletonList(object));
+ return DONE;
}
-
- this.response = new
GenericResponse(Collections.singletonList(resultRow));
- return DONE;
}
return !DONE;