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:04:59 EDT