On Sat, Mar 20, 2010 at 7:19 PM, Nikita Tovstoles
<nikita.tovsto...@gmail.com> wrote:
> I may have found something - but first another question: under which
> conditions would an ajax wicket:interface request omit a 'version'? (I see
> request processor then assumes that the version is 0).

correct, the first version of the page (version 0) will not have the
version appended to the url

> I may have found a race condition:
>
>   - check out 
> this<http://www.sears.com/shc/s/nb_10153_12605_NB_EnergyStar+Program+Information?adCell=W4>page
> - observe that it has 2 iframes: a map on the left and a rebate search
>   form on the right. both are served up from our servers (likely the same box)
>   - tabbing out of the zipCode field issues a validation Ajax request; the
>   submit button is actually a SubmitLink (i.e. also uses JS wicket:interface).
>   - The StateProgramDetailsPage page mentioned in the exceptions is what
>   you see when you click on a particular US state on the map - say NY
>
>
>   - It's possible that the form on the right is the source of
>   wicket:interface requests causing the exceptions
>
> When a version-less wicket:interface request arrives (say, on tab-out from
> zip code field) eventually SecondLevelCacheSessionStore.get(id, version)
> gets called wherein we can fall through to a if-branch that picks *the last
> page rendered*. I realize that id is generated atomically, so in theory the
> following code should be safe, but it is curious that getLastPage() is
> called 3 times (instead of being called once to init a local variable). So
> I'd imagine it's possible that the map of the left sometimes gets rendered
> later (say *after if (getLastPage() != null && getLastPage().getNumericId()
> == id) is evaluated) and thus subsequent "pages.put(id, page);" then stores
> the 'map' page with the 'form' page's id. No?*
>
> String sessionId = getSession().getId();
> if (sessionId != null)
> {
> if (getLastPage() != null && getLastPage().getNumericId() == id)
> {
> page = versionNumber != -1 ? getLastPage().getVersion(versionNumber)
> : getLastPage();
> if (page != null)
> {
> // ask the page store if it is ready saving the page.
> getStore().pageAccessed(sessionId, page);
> pages.put(id, page);
> return page;
> }
> }
>
> setLastPage(null);
> page = getStore().getPage(sessionId, getName(), id, versionNumber, -1);
> pages.put(id, page);
> return page;
>
> }

you have to be careful with ajax. in wicket page versioning works by
keeping Undo objects, that means reverting versions is a one way
operation.

so for example lets say you are on page version 5 and it is rendered
you have two links: one ajax and one standard. you click the ajax link
which causes the page version to be incremented. so now on server the
page version is 6, but the url for the originally rendered link still
has 5 in its url because the ajax request that increased the page
version did not repaint the original link. wicket tries very hard to
avoid situations like these by having ajax version, etc, but in some
cases it is still possible to revert the page to an earlier version by
mistake. maybe this is what is happening in your app.

-igor

