Hi Andrus
I'm using cayenne HEAD, built just week ago. I wonder if the fact
that you are seeing different behaviour has anything to do with fact
that my test is in "real" application, while yours is a junit test
with mockup objects ?
Marcin
On 30/01/2007, at 12:48 AM, Andrus Adamchik wrote:
> 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
>>
>
Marcin
This archive was generated by hypermail 2.0.0 : Mon Jan 29 2007 - 18:41:55 EST