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 >>