Thanks for all your inputs. I will be doing couple of experiments Mike and 
Kieran suggested and will post back soon with my observations/ any issues!




________________________________
From: Jean-Francois Veillette <jean_francois_veille...@yahoo.ca>
To: Kieran Kelleher <kieran_li...@mac.com>
Cc: Shravan Kumar.M <mshravan_...@yahoo.com>; WO Dev Group 
<webobjects-dev@lists.apple.com>
Sent: Thu, February 11, 2010 8:09:04 PM
Subject: Re: refresh EC after call to 
ERXEOAccessUtilities.updateRowsDescribedByQualifier()?

Le 10-02-11 à 09:17, Kieran Kelleher a écrit :

> Really, IIRC, the code:
> 
> ec.setFetchTimestamp( System.currentTimeMillis() );
> ec.refreshAllObjects();

That would take care of attributes,
but would it take care of relationships ?
what about deleted eo's ?

> Try it. If it works, great. If not, let us know ;-)

Yes please, let us know ;-)

- jfv


> On Feb 11, 2010, at 9:05 AM, Mike Schrag wrote:
> 
>> invalidateAllObjects can break other EC's that are currently editing objects 
>> because you throw away the backing snapshots from underneath them ...
>> 
>> ms
>> 
>> On Feb 11, 2010, at 8:45 AM, Jean-Francois Veillette wrote:
>> 
>>> I'm surprised no one mentionned ec.invalidateAllObjects() coupled with 
>>> refetching arrays you might have in memory (displaygroup and such for 
>>> example), as far as I understand, it's the only solution that will take 
>>> care of relationship and get rid of deleted objects (faults will still be 
>>> in memory but at least refetching relationship and arrays will avoid 
>>> pointing to them).
>>> 
>>> - jfv
>>> 
>>> Le 10-02-08 à 14:20, Mike Schrag a écrit :
>>> 
>>>> yeah, this is why i'm suspicious that we'll see a generalized Wonder 
>>>> implementation of this .... definitely some tricks we could do, like what 
>>>> you're saying -- just changing attributes that don't participate in 
>>>> relationships, inverse relationships, or restricting qualifiers could be a 
>>>> relatively easy update. changing anything that participates in a 
>>>> relationship would be sort of a pain -- you have to do that pre-fetch 
>>>> thing first and then you'd have to fake notifications afterwards. for 
>>>> delete, it's even nastier.
>>>> 
>>>> i think you take advantage of the knowledge you have of your special case 
>>>> and custom write this. it's topics like these that make me sometimes think 
>>>> the everything-is-cached approach is overkill. i'd love to see a variant 
>>>> of EOF that lets you write like a stateless framework in cases where you 
>>>> don't want all the snapshotting stuff.
>>>> 
>>>> ms
>>>> 
>>>> On Feb 8, 2010, at 2:13 PM, Anjo Krank wrote:
>>>> 
>>>>> Mostly, it depends on what you are doing. Changing, say, status=done is 
>>>>> different from owner=<people pk:1>, because the one only changes internal 
>>>>> state, the other touches relationships.
>>>>> 
>>>>> Then again, all your *other* ECs in all *other* instances won't get 
>>>>> notified anyway (unless you use the ERCNF). So your code needs to be able 
>>>>> to handle that problem anyway.
>>>>> 
>>>>> Cheers, Anjo
>>>>> 
>>>>> 
>>>>> 
>>>>> Am 08.02.2010 um 20:02 schrieb Mike Schrag:
>>>>> 
>>>>>>> Mike's precautionary measure is ticking at the top of my mind... so may 
>>>>>>> be for the time being I will just call ec.refreshAllObjects() just to 
>>>>>>> be integral, consistent, simple and more importantly let not annoy EOF 
>>>>>>> by mistake!!!
>>>>>> my precautionary tale is about using the methods you're using at all 
>>>>>> (i.e. the updateRowsDescribedByQualifier) ... you're sneaking behind EOF 
>>>>>> and basically doing direct DB operations. you're then trying to come 
>>>>>> back and expect an easy way for EOF's caches to be in-sync with your 
>>>>>> changes. the general case here is that you can't do it without tossing 
>>>>>> all your snapshots, because you have no idea if the snapshots in your 
>>>>>> cache are actually in-sync with the current state of the database when 
>>>>>> you executed your update. there's a reason EOF does what it does when 
>>>>>> you perform all of these operations, and it's because it actually needs 
>>>>>> to.
>>>>>> 
>>>>>> probably the closest-to-right way to do this is to prefetch the rows 
>>>>>> that would be updated or deleted, perform the operations, then use the 
>>>>>> GIDs to ... i guess manually do everything that EOF would have done. 
>>>>>> you're going to lose all the inverse relationship updating, and you're 
>>>>>> going to lose delete rules, etc. also, by fetching into the EC 
>>>>>> beforehand, you're basically taking the performance hit that you were 
>>>>>> probably trying to avoid in the first place by using those API's.
>>>>>> 
>>>>>> so i doubt there's a simple generalized API that will go into Wonder for 
>>>>>> this -- i'm not people would be happy with the performance profile of it.
>>>>>> 
>>>>>> ms


      
 _______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list      (Webobjects-dev@lists.apple.com)
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com

This email sent to arch...@mail-archive.com

Reply via email to