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().
[EMAIL PROTECTED]
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.readPropertyDirectly(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: [email protected]

> 
> On Apr 12, 2006, at 12:33 PM, [EMAIL PROTECTED] 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
> 
> 

Reply via email to