>
> On Sat, Mar 20, 2010 at 3:53 PM, Nikita Tovstoles <
> nikita.tovsto...@gmail.com> wrote:
>
>> OK, here's what I can surmise thus far:
>>
>>    - Only 'wicket:interface' JS requests - from 'onchange' Ajax validator
>>    or from a SubmitLink-initiated form submission trigger the exception
>>    - the form being submitted or validated is in a couple of pages but *never
>>    *in *StateProgramDetailsPage*
>>    - the exceptions thrown only cites *StateProgramDetailsPage*
>>    - pages are mounted using HybridURLCodingStrategy and have a common
>>    (concrete) super class
>>    - in all wicket:interface requests resulting in the exception: pageId =
>>    0; 'version' is always empty (thus wicket defaults to 0)
>>
>> So, in summary, *sometimes* form component Ajax validation or non-Ajax
>> form submission wicket:interface POST requests results in retrieval of the
>> incorrect page - StateProgramDetailsPage - from PageMap. Consequently, the
>> exceptions are thrown. I would appreciate any general thoughts, but also
>> answers to these questions (to help us understand what goes on under the
>> hood):
>>
>>    - What logs should we enable to see why an ajax wicket:interface from
>>    one page resolves to another page?
>>    - Does Wicket Ever manually write out JSESSIONID? In 'wicket:interface'
>>    requests specifically? or is that left up to the servlet container?
>>    - What is PageMap's scope - one per HttpSession?
>>    - What's 'urlDepth'?
>>    - What's the lifecycle of a IRequestCycleProcessor
>>    and IRequestCodingStrategy? Is newXXX called only once per app?
>>    - If we wanted to rule out DiskPageStore by installing an in-memory
>>    page store instead how can we do so? Implement own IPageStore?
>>
>> *
>>
>>
>> *
>>
>> *Request 1*
>> *
>>
>> 10.242.46.21 - - [20/Mar/2010:17:41:09 -0400] "POST 
>> /?wicket:interface=:0:EmbeddedCategoryCriteriaPanel:inputPanel:categorySearchForm:submitLink::IActivePageBehaviorListener:0:10&wicket:ignoreIfNotActive=true&random=0.04114457813227995
>>  HTTP/1.1" 200 161 
>> "http://rebatefinder.ecorebates.com/embedded/form/category/style/vertical/siteId/sears/adCell/W4/layout/vertical.0;jsessionid=9F0B9124A90DB552A38D2F8E6476F814";
>>  "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; GTB6.4; 
>> .NET CLR 1.1.4322)"
>>
>> Exception 1
>>
>> Caused by: org.apache.wicket.WicketRuntimeException: component 
>> EmbeddedCategoryCriteriaPanel:inputPanel:categorySearchForm:submitLink not 
>> found on page com.castanealabs.gui.interactivemap.StateProgramDetailsPage[id 
>> = 0], listener interface = [RequestListenerInterface 
>> name=IActivePageBehaviorListener, method=public abstract void 
>> org.apache.wicket.behavior.IBehaviorListener.onRequest()]
>>       at 
>> org.apache.wicket.request.AbstractRequestCycleProcessor.resolveListenerInterfaceTarget(AbstractRequestCycleProcessor.java:426)
>>       at 
>> org.apache.wicket.request.AbstractRequestCycleProcessor.resolveRenderedPage(AbstractRequestCycleProcessor.java:471)
>>
>> Request 2
>>
>> 10.242.46.21 - - [20/Mar/2010:17:39:07 -0400] "POST 
>> /?wicket:interface=:0:EmbeddedCategoryCriteriaPanel:inputPanel:categorySearchForm:zipCodeComponent:zipCode::IBehaviorListener:1:10&random=0.46530282930252486
>>  HTTP/1.1" 200 161 
>> "http://rebatefinder.ecorebates.com/embedded/form/category/style/vertical/siteId/sears/adCell/W4/layout/vertical.0;jsessionid=C767AD19F2AD165C8F4F7F00C337D385";
>>  "Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 6.0; Trident/4.0; SLCC1; 
>> .NET CLR 2.0.50727; .NET CLR 3.5.30729; .NET CLR 3.0.30729; msn 
>> OptimizedIE8;ENUS)"
>>
>> Exception 2
>>
>> *
>>
>>
>> Caused by: org.apache.wicket.WicketRuntimeException: component 
>> EmbeddedCategoryCriteriaPanel:inputPanel:categorySearchForm:zipCodeComponent:zipCode
>>  not found on page 
>> com.castanealabs.gui.interactivemap.StateProgramDetailsPage[id = 0], 
>> listener interface = [RequestListenerInterface name=IBehaviorListener, 
>> method=public abstract void 
>> org.apache.wicket.behavior.IBehaviorListener.onRequest()]
>>       at 
>> org.apache.wicket.request.AbstractRequestCycleProcessor.resolveListenerInterfaceTarget(AbstractRequestCycleProcessor.
>> java:426)
>>       at 
>> org.apache.wicket.request.AbstractRequestCycleProcessor.resolveRenderedPage(AbstractRequestCycleProcessor.java:471)
>>       at 
>> org.apache.wicket.protocol.http.WebRequestCycleProcessor.resolve(WebRequestCycleProcessor.java:144)
>>       ... 21 more
>>
>> On Sat, Mar 20, 2010 at 1:30 PM, Igor Vaynberg 
>> <igor.vaynb...@gmail.com>wrote:
>>
>>> i doubt its the diskstore since you are the only one seeing this problem.
>>>
>>> is this happening on multiple pages or just a particular one?
>>>
>>> -igor
>>>
>>> On Sat, Mar 20, 2010 at 10:34 AM, Nikita Tovstoles
>>> <nikita.tovsto...@gmail.com> wrote:
>>> > I wonder if this is a serialization problem:
>>> >
>>> > the following request:
>>> >
>>> > 10.242.46.21 - - [20/Mar/2010:13:04:19 -0400] "POST
>>> >
>>> /?wicket:interface=:0:EmbeddedCategoryCriteriaPanel:inputPanel:categorySearchForm:zipCodeComponent:zipCode::IBehaviorListener:1:10&random=0.014624584217842351
>>> > HTTP/1.1" 200 161
>>> >
>>> >
>>> > results in this exception:
>>> >
>>> > Caused by: org.apache.wicket.WicketRuntimeException: component
>>> >
>>> EmbeddedCategoryCriteriaPanel:inputPanel:categorySearchForm:zipCodeComponent:zipCode
>>> > not found on page
>>> > com.castanealabs.gui.interactivemap.*StateProgramDetailsPage*[id = 0],
>>> > listener interface = [RequestListenerInterface name=IBehaviorListener,
>>> > method=public abstract void
>>> > org.apache.wicket.behavior.IBehaviorListener.onRequest()]
>>> >        at
>>> org.apache.wicket.request.AbstractRequestCycleProcessor.resolveListenerInterfaceTarget(AbstractRequestCycleProcessor.java:426)
>>> >
>>> >
>>> > The problem is, *StateProgramDetailsPage indeed does not contain a
>>> > EmbeddedCategoryCriteriaPanel in its' hierarchy. So why did wicket
>>> decide
>>> > that it does? The is another page class that does contain a
>>> > EmbeddedCategoryCriteriaPanel.
>>> > That class shares a concrete superclass with StateProgramDetailsPage
>>> class.
>>> > That superclass defines a serialVersionUID. *
>>> > *
>>> > *
>>> > *It appears that DiskPageStore is loading instance of the wrong page
>>> class.
>>> > Not sure why... could the fact that the classes share a common
>>> superclass
>>> > with a serialVersionUID  be the reason? Doubt it but have no other ideas
>>> at
>>> > the moment.*
>>> > *
>>> > *
>>> > *
>>> > *
>>> > Aside: Is there such a thing as an in-memory IPageStore impl (as a
>>> band-aid
>>> > at least...)
>>> >
>>> > On Sat, Mar 20, 2010 at 10:11 AM, Nikita Tovstoles <
>>> > nikita.tovsto...@gmail.com> wrote:
>>> >
>>> >> We're suddenly seeing a fair number of exceptions like one below.
>>> Thought
>>> >> the root cause is failing session affinity in our clusters, but the
>>> >> exceptions persist even after we shut down all but one host behind
>>> HAProxy.
>>> >> I realize the question is somewhat ambiguous, but what - besides lack
>>> of
>>> >> session affinity - can be some other causes of these exceptions?
>>> >>
>>> >> thanks
>>> >> -nikita
>>> >>
>>> >> 12:56:37,612 ERROR RequestCycle:1521 - submitted http post value
>>> [check3] for CheckGroup component
>>> [0:EmbeddedCategoryCriteriaPanel:inputPanel:categorySearchForm:brandsComponent:brands]
>>> contains an illegal relative path element [check3] which does not point to a
>>> Check component. Due to this the CheckGroup component cannot resolve the
>>> selected Check component pointed to by the illegal value. A possible reason
>>> is that componment hierarchy changed between rendering and form submission.
>>> >> org.apache.wicket.WicketRuntimeException: submitted http post value
>>> [check3] for CheckGroup component
>>> [0:EmbeddedCategoryCriteriaPanel:inputPanel:categorySearchForm:brandsComponent:brands]
>>> contains an illegal relative path element [check3] which does not point to a
>>> Check component. Due to this the CheckGroup component cannot resolve the
>>> selected Check component pointed to by the illegal value. A possible reason
>>> is that componment hierarchy changed between rendering and form submission.
>>> >>       at
>>> org.apache.wicket.markup.html.form.CheckGroup.convertValue(CheckGroup.java:136)
>>> >>       at
>>> org.apache.wicket.markup.html.form.CheckGroup.convertValue(CheckGroup.java:58)
>>> >>       at
>>> org.apache.wicket.markup.html.form.FormComponent.convertInput(FormComponent.java:1301)
>>> >>       at
>>> org.apache.wicket.markup.html.form.FormComponent.validate(FormComponent.java:1192)
>>> >>       at
>>> org.apache.wicket.markup.html.form.Form$22.validate(Form.java:2132)
>>> >>       at
>>> org.apache.wicket.markup.html.form.Form$ValidationVisitor.formComponent(Form.java:171)
>>> >>       at
>>> org.apache.wicket.markup.html.form.FormComponent.visitFormComponentsPostOrderHelper(FormComponent.java:441)
>>> >>
>>> >>
>>> >
>>>
>>> ---------------------------------------------------------------------
>>> To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
>>> For additional commands, e-mail: users-h...@wicket.apache.org
>>>
>>>
>>
>>
>>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: users-unsubscr...@wicket.apache.org
For additional commands, e-mail: users-h...@wicket.apache.org

Reply via email to