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