Further experiments show that that stateless forms suffer from the same issue. How come no one has run into it before?
On Tue, Jan 19, 2010 at 11:22 AM, kirillkh <[email protected]> wrote: > Hi, > > I've been getting a lot of grief trying to make some of my pages stateless > in Wicket 1.4.5 with Tomcat 6.0. > > Here's one thing that doesn't work. I'm trying to make a session-resistant > (but *not* bookmarkable) link on the homepage that should work no matter if > the page exists. If the page doesn't exist, I want it to be created and then > the link event handler invoked. As far as I understand, StatelessLink should > work for this purpose. However, I can't get it to work. From time to time, > clicking it produces the following error in the console: > > SEVERE: unable to find listener interface ILinkListener > org.apache.wicket.WicketRuntimeException: unable to find listener interface > ILinkListener > at > org.apache.wicket.request.target.component.BookmarkableListenerInterfaceRequestTarget.processEvents(BookmarkableListenerInterfaceRequestTarget.java:159) > at > org.apache.wicket.request.AbstractRequestCycleProcessor.processEvents(AbstractRequestCycleProcessor.java:92) > at > org.apache.wicket.RequestCycle.processEventsAndRespond(RequestCycle.java:1250) > at org.apache.wicket.RequestCycle.step(RequestCycle.java:1329) > at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1428) > at org.apache.wicket.RequestCycle.request(RequestCycle.java:545) > at > org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:479) > at > org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:312) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) > at > org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) > at > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) > at > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) > at > org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) > at > org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) > at java.lang.Thread.run(Thread.java:619) > > Sometimes I also get the following (seemingly related) error: > > org.apache.wicket.protocol.http.request.InvalidUrlException: > org.apache.wicket.WicketRuntimeException: Unable to instantiate Page class: > com.my.HomePage. See below for details. > at > org.apache.wicket.protocol.http.WebRequestCycleProcessor.resolve(WebRequestCycleProcessor.java:262) > at org.apache.wicket.RequestCycle.step(RequestCycle.java:1310) > at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1428) > at org.apache.wicket.RequestCycle.request(RequestCycle.java:545) > at > org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:479) > at > org.apache.wicket.protocol.http.WicketFilter.doFilter(WicketFilter.java:312) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) > at > org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:390) > at > org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) > at > org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) > at > org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233) > at > org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191) > at > org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128) > at > org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102) > at > org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109) > at > org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293) > at > org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:849) > at > org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583) > at > org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:454) > at java.lang.Thread.run(Thread.java:619) > Caused by: org.apache.wicket.WicketRuntimeException: Unable to instantiate > Page class: com.my.HomePage. See below for details. > at > org.apache.wicket.request.AbstractRequestCycleProcessor.resolveBookmarkablePage(AbstractRequestCycleProcessor.java:286) > at > org.apache.wicket.protocol.http.WebRequestCycleProcessor.resolve(WebRequestCycleProcessor.java:78) > ... 20 more > Caused by: org.apache.wicket.WicketRuntimeException: Attempt to access > unknown request listener interface ILinkListener > at > org.apache.wicket.request.AbstractRequestCycleProcessor.resolveListenerInterfaceTarget(AbstractRequestCycleProcessor.java:407) > at > org.apache.wicket.request.AbstractRequestCycleProcessor.resolveBookmarkablePage(AbstractRequestCycleProcessor.java:266) > ... 21 more > > > > A reliable way to reproduce it is: > 1) open the home page in the browser > 2) restart the web application in Tomcat > 3) click the link > Every time I perform the above steps, I either get the first exception, or > the second. > > It doesn't necessarily happen immediately when the session expires (but > AFAICT it always happens some time after that). Looks like it happens when a > classloader cache in the servlet container gets garbage-collected. > > I find the first stack trace especially interesting. I have traced the > execution flow in debugger, and I'm confident that the first exception > always happens after some Links get instantiated, and because Link > implements ILinkListener, at that point the RequestListenerInterface > instance for ILinkListener exists. However, > RequestListenerInterface.register() method doesn't get called during the > "resolve" step, so I must conclude that the servlet container uses the > preexisting class at that point. But when the execution flow > reachesAbstractRequestCycleProcessor.java:92 during the "process" > step, the RequestListenerInterface instance for ILinkListener can no longer > be found. > > Such inconsistencies happen when one class (in this case, > AbstractRequestCycleProcessor) > is created by a different classloader than another class (ILinkListener). > > What remains unclear is why I can't see other reports of the same problem > on the list. Am I doing something wrong? > > Thanks, > -Kirill >
