In our (webclient only) solution, we have the following problem. After using the system for some time
we get the following exception out of the blue:
2011-09-21 15:55 http-8080-4 ERROR com.servoy.j2db.util.Debug Error rendering the page null
org.apache.wicket.protocol.http.PageExpiredException: Cannot find the rendered page in session [pagemap=dialog,componentPath=8:1,versionNumber=0]
at org.apache.wicket.protocol.http.WebRequestCycleProcessor.resolve(WebRequestCycleProcessor.java:197)
at com.servoy.j2db.server.headlessclient.WebClientsApplication$5.resolve(WebClientsApplication.java:433)
at org.apache.wicket.RequestCycle.step(RequestCycle.java:1310)
at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1436)
at org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:486)
at com.servoy.j2db.server.servlets.Zl.doGet(Zl.java:4)
at org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:138)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
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.valves.AccessLogValve.invoke(AccessLogValve.java:567)
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(Unknown Source)
This exception occurs while actively using the system, so it’s not due to the fact that the user has been sleeping. It
occurs quite often, most of the time between 45 and 60 minutes after logging in.
From that moment on, the client session is broken and the user is having a hard time logging in again as the browser tries to restore the old session.
It occurs both in firefox and IE at random timepoints. However, we have not been able to create a fixed sequence
of actions to reproduce the exception.
Has someone seen similar behavior or does someone have any idea why this page expired exception occurs while using the system?
(Using Servoy 5.2.9. The session-timeout in web.xml is set to 30).
The Back and Forward buttons are not used by the client.
We have an interface with several tab-panels (+/- 10) on the main form. From each tab-panel/form on the main view, the client can open a modal dialog,
but there are at most 3 dialogs open at a time (using application.showFormInDialog).
We’re really lost on where to search for the problem. The problem is very serious as we cannot use the system reliably at the moment.
It took us some time to migrate and test our solution on Servoy 6(.0.1) and we see the same problem happening there.
It happens both with static forms and forms created in the solution model. Again, the exception occurs after some time after
logging in (45-60 minutes).
We’re really in need of some help here as we haven’t got any clue where to search for a solution/workaround.
Yes, the page expired exception occurs always when showing a modal dialog. But it’s not happing on 1 dialog only, it’s completely random.
If the ‘page expired’ message occurs in the dialog and the user does a refresh F5 that dialog will eventually appear. However, the next ‘page expired’
dialog will occur very soon after that.
ok
if it is really always inside a modal dialog
do you shown in that same dialog (with that same name) multiply pages? and then after showing lets say more then 10 or 15 over time, you suddenly start getting that page expired error?
Yes, it looks like we have been able to reproduce the problem:
function lsfd_TEST_start() {
globals.lsfd_TEST_showWidget(-1);
}
/**
* @properties={typeid:24,uuid:"B21FB1C9-B3E3-4141-B887-61B705A8D5E5"}
*/
function lsfd_TEST_closeForm(param, wid) {
application.closeForm(param);
globals.lsfd_TEST_showWidget(wid);
}
/**
* @properties={typeid:24,uuid:"CDAE3914-2102-476A-9CB8-CA691E6C4635"}
*/
function lsfd_TEST_showWidget(wid) {
var vFormName;
var vDate, vStartDate;
if (wid == -1) {
wid = 0;
} else if (wid >= 14) {
wid = 0;
} else {
wid++;
}
application.showFormInDialog(globals.lsfd_gWidgetArray[wid],-1,-1,-1,-1,null,false,false,globals.lsfd_gWidgetArray[wid]);
vDate = new Date();
vStartDate = new Date(vDate.getTime() + 1000);
plugins.scheduler.addJob(application.getUUID().toString(),vStartDate,globals.lsfd_TEST_closeForm,0,0,null,[globals.lsfd_gWidgetArray[wid],wid]);
}
globals.lsfd_gWidgetArray is an array containing form names.
Each modal is opened with a unique name (parameter 9 of showFormInDialog). After we have opened about 10-15 (wid == 10 or 15 in the example above) modals and we try to open the first form we have opened, the page expired exception occurs. If we set the max to 10 modals, no page expired exception occurs. If we set the max to 15, the error occurs.
Is there a max to the number of (named) modals that can be created? We need the named modals to show each modal in its own dialog window when modals get stacked. Is there a way, we can still give each form its own windowname without the pageexpiredexception?
Thanks for your help.
yes there is a maximum and that is 15 or something like that.
But if you if you just show them one at a time after each other
and then the oldest one again then we should generate a new page for that with the same form.
Can you create a sample solution for that and add it to a case so we can have a look?
Unfortunately, that’s not what happens. It generates a pageexpiredexception. Both in Servoy 5.2.9 (and 5.2.10) and Servoy 6.0.1.
We have a sample solution and we will generate a case for that immediately.
Slightly off topic…
Would be nice to have some kind of a reference list of “common” exceptions with a short explanation in the Servoy Wiki?
Exceptions that occur in the admin log are often hard to track down.
I’m running webclient forms as iFrames on a web site and I’m occasionally also seeing this “cannot find rendered…”
Not sure if this is just because of an expired session.
org.apache.wicket.protocol.http.PageExpiredException: Cannot find the rendered page in session [pagemap=null,componentPath=3:1,versionNumber=1]
at org.apache.wicket.protocol.http.WebRequestCycleProcessor.resolve(WebRequestCycleProcessor.java:197)
at com.servoy.j2db.server.headlessclient.WebClientsApplication$5.resolve(WebClientsApplication.java:433)
at org.apache.wicket.RequestCycle.step(RequestCycle.java:1310)
at org.apache.wicket.RequestCycle.steps(RequestCycle.java:1436)
at org.apache.wicket.RequestCycle.request(RequestCycle.java:545)
at org.apache.wicket.protocol.http.WicketFilter.doGet(WicketFilter.java:486)
at com.servoy.j2db.server.servlets.Zl.doGet(Zl.java:11)
at org.apache.wicket.protocol.http.WicketServlet.doGet(WicketServlet.java:138)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
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.valves.AccessLogValve.invoke(AccessLogValve.java:567)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
at org.apache.jk.server.JkCoyoteHandler.invoke(JkCoyoteHandler.java:190)
at org.apache.jk.common.HandlerRequest.invoke(HandlerRequest.java:291)
at org.apache.jk.common.ChannelSocket.invoke(ChannelSocket.java:769)
at org.apache.jk.common.ChannelSocket.processConnection(ChannelSocket.java:698)
at org.apache.jk.common.ChannelSocket$SocketConnection.runIt(ChannelSocket.java:891)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:690)
at java.lang.Thread.run(Thread.java:680)
don’t think that that is an expired session, that could be for example a back/forward button problem (thats not supported by servoy)
or anything that rollbacks a page version and then a later page version is requested again it could be quite a lot of different things and is really quite deep into servoy, not something you can do much about
(except not using back And forward buttons)