Thank you Andrus, I let you know If I find more specific problems in the process
----- Orjinal Mesaj -----
Kimden: Andrus Adamchik
Tarih: Thursday, April 13, 2006 14:05
Konu: Re: Object migrates between DataDomains
Kime: cayenne-use..ncubator.apache.org
> At this point to be able to help you I'd have to actually write
> a
> test app that does what you are doing, and perform some
> debugging.
> Unfortunately I can't do it right now, as this functionality is
> kind
> of a byproduct of other features (so it doesn't yet look like
> a
> Cayenne bug to me), and I have to work on other things.
>
> I guess you'll have to poke around on your own. If you find
> more
> specific problems in the process, please let us know - maybe we
> can
> fix them, but I can't investigate this right now, sorry.
>
> Andrus
>
>
> On Apr 13, 2006, at 2:37 PM, emre.yilma..tr.com.tr wrote:
>
> > Hi,
> >
> > I have some problems. I download the cayenne-1.2-dev-2006-4-
> 12.tar
> > as you said. I use the your definitions but
> targetContext.onSync
> > throws below exception when localContext.commitChanges().
> > org.objectstyle.cayenne.access.ObjectStoreGraphDif..e97cd
> > org.objectstyle.cayenne.property.PropertyAccessException:
> [v.1.2-
> > dev-2006-4-12 April 12 2006] Error reading DataObject
> property: name
> > at
> >
> org.objectstyle.cayenne.property.DataObjectAccessor.readPropertyDirect
> > ly(DataObjectAccessor.java:98)
> > at
> >
> org.objectstyle.cayenne.property.SimpleProperty.readPropertyDirectly
> > (SimpleProperty.java:110)
> > at
> org.objectstyle.cayenne.property.SimpleProperty.readProperty
> > (SimpleProperty.java:81)
> > at org.objectstyle.cayenne.access.ObjectDiff$4.visitProperty
> > (ObjectDiff.java:210)
> > at org.objectstyle.cayenne.property.SimpleProperty.visit
> > (SimpleProperty.java:94)
> > at
> >
> org.objectstyle.cayenne.property.BaseClassDescriptor.visitProperties
> > (BaseClassDescriptor.java:247)
> > at
> >
> org.objectstyle.cayenne.access.ObjectDiff.applySimplePropertyChanges
> > (ObjectDiff.java:206)
> > at org.objectstyle.cayenne.access.ObjectDiff.access$100
> > (ObjectDiff.java:28)
> > at org.objectstyle.cayenne.access.ObjectDiff$2.apply
> > (ObjectDiff.java:105)
> > at org.objectstyle.cayenne.graph.CompoundDiff.apply
> > (CompoundDiff.java:133)
> > at org.objectstyle.cayenne.access.ObjectStoreGraphDiff.apply
> > (ObjectStoreGraphDiff.java:151)
> > at org.objectstyle.cayenne.access.DataContext.onContextFlush
> > (DataContext.java:1171)
> > at org.objectstyle.cayenne.access.DataContext.onSync
> > (DataContext.java:1148)
> > at tr.com.htr.hgys.db.base.DataListener.graphFlushed
> > (DataListener.java:66)
> > at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
> > at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
> > at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
> > at java.lang.reflect.Method.invoke(Unknown Source)
> > at org.objectstyle.cayenne.util.Invocation.fire(Invocation.java:240)
> > at org.objectstyle.cayenne.event.EventManager$Dispatch.fire
> > (EventManager.java:433)
> > at org.objectstyle.cayenne.event.DispatchQueue.dispatchEvent
> > (DispatchQueue.java:182)
> > at org.objectstyle.cayenne.event.DispatchQueue.dispatchEvent
> > (DispatchQueue.java:94)
> > at org.objectstyle.cayenne.event.EventManager.dispatchEvent
> > (EventManager.java:372)
> > at org.objectstyle.cayenne.event.EventManager.postEvent
> > (EventManager.java:343)
> > at
> >
> org.objectstyle.cayenne.access.DataContext.fireDataChannelCommitted
> > (DataContext.java:1616)
> > at org.objectstyle.cayenne.access.DataContext.flushToParent
> > (DataContext.java:1225)
> > at org.objectstyle.cayenne.access.DataContext.commitChanges
> > (DataContext.java:1121)
> > at tr.com.htr.hgys.db.base.DbObject.commitChanges(DbObject.java:246)
> > at tr.com.htr.hgys.db.Title.setTitle(Title.java:101)
> >
> >
> > ----- Orjinal Mesaj -----
> > Kimden: Andrus Adamchik
> > Tarih: Wednesday, April 12, 2006 13:23
> > Konu: Re: Object migrates between DataDomains
> > Kime: cayenne-use..ncubator.apache.org
> >
> >>
> >> On Apr 12, 2006, at 12:33 PM, emre.yilma..tr.com.tr wrote:
> >>
> >>> For update:???
> >>> ClassDescriptor descriptor =
> >>>
> >> localContext.getEntityResolver().getClassDescriptor(obj.getClass
> >>> ().getSimpleName());
> >>> System.err.println(new
> >> DeepMergeOperation(ctx).merge(obj,
> >>> descriptor));
> >>> ctx.commitChanges();
> >>
> >> Ok, so you have something akin to a replication mechanism. Let's
> >> try
> >> putting the new 1.2 DataChannel API to work. This is an
> >> unforeseen
> >> use of such API, but looks like it might work and actually allow
> >> you
> >> to synchronize all changes of the entire context at once
> >> (instead of
> >> object by object). I have no time right now to test a fully
> >> working
> >> example (and the API is new so there is no docs yet), but let
> >> me
> >> outline the possible approach.
> >>
> >> * Get the latest Cayenne nightly build (it fixes some
> >> DataChannel
> >> event bugs).
> >>
> >> * On commit DataContext (which is itself a DataChannel)
> >> broadcasts
> >> two GraphEvents - one that contains committed context changes
> >> and
> >> another one with generated PK (all changes are represented
> >> as
> >> GraphDiff instances). See 'DataContext.flushToParent(..)' for
> >> details
> >> on how the events are sent.
> >>
> >> * You can register your own listener for the *source*
> >> DataContext
> >> (look at DataContext.setChannel(..) on how to register a
> >> listener)
> >> and apply the first group of changes to the *target* DataContext
> >> via
> >> DataContext.onSync(..):
> >>
> >> GraphEvent e;
> >>
> >> // first type of event
> >> if(e.getSource() == sourceContext && e.getPostedBy() ==
> >> sourceContext) {
> >> targetContext.onSync(sourceContext,
> >> e.getDiff(),
> >> DataChannel.FLUSH_NOCASCADE_SYNC);
> >> }
> >>
> >> * Applying PK changes is less trivial, as onSync won't
> >> work...
> >> Probably you'll have to repost this event on behalf of
> >> targetContext's channel so that target context catches it and
> >> updates
> >> itself accordingly.
> >>
> >> // second type of event with PKs
> >> else if(e.getSource() == sourceContext && e.getPostedBy()
> >> ==
> >> sourceContext.getChannel()) {
> >> ???
> >> }
> >>
> >>
> >> Andrus
>
>
>
This archive was generated by hypermail 2.0.0 : Thu Apr 13 2006 - 07:53:36 EDT