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;


Reply via email to