Hi,
I'm currently investigating the root cause of a
ComponentNotFoundException in our application (Wicket 8.12) that IMHO
should not happen in the first place (assuming I understood Wicket page
versioning correctly, that is).
1. The offending page displays search results using a DataTable with
non-AJAX links on items in each of the rows plus one "page backwards"
and one "page forwards" AJAX link outside of the DataTable to switch to
the next/previous page of results
<previous> <next>
+------ data table ------+
| <a ..>item1</a> |
+------------------------+
| <a ..>item2</a> |
+------------------------+
| .... etc... |
+------------------------+
The crash is happening 100% of the time when doing the following:
1.) Artifically increasing the round-trip time to the server by a lot
using NetEM (I'm on Linux), for example to a 400ms RTT:
|tc qdisc add dev lo root handle ||1||:||0| |netem delay 200msec|
2.) Clicking the "previous" or "next" AJAX link on the page
3.) Immediately afterwards clicking any of the regular links inside the
data table rows without waiting for the AJAX request to complete
This gets me a ComponentNotFoundException
org.apache.wicket.core.request.handler.ComponentNotFoundException:
Component
'resultList:streamList:streamListTable:body:rows:3:cells:3:cell:link'
has been removed from page.
at
org.apache.wicket.core.request.handler.ListenerRequestHandler.respond(ListenerRequestHandler.java:166)
at
org.apache.wicket.request.cycle.RequestCycle$HandlerExecutor.respond(RequestCycle.java:907)
at
org.apache.wicket.request.RequestHandlerExecutor.execute(RequestHandlerExecutor.java:65)
at
org.apache.wicket.request.cycle.RequestCycle.execute(RequestCycle.java:293)
at
org.apache.wicket.request.cycle.RequestCycle.processRequest(RequestCycle.java:254)
at
org.apache.wicket.protocol.http.WicketFilter.processRequestCycle(WicketFilter.java:276)
at
org.apache.wicket.protocol.http.WicketFilter.processRequest(WicketFilter.java:207)
every time after the AJAX request completes and releases the page lock
so the second HTTP request is getting processed. IMHO this should not
happen because the link URL (from the regular link inside the data
table) includes the page version number and in that version of the page
object graph the Link component should still exist (we've configured the
PageStore to keep 20 versions).
What am I missing here ? Is this somehow related to mixing AJAX and
non-AJAX requests here ? FWIW, the DataTable is using the default
ItemReuseStrategy.
Cheers,
Tobias