Details
-
Type: Improvement
-
Status: Closed
-
Priority: Major
-
Resolution: Cannot Reproduce
-
Affects Version/s: 1.6
-
Component/s: Framework
-
Labels:None
-
Environment:win xp
-
Workaround Exists:Yes
-
Workaround Description:HideIt turns out that if you wait long enough, all viewports will eventually fail with "Connection Lost" messages. If this happens, the cookies are cleaned up okay and you can continue to use the application after you redeploy it without having to clear cookies or restart the browser.
NOTE: In order to avoid this issue, you must allow each viewport in the browser to fail with either a "Session Lost" or "Connection Lost" message before you attempt to reload the application in the browser, or the cookies from the previous session will not be cleared.
A work-around might be to set the async ping timing (in the web.xml) to something more aggressive (5 secs?) during development so that the connection lost failure occurs much sooner after the web-app is undeployed:
The following code example defines the time in milliseconds between heartbeat messages. The default value is 20000 (20 seconds), setting it to 5 seconds will make the wait for the failure message more tolerable for some.
<context-param>
<param-name>com.icesoft.faces.heartbeatInterval</param-name>
<param-value>5000</param-value>
</context-param>
ShowIt turns out that if you wait long enough, all viewports will eventually fail with "Connection Lost" messages. If this happens, the cookies are cleaned up okay and you can continue to use the application after you redeploy it without having to clear cookies or restart the browser. NOTE: In order to avoid this issue, you must allow each viewport in the browser to fail with either a "Session Lost" or "Connection Lost" message before you attempt to reload the application in the browser, or the cookies from the previous session will not be cleared. A work-around might be to set the async ping timing (in the web.xml) to something more aggressive (5 secs?) during development so that the connection lost failure occurs much sooner after the web-app is undeployed: The following code example defines the time in milliseconds between heartbeat messages. The default value is 20000 (20 seconds), setting it to 5 seconds will make the wait for the failure message more tolerable for some. <context-param> <param-name>com.icesoft.faces.heartbeatInterval</param-name> <param-value>5000</param-value> </context-param>
Description
20.07.2007 10:47:46 *ERROR* ([Persistent Faces Servlet]) : Servlet.service() for servlet Persistent Faces Servlet threw exception
javax.servlet.ServletException: Session expired
at com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:38)
at com.icesoft.faces.webapp.http.servlet.PathDispatcher$Matcher.serviceOnMatch(PathDispatcher.java:52)
at com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:29)
at com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:65)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
...
Activity
- All
- Comments
- History
- Activity
- Remote Attachments
- Subversion
I need more specific information on how to reproduce this bug.
deploy any 1.6 icefaces app, create a session by using the app, then reload the servlet context without restarting the server
INFO: Reloading this Context has started
Aug 16, 2007 2:43:13 PM org.apache.catalina.core.StandardWrapper unload
INFO: Waiting for 1 instance(s) to be deallocated
Aug 16, 2007 2:43:14 PM org.apache.catalina.core.StandardWrapper unload
INFO: Waiting for 1 instance(s) to be deallocated
Aug 16, 2007 2:43:15 PM org.apache.catalina.core.StandardWrapper unload
INFO: Waiting for 1 instance(s) to be deallocated
Aug 16, 2007 2:43:15 PM org.apache.catalina.core.StandardWrapper unload
INFO: Waiting for 1 instance(s) to be deallocated
Aug 16, 2007 2:43:16 PM org.apache.catalina.core.StandardWrapper unload
INFO: Waiting for 1 instance(s) to be deallocated
Aug 16, 2007 2:43:17 PM org.apache.catalina.core.StandardWrapper unload
INFO: Waiting for 1 instance(s) to be deallocated
Aug 16, 2007 2:43:18 PM com.icesoft.faces.util.event.servlet.ContextEventRepeater contextDestroyed
INFO: Servlet Context Name: NestedBooleanTest, Server Info: Apache Tomcat/5.5.23
Aug 16, 2007 2:43:19 PM com.icesoft.faces.application.D2DViewHandler <clinit>
INFO:
ICEsoft Technologies, Inc.
ICEfaces-2007.08.08 1.6.0
Build number: x
Revision: x
Aug 16, 2007 2:43:20 PM com.sun.faces.config.ConfigureListener verifyObjects
INFO: Application object verification completed successfully
Aug 16, 2007 2:43:20 PM org.apache.catalina.core.StandardWrapperValve invoke
INFO: Servlet Blocking Servlet is currently unavailable
Aug 16, 2007 2:43:20 PM org.apache.catalina.core.StandardWrapperValve invoke
INFO: Servlet Blocking Servlet is currently unavailable
Aug 16, 2007 2:43:30 PM org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet Persistent Faces Servlet threw exception
javax.servlet.ServletException: Session expired
at com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:38)
at com.icesoft.faces.webapp.http.servlet.PathDispatcher$Matcher.serviceOnMatch(PathDispatcher.java:52)
at com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:29)
at com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:80)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:691)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:364)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at com.icesoft.faces.webapp.xmlhttp.BlockingServlet.service(BlockingServlet.java:54)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Thread.java:595)
Aug 16, 2007 2:43:30 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet Blocking Servlet threw exception
javax.servlet.ServletException: Session expired
at com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:38)
at com.icesoft.faces.webapp.http.servlet.PathDispatcher$Matcher.serviceOnMatch(PathDispatcher.java:52)
at com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:29)
at com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:80)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:691)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:364)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at com.icesoft.faces.webapp.xmlhttp.BlockingServlet.service(BlockingServlet.java:54)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Thread.java:595)
Aug 16, 2007 2:43:33 PM org.apache.catalina.core.ApplicationDispatcher invoke
SEVERE: Servlet.service() for servlet Persistent Faces Servlet threw exception
javax.servlet.ServletException: Session expired
at com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:38)
at com.icesoft.faces.webapp.http.servlet.PathDispatcher$Matcher.serviceOnMatch(PathDispatcher.java:52)
at com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:29)
at com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:80)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:691)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:364)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at com.icesoft.faces.webapp.xmlhttp.BlockingServlet.service(BlockingServlet.java:54)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Thread.java:595)
Aug 16, 2007 2:43:33 PM org.apache.catalina.core.StandardWrapperValve invoke
SEVERE: Servlet.service() for servlet Blocking Servlet threw exception
javax.servlet.ServletException: Session expired
at com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:38)
at com.icesoft.faces.webapp.http.servlet.PathDispatcher$Matcher.serviceOnMatch(PathDispatcher.java:52)
at com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:29)
at com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:80)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:691)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:469)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:364)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at com.icesoft.faces.webapp.xmlhttp.BlockingServlet.service(BlockingServlet.java:54)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:210)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:174)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:685)
at java.lang.Thread.run(Thread.java:595)
After following the instructions I still cannot reproduce this issue. The browser receives a 'session-expired' message on any request it makes (including 'ping') as it should and it shuts-down immediately. I see not exceptions in the console.
The problem still exists on DR2 1.7.0_5.
I saw that on Windows 2003/Tomcat 6.0.14/jre1.6.0_01 after moving webapp war from
WindowsXP/Tomcat 6.0.14/jre1.6.0_01 ...?
Using ICEfaces 1.7 DR#3, auctionMonitor sample.
1. Deploy auctionMonitor.war to webapps dir in Tomcat 6.0
2. Launch http://localhost:8080/auctionMonitor/ in your browser into two separate tabs or windows
3. Build an updated version of auctionMonitor.war and copy it overtop of the existing one in webapps
4. See that the Connection lost message appears on one of the tabs
5. Click the "Reload" button (on both tabs)
6. Page reloads, but no async (clocks don't tick).
7. Clear cookies and reload or shutdown browser and re-launch and it works correctly.
Refinement of above instructions:
It turns out that if you wait long enough, all viewports will eventually fail with "Connection Lost" messages. If this happens, the cookies are cleaned up okay and you can continue to use the application after you redeploy it without having to clear cookies or restart the browser.
NOTE: In order to avoid this issue, you must allow each viewport in the browser to fail with either a "Session Lost" or "Connection Lost" message before you attempt to reload the application in the browser, or the cookies from the previous session will not be cleared.
A work-around might be to set the async ping timing to something more aggressive (5 secs?) during development so that the connection lost failure occurs much sooner after the web-app is undeployed:
The following code example defines the time in milliseconds between heartbeat messages. The default value is 20000 (20 seconds).
<context-param>
<param-name>com.icesoft.faces.heartbeatInterval</param-name>
<param-value>5000</param-value>
</context-param>
Further testing with both 1.6.2 and 1.7 trunk (pre-Beta1) shows the following behavior:
1. Deploy auctionMonitor.war to webapps dir in Tomcat 6.0
2. Launch http://localhost:8080/auctionMonitor/ in your browser into two separate tabs or windows
3. Build an updated version of auctionMonitor.war and copy it overtop of the existing one in webapps
4. See the "Session Expired" message appear on both tabs.
5. Click the "Reload" button (on both tabs).
6. Page reloads, everything working properly.
It seems that so long as the bridge is notified of a failure (either session expired for connection lost) the cookies are cleaned up and everything proceeds as expected. However, if the browser tab is reloaded prior to the bridge displaying an error message the cookies from the previous session will be used an cause the issue that requires the browser to be closed or the cookies to be removed to resolve.
In order to remove the potential for this issue to arise we should make the bridge cookie mgmt. more robust, perhaps adding logic to associate cookies to a particular session id, etc.
I tried reloading the page before and after receiving the 'Session Expired' message, but I could not reproduce this issue. I looked at the code and the cookies are cleared on page load as well, which confirms what I am seeing.
Philip, isn't this issue related to http://jira.icefaces.org/browse/ICE-1770 ?