Hi Kevin,
I was able to reproduce it based on your earlier note that you turned
off caching. No shared cache was the cause of the error, so instead
of refreshing I added a check for NULL cache. Additionally following
your hint that this code is meaningless for new objects anyways, I
added a check for temporary ObjectId. This seems to fix it for me. I
am ready to commit it - let me know what you think?
Andrus
Index: framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/
cayenne/access/DataDomainQueryAction.java
===================================================================
--- framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/
cayenne/access/DataDomainQueryAction.java (revision 560823)
+++ framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/
cayenne/access/DataDomainQueryAction.java (working copy)
..-168,10 +168,10 @@
if (query instanceof ObjectIdQuery) {
ObjectIdQuery oidQuery = (ObjectIdQuery) query;
-
DataRow row = null;
- if (!oidQuery.isFetchMandatory()) {
+ if (cache != null
+ && !oidQuery.isFetchMandatory()) {
row = cache.getCachedSnapshot(oidQuery.getObjectId());
}
..-214,8 +214,11 @@
return !DONE;
}
+ if(cache == null) {
+ return !DONE;
+ }
+
DataRow sourceRow = cache.getCachedSnapshot
(relationshipQuery.getObjectId());
-
if (sourceRow == null) {
return !DONE;
}
Index: framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/
cayenne/map/AshwoodEntitySorter.java
===================================================================
--- framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/
cayenne/map/AshwoodEntitySorter.java (revision 560823)
+++ framework/cayenne-jdk1.4-unpublished/src/main/java/org/apache/
cayenne/map/AshwoodEntitySorter.java (working copy)
..-302,16 +302,22 @@
// find committed snapshot - so we can't fetch from the
context as it will return
// dirty snapshot; must go down the stack instead
+
+ // how do we handle this for NEW objects correctly? For now
bail from the method
+ if (object.getObjectId().isTemporary()) {
+ return null;
+ }
+
ObjectIdQuery query = new ObjectIdQuery(
object.getObjectId(),
true,
ObjectIdQuery.CACHE);
QueryResponse response = context.getChannel().onQuery(null,
query);
List result = response.firstList();
- if(result == null || result.size() == 0) {
+ if (result == null || result.size() == 0) {
return null;
}
-
+
DataRow snapshot = (DataRow) result.get(0);
ObjectId id = snapshot.createTargetObjectId
(targetEntityName, finalRel);
On Aug 9, 2007, at 6:17 PM, Kevin Menard wrote:
>
> On Aug 9, 2007, at 3:02 AM, Andrus Adamchik wrote:
>
>> Kevin,
>>
>> If you don't mind waiting a few more days, let me play with it
>> during the weekend. A test case would help.
>>
>> Andrus
>
> That's fine. I patched my local version as a "works for me"
> solution, but didn't want to commit it until I was sure it was
> correct. I'll try to get together the test case.
>
> --
> Kevin
>
This archive was generated by hypermail 2.0.0 : Sat Aug 11 2007 - 20:20:37 EDT