You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cayenne.apache.org by John Huss <jo...@gmail.com> on 2013/09/05 20:42:56 UTC
Fwd: Child Contexts
So why not make ObjectContext extend DataChannel? BaseContext already
implements both anyway. Having to cast it is not really intuitive /
friendly.
John
---------- Forwarded message ----------
From: Andrus Adamchik <an...@objectstyle.org>
Date: Thu, Sep 5, 2013 at 11:23 AM
Subject: Re: Child Contexts
To: user@cayenne.apache.org
Here is how you create a child context in 3.2 (in 3.1 'newContext' was
called 'getContext', otherwise it is similar) :
ObjectContext context = runtime.newContext();
ObjectContext childContext = runtime.newContext((DataChannel) context);
I.e. the parent context is a channel of the child. The cast above is
possible since DataContext implements DataChannel.
Andrus
On Sep 5, 2013, at 5:04 PM, John Huss <jo...@gmail.com> wrote:
> You aren't creating the child context correctly. I don't recall the
proper
> way to do it in 3.1+
>
>
> On Thu, Sep 5, 2013 at 8:11 AM, Markus Reich <markus.reich@markusreich.at
>wrote:
>
>> ah ok, thx!
>>
>> But I still don't understand the whole thing :-(
>>
>> No the test reacts like this
>>
>> @Test
>> public void testChildContext() {
>> // create test instance
>> MiiPickingcontainer container =
>> MiiPickingcontainer.createInstance(context, "9999", "9999", "JUNIT");
>> context.commitChanges();
>>
>> Assert.assertEquals(0, context.modifiedObjects().size());
>> ObjectContext childContext = runtime.newContext(context.getChannel());
>> // move object to child context
>> container = childContext.localObject(container);
>> container.setStatusid(330);
>> Assert.assertEquals(0, context.modifiedObjects().size());
>> Assert.assertEquals(1, childContext.modifiedObjects().size());
>> // commit childcontext
>> childContext.commitChangesToParent();
>> Assert.assertEquals(0, context.modifiedObjects().size());
>> Assert.assertEquals(0, childContext.modifiedObjects().size());
>> }
>>
>> and I thought the commitChangesToParent() moves the object from child to
>> parent context? So after the commitToParent() the data is written and
>> committed to db?
>>
>> regards
>> Meex
>>
>>
>>
>> 2013/9/5 John Huss <jo...@gmail.com>
>>
>>> You have to assign the result of localObject.
>>>
>>> John
>>> On Sep 5, 2013 12:59 AM, "Markus Reich" <ma...@markusreich.at>
>>> wrote:
>>>
>>>> Hi,
>>>>
>>>> I've a question concering child contexts, when I add an object to a
>> child
>>>> context with method localObject, I thought the object is really from
>>> parent
>>>> to child context?
>>>>
>>>> But when I run the following JUnit Test, it doesn't fail, although it
>>>> should?
>>>>
>>>> @Test
>>>> public void testChildContext() {
>>>> // create test instance
>>>> MiiPickingcontainer container =
>>>> MiiPickingcontainer.createInstance(context, "9999", "9999", "JUNIT");
>>>> context.commitChanges();
>>>>
>>>> Assert.assertEquals(0, context.modifiedObjects().size());
>>>> ObjectContext childContext =
>>> runtime.newContext(context.getChannel());
>>>> // move object to child context
>>>> childContext.localObject(container);
>>>> container.setStatusid(330);
>>>> Assert.assertEquals(1, context.modifiedObjects().size());
>>>> Assert.assertEquals(0, childContext.modifiedObjects().size());
>>>> // commit childcontext
>>>> childContext.commitChangesToParent();
>>>> Assert.assertEquals(1, context.modifiedObjects().size());
>>>> Assert.assertEquals(0, childContext.modifiedObjects().size());
>>>>
>>>> // clean up
>>>> context.deleteObjects(container);
>>>> context.commitChanges();
>>>> }
>>>>
>>>> I'm using Cayenne 3.2M1
>>>>
>>>> kind regards
>>>>
>>>> Meex
>>>>
>>>
>>
>>
>>
>> --
>> *Markus Reich*
>> Moosbach 28/2
>> 6392 St. Jakob i.H.
>> www.markusreich.at / www.meeximum.at
>> markus.reich@markusreich.at
>>
Re: Child Contexts
Posted by Andrus Adamchik <an...@objectstyle.org>.
Mostly historical reasons - nesting support evolved over time and IIRC ROP version didn't have it initially. I think we can make this change now in 3.2.
Andrus
On Sep 5, 2013, at 9:42 PM, John Huss <jo...@gmail.com> wrote:
> So why not make ObjectContext extend DataChannel? BaseContext already
> implements both anyway. Having to cast it is not really intuitive /
> friendly.
>
> John
>
> ---------- Forwarded message ----------
> From: Andrus Adamchik <an...@objectstyle.org>
> Date: Thu, Sep 5, 2013 at 11:23 AM
> Subject: Re: Child Contexts
> To: user@cayenne.apache.org
>
>
> Here is how you create a child context in 3.2 (in 3.1 'newContext' was
> called 'getContext', otherwise it is similar) :
>
> ObjectContext context = runtime.newContext();
> ObjectContext childContext = runtime.newContext((DataChannel) context);
>
> I.e. the parent context is a channel of the child. The cast above is
> possible since DataContext implements DataChannel.
>
> Andrus
>
>
> On Sep 5, 2013, at 5:04 PM, John Huss <jo...@gmail.com> wrote:
>
>> You aren't creating the child context correctly. I don't recall the
> proper
>> way to do it in 3.1+
>>
>>
>> On Thu, Sep 5, 2013 at 8:11 AM, Markus Reich <markus.reich@markusreich.at
>> wrote:
>>
>>> ah ok, thx!
>>>
>>> But I still don't understand the whole thing :-(
>>>
>>> No the test reacts like this
>>>
>>> @Test
>>> public void testChildContext() {
>>> // create test instance
>>> MiiPickingcontainer container =
>>> MiiPickingcontainer.createInstance(context, "9999", "9999", "JUNIT");
>>> context.commitChanges();
>>>
>>> Assert.assertEquals(0, context.modifiedObjects().size());
>>> ObjectContext childContext = runtime.newContext(context.getChannel());
>>> // move object to child context
>>> container = childContext.localObject(container);
>>> container.setStatusid(330);
>>> Assert.assertEquals(0, context.modifiedObjects().size());
>>> Assert.assertEquals(1, childContext.modifiedObjects().size());
>>> // commit childcontext
>>> childContext.commitChangesToParent();
>>> Assert.assertEquals(0, context.modifiedObjects().size());
>>> Assert.assertEquals(0, childContext.modifiedObjects().size());
>>> }
>>>
>>> and I thought the commitChangesToParent() moves the object from child to
>>> parent context? So after the commitToParent() the data is written and
>>> committed to db?
>>>
>>> regards
>>> Meex
>>>
>>>
>>>
>>> 2013/9/5 John Huss <jo...@gmail.com>
>>>
>>>> You have to assign the result of localObject.
>>>>
>>>> John
>>>> On Sep 5, 2013 12:59 AM, "Markus Reich" <ma...@markusreich.at>
>>>> wrote:
>>>>
>>>>> Hi,
>>>>>
>>>>> I've a question concering child contexts, when I add an object to a
>>> child
>>>>> context with method localObject, I thought the object is really from
>>>> parent
>>>>> to child context?
>>>>>
>>>>> But when I run the following JUnit Test, it doesn't fail, although it
>>>>> should?
>>>>>
>>>>> @Test
>>>>> public void testChildContext() {
>>>>> // create test instance
>>>>> MiiPickingcontainer container =
>>>>> MiiPickingcontainer.createInstance(context, "9999", "9999", "JUNIT");
>>>>> context.commitChanges();
>>>>>
>>>>> Assert.assertEquals(0, context.modifiedObjects().size());
>>>>> ObjectContext childContext =
>>>> runtime.newContext(context.getChannel());
>>>>> // move object to child context
>>>>> childContext.localObject(container);
>>>>> container.setStatusid(330);
>>>>> Assert.assertEquals(1, context.modifiedObjects().size());
>>>>> Assert.assertEquals(0, childContext.modifiedObjects().size());
>>>>> // commit childcontext
>>>>> childContext.commitChangesToParent();
>>>>> Assert.assertEquals(1, context.modifiedObjects().size());
>>>>> Assert.assertEquals(0, childContext.modifiedObjects().size());
>>>>>
>>>>> // clean up
>>>>> context.deleteObjects(container);
>>>>> context.commitChanges();
>>>>> }
>>>>>
>>>>> I'm using Cayenne 3.2M1
>>>>>
>>>>> kind regards
>>>>>
>>>>> Meex
>>>>>
>>>>
>>>
>>>
>>>
>>> --
>>> *Markus Reich*
>>> Moosbach 28/2
>>> 6392 St. Jakob i.H.
>>> www.markusreich.at / www.meeximum.at
>>> markus.reich@markusreich.at
>>>