> IIRC that was added to catch the case where a to-many was being iterated and 
> got updated on the server.


+1 The array being iterated over has changed (on the server) either by sorting 
or by adding/removing elements from the array behind the repetition’s back. By 
default a repetition keeps track of the position of each element of the 
iterated-over array using a integer index value. If array element for index 2 
is deleted, or a new element is inserted at index 2, element for index 3 of the 
array is no longer the EO it was originally, but the repetition doesn’t know 
that and still presents it as the values of the EO that used to be at index 3. 

This is especially problematic when you are using a Batching DisplayGroup. 
Making a change in one batch that will impact the rows displayed by another 
batch will almost certainly trigger this situation.

This can cause very insidious bugs where the EOF and your rendered webpage 
disagree on which EO is in a given row, and you can end up thinking your are 
selecting/editing/etc. one EO and actually be selecting/editing/etc. a 
different one. e.g., If you are creating a relationship to the selected EO in 
the repetition, you could very easily be creating the relationship to a 
completely different EO. - “I know I registered Chuck for the ‘Master 
Developer’ course, but instead he was registered for the “Master Proposal 
Writer” course. Oh, well. I’m sure he will like that, too."

The good news is that ERXWORepetition (which is automatically substituted in 
for WORepetition by Wonder) can use a Hash of the EO instead of an integer by 
setting the Property: 

er.extensions.ERXWORepetition.checkHashCodes=true

Or by simply adding the biding:

checkHashCodes=true;

to the WORepetition.

However, this is not a universal fix, there are still issues.

