Hi, I tested it. It will not pick up the changes made in the other context. Paraphrasing:
1. create obj1 in oc1 2. create oc2, obj2 = oc2.localObject(obj1) 3. obj2.setSomething(newValue); oc2.commitChanges() 4. obj1.something() has still old value 5. obj1 = oc1.localObject(obj1), still old value 6. obj1 = oc1.localObject(obj2), still old value Only when you create a new oc3 and localObject() in that, you will see the changed value. Btw, I have this set: binder.bindMap(Constants.PROPERTIES_MAP).put(Constants.SERVER_CONTEXTS_SYNC_PROPERTY, "false"); Using child contexts may be an option, but then the saves wouldn't hit the database until I commit again in the parent context, which in my case the processing routine has no business in. Maik > Am 22.02.2017 um 07:17 schrieb Andrus Adamchik <and...@objectstyle.org>: > > Since the task is to collect objects from multiple contexts in a single > resulting context, you may use this: > > context.localObject(objectFromAnotherContext) > > (I don't think anyone has mentioned "localObject" in this thread ??) > > Andrus > > >> On Feb 15, 2017, at 7:17 PM, Musall, Maik <m...@selbstdenker.ag> wrote: >> >> The use case is as follows. >> >> I have a large collection of objects which I want some function to be >> executed on. I want to use multiple threads to do this, so AFAIK I have to >> use separate ObjectContexts per thread like in EOF. So, I will then >> instantiate those objects in the per-thread contexts, do the processing, but >> then the wrapper function should return the entire collection of processed >> objects in the original context that they were in at the beginning. >> >> With EOF, I have a snapshot cache that will contain the changed attributes, >> but the EO instances in the original context have their original values. So, >> I will then call ec.faultForGlobalID() to have them refaulted from the >> snapshot cache, avoiding to refetch 100.000 objects from db. >> >> I suppose using a shared cache would make the problem obsolete, as those >> objects would receive changed attributes automatically, but I'm still on the >> fence whether or not to use a shared cache, because it's a major behavioural >> difference to EOF and I still have to think about that while migrating my >> project. >> >> Maik >> >> >>> Am 15.02.2017 um 15:49 schrieb Ken Anderson <ken.ander...@amphorainc.com>: >>> >>> Yes, use the objectID to pass around, but on the receiving end, you should >>> turn it into a fault and release it into the wild. Then, if some code >>> needs it, the fault fires, otherwise – no DB activity. >>> >>> Ken Anderson >>> CTO Amphora, Inc. >>> Mobile: +1 914 262 8540 >>> >>> >>> >>> www.amphorainc.com <http://www.amphorainc.com/> >>> >>> >>> >>> >>> On 2/15/17, 10:47 AM, "Amedeo Mantica" <amedeomant...@me.com> wrote: >>> >>> I would just use the ObjectId >>> >>>> On 15 Feb 2017, at 16:45, Hugi Thordarson <h...@karlmenn.is> wrote: >>>> >>>> It can be useful in some cases—one example is if you want to be able to >>>> pass objects around in an API without triggering a DB fetch unless they >>>> are actually used. >>>> >>>> Cheers, >>>> - hugi >>>> >>>> >>>>> On 15. feb. 2017, at 15:28, Amedeo Mantica <amedeomant...@me.com> wrote: >>>>> >>>>> no worries, but I cannot understand your goal, why do you want to get the >>>>> fault ? >>>>> >>>>>> On 15 Feb 2017, at 16:25, Hugi Thordarson <h...@karlmenn.is> wrote: >>>>>> >>>>>> Thanks Ken, but the immediate fetch performed by Cayenne.objectForPk is >>>>>> precisely what I’d like to avoid. >>>>>> >>>>>> Cheers, >>>>>> - hugi >>>>>> >>>>>> S: Amedeo, sorry about calling you “Amadeo” in my last post. I have been >>>>>> properly lambasted. >>>>>> >>>>>> >>>>>>> On 15. feb. 2017, at 15:20, Ken Anderson <ken.ander...@amphorainc.com> >>>>>>> wrote: >>>>>>> >>>>>>> I do this: >>>>>>> >>>>>>> dataObject = (DataObject) Cayenne.objectForPK(getObjectContext(), >>>>>>> MyEntity.class, oid); >>>>>>> >>>>>>> But it will do the fetch if it’s not already in cache. >>>>>>> >>>>>>> Ken >>>>>>> >>>>>>> Ken Anderson >>>>>>> CTO Amphora, Inc. >>>>>>> Mobile: +1 914 262 8540 >>>>>>> >>>>>>> >>>>>>> >>>>>>> www.amphorainc.com <http://www.amphorainc.com/> >>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> On 2/15/17, 9:59 AM, "Hugi Thordarson" <h...@karlmenn.is> wrote: >>>>>>> >>>>>>> Thanks Amadeo, but I ended up creating a method that looks like this. >>>>>>> It would be nice to get some feedback on it, if I’m violating any >>>>>>> Cayenne Commandments. >>>>>>> >>>>>>> /** >>>>>>> * @return An existing object or fault if registered with the OC, >>>>>>> otherwise creates a new hollow object based on the given ObjectId. >>>>>>> */ >>>>>>> public static Persistent faultForObjectId( ObjectContext oc, ObjectId >>>>>>> objectId ) { >>>>>>> Persistent object = (Persistent) oc.getGraphManager().getNode( objectId >>>>>>> ); >>>>>>> >>>>>>> if( object == null ) { >>>>>>> ClassDescriptor descriptor = >>>>>>> oc.getEntityResolver().getClassDescriptor(objectId.getEntityName()); >>>>>>> >>>>>>> object = (Persistent) descriptor.createObject(); >>>>>>> >>>>>>> object.setPersistenceState(PersistenceState.HOLLOW); >>>>>>> object.setObjectContext(oc); >>>>>>> object.setObjectId(objectId); >>>>>>> >>>>>>> oc.getGraphManager().registerNode(objectId, object); >>>>>>> } >>>>>>> >>>>>>> return object; >>>>>>> } >>>>>>> >>>>>>> Cheers, >>>>>>> - hugi >>>>>>> >>>>>>> >>>>>>>> On 15. feb. 2017, at 14:41, Amedeo Mantica <amedeomant...@me.com> >>>>>>>> wrote: >>>>>>>> >>>>>>>> may be you want invalidateObject ? >>>>>>>> >>>>>>>>> On 15 Feb 2017, at 14:15, Hugi Thordarson <h...@karlmenn.is> wrote: >>>>>>>>> >>>>>>>>> Hi all, >>>>>>>>> I need to get a fault for an ObjectId from an ObjectContext. How >>>>>>>>> would I do this? >>>>>>>>> >>>>>>>>> I don’t see any public API for this—the implementation of createFault >>>>>>>>> in CayenneContext seems to get me halfway there, but it will not >>>>>>>>> return an existing fault, only create new ones. >>>>>>>>> >>>>>>>>> Cheers, >>>>>>>>> - hugi >>>>>>>> >>>>>>> >>>>>>> >>>>>>> >>>>>>> Confidentiality Notice: This e-mail and accompanying documents contain >>>>>>> confidential information intended for a specific individual and >>>>>>> purpose. This e-mailed information is private and protected by law. If >>>>>>> you are not the intended recipient, you are hereby notified that any >>>>>>> disclosure, copying, or distribution, or the taking of any action based >>>>>>> on the contents of this information, is strictly prohibited. >>>>>> >>>>> >>>> >>> >>> >>> >>> Confidentiality Notice: This e-mail and accompanying documents contain >>> confidential information intended for a specific individual and purpose. >>> This e-mailed information is private and protected by law. If you are not >>> the intended recipient, you are hereby notified that any disclosure, >>> copying, or distribution, or the taking of any action based on the contents >>> of this information, is strictly prohibited. >> >