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 (Webobjects-dev@lists.apple.com) >>>>>>>> Help/Unsubscribe/Update your Subscription: >>>>>>>> http://lists.apple.com/mailman/options/webobjects-dev/alexis.tual%40gmail.com >>>>>>>> >>>>>>>> This email sent to alexis.t...@gmail.com >>>>>>> >>>>>> >>>>>> _______________________________________________ >>>>>> 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/rparada%40mac.com >>>>>> >>>>>> This email sent to rpar...@mac.com >>>>> >>>> >>> >>> -- >>> 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 (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