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;