The Javadoc for ERXWORepetition 
(http://jenkins.wocommunity.org/job/Wonder/lastSuccessfulBuild/javadoc/er/extensions/components/_private/ERXWORepetition.html)
 explains what you can and can’t do. 

Dave’s Best Practice™: Be very careful about adding/removing elements from a 
batching display group. Consider completely throwing away the display group and 
building it up from scratch, just to be safe.

WebObjects Best Practice:™ “Be very careful about listening to Dave. Consider 
completely throwing away his advice and getting some safer “Chuck / Tim / 
Keiran / CandadianDave / AnybodyReally advice"

Dave


On Mar 22, 2014, at 8:29 PM, Chuck Hill <[email protected]> wrote:

> IIRC that was added to catch the case where a to-many was being iterated and 
> got updated on the server.
> 
> Chuck
> 
> 
> On 2014-03-22, 1:12 PM, "Timothy Worman" wrote:
> 
> Hi Jeff:
> 
> Just stepping through the code ERXWORepetition, this warning is fired in 
> invokeAction. It looks like a check is happening to make sure that objects 
> are still in the expected position in the repetition. Is an action being 
> fired that could be removing items from the repetition list or changing the 
> order, or…..?
> 
> Tim
> 
> On Mar 21, 2014, at 10:57 PM, Jeffrey Schmitz <[email protected]> wrote:
> 
> Am seeing some of these warnings and wondering what they might indicate...
> Mar 21 20:19:12 netBrackets[2002] WARN  
> er.extensions.components._private.ERXWORepetition  - Wrong object: 243620065 
> vs 34923469 (array = (<com.netbracketsfw.model.Entry pk:"1002578">, 
> <com.netbracketsfw.model.Entry pk:"1002019">, <com.netbracketsfw.model.Entry 
> pk:"1004605">, <com.netbracketsfw.model.Entry pk:"1002637">, 
> <com.netbracketsfw.model.Entry pk:"1004919">, <com.netbracketsfw.model.Entry 
> pk:"1003173">, <com.netbracketsfw.model.Entry pk:"1001801">, 
> <com.netbracketsfw.model.Entry pk:"1002154">, <com.netbracketsfw.model.Entry 
> pk:"1003232">, <com.netbracketsfw.model.Entry pk:"1002653">, 
> <com.netbracketsfw.model.Entry pk:"1004099">, <com.netbracketsfw.model.Entry 
> pk:"1002155">, <com.netbracketsfw.model.Entry pk:"1005810">, 
> <com.netbracketsfw.model.Entry pk:"1001971">, <com.netbracketsfw.model.Entry 
> pk:"1004269">, <com.netbracketsfw.model.Entry pk:"1002476">, 
> <com.netbracketsfw.model.Entry pk:"1003582">, <com.netbracketsfw.model.Entry 
> pk:"1004728">, <com.netbracketsfw.model.Entry pk:"1001732">, 
> <com.netbracketsfw.model.Entry pk:"1003953">))
> Mar 21 20:27:48 netBrackets[2002] WARN  
> er.extensions.components._private.ERXWORepetition  - Wrong object: 569528470 
> vs 417462206 (array = (<com.netbracketsfw.model.Entry pk:"1005383">, 
> <com.netbracketsfw.model.Entry pk:"1003407">, <com.netbracketsfw.model.Entry 
> pk:"1003647">, <com.netbracketsfw.model.Entry pk:"1004120">, 
> <com.netbracketsfw.model.Entry pk:"1006124">, <com.netbracketsfw.model.Entry 
> pk:"1004773">, <com.netbracketsfw.model.Entry pk:"1001695">, 
> <com.netbracketsfw.model.Entry pk:"1006371">, <com.netbracketsfw.model.Entry 
> pk:"1002149">, <com.netbracketsfw.model.Entry pk:"1001824">))
> Mar 21 20:27:48 netBrackets[2002] WARN  
> er.extensions.components._private.ERXWORepetition  - Wrong object: 569528470 
> vs 415571783 (array = (<com.netbracketsfw.model.Entry pk:"1005383">, 
> <com.netbracketsfw.model.Entry pk:"1003407">, <com.netbracketsfw.model.Entry 
> pk:"1003647">, <com.netbracketsfw.model.Entry pk:"1004120">, 
> <com.netbracketsfw.model.Entry pk:"1006124">, <com.netbracketsfw.model.Entry 
> pk:"1004773">, <com.netbracketsfw.model.Entry pk:"1001695">, 
> <com.netbracketsfw.model.Entry pk:"1006371">, <com.netbracketsfw.model.Entry 
> pk:"1002149">, <com.netbracketsfw.model.Entry pk:"1001824">))
> Mar 21 20:27:51 netBrackets[2002] WARN  
> er.extensions.components._private.ERXWORepetition  - Wrong object: 569528470 
> vs 694846676 (array = (<com.netbracketsfw.model.Entry pk:"1005383">, 
> <com.netbracketsfw.model.Entry pk:"1003407">, <com.netbracketsfw.model.Entry 
> pk:"1003647">, <com.netbracketsfw.model.Entry pk:"1004120">, 
> <com.netbracketsfw.model.Entry pk:"1006124">, <com.netbracketsfw.model.Entry 
> pk:"1004773">, <com.netbracketsfw.model.Entry pk:"1001695">, 
> <com.netbracketsfw.model.Entry pk:"1006371">, <com.netbracketsfw.model.Entry 
> pk:"1002149">, <com.netbracketsfw.model.Entry pk:"1001824">))
> Mar 21 20:27:53 netBrackets[2002] WARN  
> er.extensions.components._private.ERXWORepetition  - Wrong object: 569528470 
> vs 87
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list      ([email protected])
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/webobjects-dev/lists%40thetimmy.com
> This email sent to [email protected]
> 
> 
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list      ([email protected])
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/webobjects-dev/chill%40global-village.net
> 
> This email sent to [email protected]
> _______________________________________________
> Do not post admin requests to the list. They will be ignored.
> Webobjects-dev mailing list      ([email protected])
> Help/Unsubscribe/Update your Subscription:
> https://lists.apple.com/mailman/options/webobjects-dev/webobjects%40avendasora.com
> 
> This email sent to [email protected]


—————————————————————————————
WebObjects - so easy that even Dave Avendasora can do it!™
—————————————————————————————
David Avendasora
Senior Software Abuser
Nekesto, Inc.





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

This email sent to [email protected]

Reply via email to