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

Reply via email to