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 <johnth...@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 <and...@objectstyle.org> > Date: Thu, Sep 5, 2013 at 11:23 AM > Subject: Re: Child Contexts > To: u...@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 <johnth...@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.re...@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 <johnth...@gmail.com> >>> >>>> You have to assign the result of localObject. >>>> >>>> John >>>> On Sep 5, 2013 12:59 AM, "Markus Reich" <markus.re...@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.re...@markusreich.at >>>