cayenne-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Andrus Adamchik <and...@objectstyle.org>
Subject Re: deleteObject() and localObject() and object states
Date Mon, 29 Jan 2007 14:48:01 GMT
Hi Marcin,

Just got some time to try it out. I am seeing somewhat different  
(still incorrect) behavior (is this because of the difference in  
Cayenne version?). I need to investigate this some more, so I opened  
this bug report:

http://issues.apache.org/cayenne/browse/CAY-742

Andrus


On Jan 25, 2007, at 6:37 AM, Marcin Skladaniec wrote:

> Hello.
> I just wanted to share my recent findings about deleteObject() and  
> localObject() in remote cayenne
>
> (assuming that there is only one apple in the db)
>
> Apple apple1 = (Apple)context1.performQuery(Apple.class).get(0);
> Apple apple2 = (Apple)context2.performQuery(Apple.class).get(0);
>
> context1.deleteObject(apple1);
> now:
> context1.getGraphManager().registeredNodes() is empty
> context2.getGraphManager().registeredNodes() is also empty which is  
> great, but
>
> apple2.getObjectContext() returns context2, and that is confusing...
>
> How come that the context lost reference to the object, but object  
> had not lost the reference to the context ? Is that a bug or some  
> limitation ?


> also the apple2.getPersistenceState() is commited. I'm not clear at  
> all if that is difficult to change.
>
> this all leads to yet another problem, where
> context3.localObject(apple2) gives a hollow object with some fields  
> filled, but the object cannot be faulted. (A nice  
> FaultFailureException is thrown, but it is sometimes too late.)
> I'm overriding localObject behaviour in my application, but it  
> would be nice if cayenne dealt with it.
>
> My idea is to have two localObject methods:
> - new localObject() could take Persistent as a parameter, this will  
> allow to check if the incoming object has a context and in what  
> persistent state is it:
> 	* if getObjectContext() == null and getPersistentState() == NEW  
> than the object can be copied/inserted to the context
> 	* if getObjectContext() != null and getPersistentState() =  
> COMMITTED or MODIFIED than the object can be copied/inserted to the  
> context
> 	* else it cannot proceed, and some exception is thrown
> - old localObject() could be more restrictive and throw Exception  
> instead of returning a HOLLOW object.
>
> Oh, and javadocs for localObject are a bit out of date: " (...)  
> *all* objects in the source *list* must be(...)"
>
> With regards
> Marcin
>


Mime
View raw message