Still teetering on the top of my To Do list
On 2011-07-27, at 11:48 AM, Michael Gargano wrote:
> was there ever a resolution to this. i'm encountering this problem a lot.
>
> -mike
>
>
> On Jul 15, 2011, at 1:56 PM, Ricardo J. Parada wrote:
>
>> Try the second one I sent out... That one is simpler and easier to
>> understand.
>>
>> Thanks
>>
>>
>>
>>
>> On Jul 15, 2011, at 1:52 PM, Chuck Hill wrote:
>>
>>> I will try it later.
>>>
>>>
>>> On 2011-07-15, at 7:11 AM, Ricardo J. Parada wrote:
>>>
>>>>
>>>> I have some good news. I have a little test app with a simple Main
>>>> component that reproduces the problem in 5 easy steps.
>>>>
>>>> Who is interested in trying it out? :-) You just import into Eclipse and
>>>> follow the 5 easy steps on the Main component.
>>>>
>>>> <PageCacheTest.zip>
>>>>
>>>>
>>>>
>>>>
>>>>
>>>> On Jul 14, 2011, at 1:09 PM, Chuck Hill wrote:
>>>>
>>>>> I have, sort of, understood this code in the past. It is tricky, you
>>>>> really have to pay attention. IIRC what it has is a two level cache for
>>>>> (potentially) every page in the regular cache.
>>>>>
>>>>>
>>>>> Chuck
>>>>>
>>>>>
>>>>> On 2011-07-14, at 9:39 AM, Ricardo J. Parada wrote:
>>>>>
>>>>>>
>>>>>>
>>>>>> Oh... for reference that code in ERXAjaxSession.java looks like this:
>>>>>>
>>>>>> public void savePage(WOComponent page) {
>>>>>> ...
>>>>>>
>>>>>> // Remove the oldest entry if we're about to add a new one and that
>>>>>> would put us over the cache size ...
>>>>>> // We do a CACHE_SIZE*2 here because for every page, we have to
>>>>>> potentially store its previous contextid to prevent
>>>>>> // race conditions, so there technically can be 2x cache size many
>>>>>> pages in the cache.
>>>>>> boolean removedCacheEntry =
>>>>>> cleanPageReplacementCacheIfNecessary(pageCacheKey);
>>>>>> 208: if (!removedCacheEntry && pageReplacementCache.size() >=
>>>>>> ERXAjaxSession.MAX_PAGE_REPLACEMENT_CACHE_SIZE * 2) {
>>>>>> Iterator entryIterator = pageReplacementCache.entrySet().iterator();
>>>>>> Map.Entry oldestEntry = (Map.Entry) entryIterator.next();
>>>>>> entryIterator.remove();
>>>>>> if (logger.isDebugEnabled()) logger.debug(pageCacheKey +
>>>>>> "pageReplacementCache too large, removing oldest entry = " +
>>>>>> ((TransactionRecord)oldestEntry.getValue()).key());
>>>>>> }
>>>>>>
>>>>>> ...
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>>
>>>>>> On Jul 14, 2011, at 12:33 PM, Ricardo J. Parada wrote:
>>>>>>
>>>>>>> I don't understand the code in ERXAjaxSession.java:208-213 very well
>>>>>>> but I can see that the size of the page replacement cache referred to
>>>>>>> by that code is growing with every AJAX request until it is >= two
>>>>>>> times the size specified by er.extensions.maxPageReplacementCacheSize.
>>>>>>> From there on it removes entries from there.
>>>>>>>
>>>>>>> At this point if I close the dialog (AMD) and then click on the link on
>>>>>>> the page I get the "You backtracked too far" error.
>>>>>>>
>>>>>>> Anybody understands that code? :-)
>>>>>>>
>>>>>>> I'm gonna compare with my test Wonder app which all it has is the AMD
>>>>>>> and link on the page to test this and try to find out why I don't get
>>>>>>> the error there.
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>>
>>>>>>> On Jul 14, 2011, at 12:11 PM, Ricardo J. Parada wrote:
>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> I don't get the error if I set
>>>>>>>> er.extensions.maxPageReplacementCacheSize=50 in my Properties.dev file.
>>>>>>>>
>>>>>>>> So now I'm focusing on ERXAjaxSession.java:208-213 to see if that code
>>>>>>>> to try to figure out if that code has anything to do with the problem
>>>>>>>> I have when I reduce the cache size.
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>>
>>>>>>>> On Jul 13, 2011, at 10:36 PM, Alexis Tual wrote:
>>>>>>>>
>>>>>>>>> Hi,
>>>>>>>>>
>>>>>>>>> have you tried to raise the er.extensions.maxPageReplacementCacheSize
>>>>>>>>> (default is 30) ? It should delay the page restauration error, not
>>>>>>>>> fixing the real issue... and if you have few users and enough memory,
>>>>>>>>> it might be the cheapest way to get it done.
>>>>>>>>> Anyway, I filled a jira for this a year ago
>>>>>>>>> http://issues.objectstyle.org/jira/browse/WONDER-545 (Don't try the
>>>>>>>>> attached patch though, it's worse :))
>>>>>>>>>
>>>>>>>>> Still in Quebec, back to Poutine free area soon
>>>>>>>>>
>>>>>>>>> Alex
>>>>>>>>>
>>>>>>>>> Le 12 juil. 2011 à 19:29, Ricardo J. Parada a écrit :
>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> On Jul 12, 2011, at 5:53 PM, Chuck Hill wrote:
>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> On Jul 12, 2011, at 2:45 PM, Ricardo J. Parada wrote:
>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> On Jul 12, 2011, at 4:52 PM, Chuck Hill wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Hi Ricardo,
>>>>>>>>>>>>>
>>>>>>>>>>>>> On Jul 12, 2011, at 1:35 PM, Ricardo J. Parada wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> Does anybody have an idea what could be causing this problem?
>>>>>>>>>>>>>> The user clicks on an AjaxModalDialogOpener which opens the
>>>>>>>>>>>>>> dialog. Then the user does a whole bunch of stuff in the dialog
>>>>>>>>>>>>>> that involves many clicks
>>>>>>>>>>>>>
>>>>>>>>>>>>> Does it still happen if they don't make so many clicks?
>>>>>>>>>>>>
>>>>>>>>>>>> If they make a few clicks then it works okay.
>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>>>> then finally clicks a DONE link to close the dialog.
>>>>>>>>>>>>>
>>>>>>>>>>>>> Are all of these links and clicks Ajax actions?
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> Yes, they are clicking on links generated by AjaxSubmitButton
>>>>>>>>>>>> components to be exact. :-)
>>>>>>>>>>>
>>>>>>>>>>> And you are certain that there are no /wo/ or /wa/ requests mixed
>>>>>>>>>>> in here?
>>>>>>>>>>
>>>>>>>>>> I set this property in my Properties.dev:
>>>>>>>>>>
>>>>>>>>>> log4j.logger.er.extensions.ERXApplication.RequestHandling=DEBUG
>>>>>>>>>>
>>>>>>>>>> and then I looked at all the uri's of the requests coming in. They
>>>>>>>>>> have /ajax/ in there and when the dialog first comes up I see a few
>>>>>>>>>> /_wr_/ and I guess the browser caches those since I don't see
>>>>>>>>>> requests for those anymore on subsequent requests after the dialog
>>>>>>>>>> is displayed.
>>>>>>>>>>
>>>>>>>>>> All the requests for the "many clicks" I mentioned have /ajax/ in
>>>>>>>>>> them. I don't see any /wo/ requests mixed in.
>>>>>>>>>>
>>>>>>>>>> Also I set a breakpoint in ERXAjaxSession.java at the only place it
>>>>>>>>>> calls super.savePage() where I assume the current page would be
>>>>>>>>>> saved but I never hit the breakpoint. I would think that regular
>>>>>>>>>> component requests would be generating new context IDs and therefore
>>>>>>>>>> saving the page in the cache for those context IDs. But I don't see
>>>>>>>>>> the page getting saved. :-/
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>>>> The dialog has a closeUpdateContainerID bound with the id of an
>>>>>>>>>>>>>> ajax update container to refresh, which it does refresh upon
>>>>>>>>>>>>>> closing the dialog. But then the user clicks on a link on the
>>>>>>>>>>>>>> page that is outside the refreshed AjaxUpdateContainer and the
>>>>>>>>>>>>>> app displays the error "You backtracked too far. The
>>>>>>>>>>>>>> application backtracking limit of 30 has been exceeded."
>>>>>>>>>>>>>
>>>>>>>>>>>>> Ajax links or regular component actions links? I do what seems
>>>>>>>>>>>>> to be the same thing (except maybe the "does a whole bunch of
>>>>>>>>>>>>> stuff in the dialog") and have not had any problems.
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> They are regular component action links. The context ID for which
>>>>>>>>>>>> the page is being restored is 22.
>>>>>>>>>>>
>>>>>>>>>>> The original URL is 21?
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> Well, I just put in there a <wo:link string="test" action="$test"/>
>>>>>>>>>> and by inspecting that link after I close the ajax modal dialog and
>>>>>>>>>> the update container refreshes the href for the link is:
>>>>>>>>>>
>>>>>>>>>> http://192.168.1.9:53295/cgi-bin/WebObjects/Phynance.woa/wo/EmqPpwSYBiOiS7PPSLDXzw/8.0.0.9.1.1.13.1.5.1.2.1.1.3.51
>>>>>>>>>>
>>>>>>>>>> and clicking that generates the "You backtracked too far" error.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>>>> The key to tracking this down is to know if it is the Ajax or the
>>>>>>>>>>>>> regular page cache that is missing the component.
>>>>>>>>>>>>>
>>>>>>>>>>>>
>>>>>>>>>>>> I'm stepping through the restorePageForContextID() in
>>>>>>>>>>>> ERXAjaxSession.java but I'm not sure what to look for.
>>>>>>>>>>>
>>>>>>>>>>>
>>>>>>>>>>> Sorry, I just meant if the URL that caused the error was a /ajax/
>>>>>>>>>>> or /wo/ URL. It sounds like a /wo/ URL so that suggests to me that
>>>>>>>>>>> something in your dialog is generating /wo/ or /wa/ requests that
>>>>>>>>>>> are pushing the page out of the standard page cache.
>>>>>>>>>>
>>>>>>>>>> I did not see any /wo/ nor /wa/ requests. They are all /ajax/
>>>>>>>>>> requests.
>>>>>>>>>>
>>>>>>>>>> Maybe I'll try to create a test Wonder app with an ajax modal dialog
>>>>>>>>>> with a single ajax link in it that displays the current time when
>>>>>>>>>> clicked... Then I can click it many many times. Then close the
>>>>>>>>>> dialog and then click on a link on the page afterwards to see if I
>>>>>>>>>> can reproduce.
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>>> Chuck
>>>>>>>>>>>
>>>>>>>>>>> --
>>>>>>>>>>> Chuck Hill Senior Consultant / VP Development
>>>>>>>>>>>
>>>>>>>>>>> Come to WOWODC this July for unparalleled WO learning opportunities
>>>>>>>>>>> and real peer to peer problem solving! Network, socialize, and
>>>>>>>>>>> enjoy a great cosmopolitan city. See you there!
>>>>>>>>>>> http://www.wocommunity.org/wowodc11/
>>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> _______________________________________________
>>>>>>>>>> Do not post admin requests to the list. They will be ignored.
>>>>>>>>>> Webobjects-dev mailing list ([email protected])
>>>>>>>>>> Help/Unsubscribe/Update your Subscription:
>>>>>>>>>> http://lists.apple.com/mailman/options/webobjects-dev/alexis.tual%40gmail.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:
>>>>>>>> http://lists.apple.com/mailman/options/webobjects-dev/rparada%40mac.com
>>>>>>>>
>>>>>>>> This email sent to [email protected]
>>>>>>>
>>>>>>
>>>>>
>>>>> --
>>>>> Chuck Hill Senior Consultant / VP Development
>>>>>
>>>>> Practical WebObjects - for developers who want to increase their overall
>>>>> knowledge of WebObjects or who are trying to solve specific problems.
>>>>> http://www.global-village.net/products/practical_webobjects
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>>
>>>>
>>>
>>> --
>>> Chuck Hill Senior Consultant / VP Development
>>>
>>> Practical WebObjects - for developers who want to increase their overall
>>> knowledge of WebObjects or who are trying to solve specific problems.
>>> http://www.global-village.net/products/practical_webobjects
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>
>> _______________________________________________
>> Do not post admin requests to the list. They will be ignored.
>> Webobjects-dev mailing list ([email protected])
>> Help/Unsubscribe/Update your Subscription:
>> http://lists.apple.com/mailman/options/webobjects-dev/mgargano%40escholar.com
>>
>> This email sent to [email protected]
>>
>
>
--
Chuck Hill Senior Consultant / VP Development
Practical WebObjects - for developers who want to increase their overall
knowledge of WebObjects or who are trying to solve specific problems.
http://www.global-village.net/products/practical_webobjects
_______________________________________________
Do not post admin requests to the list. They will be ignored.
Webobjects-dev mailing list ([email protected])
Help/Unsubscribe/Update your Subscription:
http://lists.apple.com/mailman/options/webobjects-dev/archive%40mail-archive.com
This email sent to [email protected]