ICEfaces
  1. ICEfaces
  2. ICE-2607

Query does not contain parameter named: ice.session

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: 1.6.2, 1.7DR#2
    • Fix Version/s: 1.7RC1, 1.7
    • Component/s: None
    • Labels:
      None
    • Environment:
      Tomcat 5.5.23 on Windows 2000 Server
      Tomcat 6.0
      Glassfish v2

      Description

      ICEfaces throws this exception after user leaves the application open in the browser for an undefined length of time.
      Doesn't always occur. Another user may leave the application open all day, only using it intermittently, and has no such exception.

      http://jira.icefaces.org/browse/ICE-2143 was closed off as not reproducible.


      java.lang.RuntimeException: Query does not contain parameter named: ice.session
      at com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.checkExistenceOf(ServletRequestResponse.java:231)
      at com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.getParameter(ServletRequestResponse.java:97)
      at com.icesoft.faces.webapp.http.core.IDVerifier.service(IDVerifier.java:23)
      at com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer$Matcher.serviceOnMatch(PathDispatcherServer.java:50)
      at com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer.service(PathDispatcherServer.java:19)
      at com.icesoft.faces.webapp.http.servlet.ThreadBlockingAdaptingServlet.service(ThreadBlockingAdaptingServlet.java:19)
      at com.icesoft.faces.webapp.http.servlet.EnvironmentAdaptingServlet.service(EnvironmentAdaptingServlet.java:29)
      at com.icesoft.faces.webapp.http.servlet.MainSessionBoundServlet.service(MainSessionBoundServlet.java:117)
      at com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:35)
      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:76)
      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(Unknown Source)


        Issue Links

          Activity

          Ken Fyten made changes -
          Status Resolved [ 5 ] Closed [ 6 ]
          Assignee Priority P2
          Assignee Mircea Toma [ mircea.toma ]
          Ken Fyten made changes -
          Fix Version/s 1.7 [ 10080 ]
          Ken Fyten made changes -
          Fix Version/s 1.7RC1 [ 10123 ]
          Fix Version/s 1.7 [ 10080 ]
          Mircea Toma made changes -
          Status Reopened [ 4 ] Resolved [ 5 ]
          Resolution Fixed [ 1 ]
          Hide
          Mircea Toma added a comment -

          Improved request verification. Drop connections for invalid requests.

          Show
          Mircea Toma added a comment - Improved request verification. Drop connections for invalid requests.
          Mircea Toma made changes -
          Fix Version/s 1.7 [ 10080 ]
          Fix Version/s 1.6.3 [ 10120 ]
          Hide
          Mircea Toma added a comment -

          After more debugging it seems that some of the requests coming from the browser don't contain any parameters at all. The logs also show that Tomcat fails to parse the HTTP requests. This might be caused by a very fast interaction with the page, creating a lot of successive AJAX request that might cancel each other.

          Show
          Mircea Toma added a comment - After more debugging it seems that some of the requests coming from the browser don't contain any parameters at all. The logs also show that Tomcat fails to parse the HTTP requests. This might be caused by a very fast interaction with the page, creating a lot of successive AJAX request that might cancel each other.
          Repository Revision Date User Message
          ICEsoft Public SVN Repository #15853 Tue Feb 26 14:47:53 MST 2008 mircea.toma Verify request more thoroughly. Better log messages.
          ICE-2607
          Files Changed
          Commit graph MODIFY /icefaces/trunk/icefaces/core/src/com/icesoft/faces/webapp/http/servlet/MainSessionBoundServlet.java
          Commit graph ADD /icefaces/trunk/icefaces/core/src/com/icesoft/faces/webapp/http/core/RequestVerifier.java
          Ken Fyten made changes -
          Resolution Fixed [ 1 ]
          Status Resolved [ 5 ] Reopened [ 4 ]
          Assignee Priority P1 P2
          Hide
          Ken Fyten added a comment -

          Previous changes have not completely resolved this issue. Re-opened.

          Show
          Ken Fyten added a comment - Previous changes have not completely resolved this issue. Re-opened.
          Repository Revision Date User Message
          ICEsoft Public SVN Repository #15816 Tue Feb 19 11:04:21 MST 2008 mircea.toma Don't abort connection, let the browser close the connection normaly.
          ICE-2607
          Files Changed
          Commit graph MODIFY /icefaces/trunk/icefaces/bridge/lib/ajax.js
          Repository Revision Date User Message
          ICEsoft Public SVN Repository #15789 Fri Feb 08 14:37:24 MST 2008 mircea.toma Revert change for now.
          ICE-2607
          Files Changed
          Commit graph MODIFY /icefaces/trunk/icefaces/core/src/com/icesoft/faces/webapp/xmlhttp/PersistentFacesServlet.java
          Commit graph MODIFY /icefaces/trunk/icefaces/core/src/com/icesoft/faces/webapp/xmlhttp/BlockingServlet.java
          Repository Revision Date User Message
          ICEsoft Public SVN Repository #15787 Fri Feb 08 14:08:22 MST 2008 mircea.toma Dispatch to from BlockingServlet to PersistentFaces servlet. This might allieviate some threading/timing issues in Tomcat.
          ICE-2607
          Files Changed
          Commit graph MODIFY /icefaces/trunk/icefaces/core/src/com/icesoft/faces/webapp/xmlhttp/PersistentFacesServlet.java
          Commit graph MODIFY /icefaces/trunk/icefaces/core/src/com/icesoft/faces/webapp/xmlhttp/BlockingServlet.java
          Mircea Toma made changes -
          Status Reopened [ 4 ] Resolved [ 5 ]
          Fix Version/s 1.6.3 [ 10120 ]
          Fix Version/s 1.7Beta1 [ 10121 ]
          Resolution Fixed [ 1 ]
          Hide
          Mircea Toma added a comment -

          Remove delay when starting monitoring thread (1.6 branch). This fixes the problem we saw with pings being sent repeatedly after the session-expired message was received by the bridge.

          We cannot reproduce the issue with the trunk (1.7 release), so no changes were necessary.

          Show
          Mircea Toma added a comment - Remove delay when starting monitoring thread (1.6 branch). This fixes the problem we saw with pings being sent repeatedly after the session-expired message was received by the bridge. We cannot reproduce the issue with the trunk (1.7 release), so no changes were necessary.
          Repository Revision Date User Message
          ICEsoft Public SVN Repository #15703 Thu Jan 31 16:31:32 MST 2008 mircea.toma Remove delay when starting monitoring thread.
          ICE-2607
          Files Changed
          Commit graph MODIFY /icefaces/branches/icefaces-1.6/icefaces/bridge/src/connection.async.js
          Ken Fyten made changes -
          Assignee Greg Dick [ greg.dick ] Mircea Toma [ mircea.toma ]
          Hide
          Greg Dick added a comment -

          Here's a snippet of the IE javascript log when a message missing the ice.session parameter is posted. It may be informative.

          3:36:13 info [window.async-connection.heartbeat] : ping
          3:36:15 debug [window.async-connection.ui] : [2511824] : send asynchronous POST
          3:36:16 debug [window.async-connection.blocking] : [5947530] : receive [200] OK
          3:36:16 debug [window.async-connection.ui] : [2511824] : receive [200] OK
          3:36:16 debug [window.async-connection.ui] : [2510065] : send asynchronous POST
          3:36:16 debug [window.async-connection] : closing previous connection...
          3:36:16 debug [window.async-connection.blocking] : [5947530] : connection closed
          3:36:16 debug [window.async-connection] : connect...
          3:36:17 debug [window.async-connection.blocking] : [3875609] : send asynchronous POST
          3:36:17 warn [window.async-connection.heartbeat] : pong lost
          3:36:17 warn [window] : connection in trouble
          3:36:17 debug [window.async-connection] : retry to connect...
          3:36:17 debug [window.async-connection] : closing previous connection...
          3:36:17 debug [window.async-connection.blocking] : [3875609] : connection closed
          3:36:17 debug [window.async-connection] : connect...
          3:36:18 debug [window.async-connection.blocking] : [1931911] : send asynchronous POST
          3:36:18 debug [window.async-connection.ui] : [2510065] : receive [200] OK
          3:36:18 info [window.async-connection.heartbeat] : pong
          3:36:18 debug [window.async-connection.ui] : [2510065] : connection closed
          3:36:36 info [window.async-connection.heartbeat] : ping

          I would suspect that the portion of the code where it says 'retry to connect' followed by "closing previous connection" is exactly the place where the ngrep log shows the [AF] protocol packets, and that further, this is happening at exactly the wrong time for the exchange that is ongoing at that time. Once the session is expired, the following output is logged:

          3:42:50 info [window.async-connection.heartbeat] : ping
          3:42:50 debug [window.async-connection.ui] : [2293878] : send asynchronous POST
          3:42:50 debug [window.async-connection.ui] : [2293878] : receive [200] OK
          3:42:53 warn [window.async-connection.heartbeat] : pong lost
          3:42:53 warn [window] : connection in trouble
          3:42:53 debug [window.async-connection] : retry to connect...
          3:43:10 info [window.async-connection.heartbeat] : ping
          3:43:10 debug [window.async-connection.ui] : [5219114] : send asynchronous POST
          3:43:11 debug [window.async-connection.ui] : [5219114] : receive [200] OK
          3:43:13 warn [window.async-connection.heartbeat] : pong lost
          3:43:13 warn [window] : connection in trouble
          3:43:13 debug [window.async-connection] : retry to connect...
          3:43:31 info [window.async-connection.heartbeat] : ping
          3:43:31 debug [window.async-connection.ui] : [2266888] : send asynchronous POST
          3:43:31 debug [window.async-connection.ui] : [2266888] : receive [200] OK
          3:43:34 warn [window.async-connection.heartbeat] : pong lost
          3:43:34 warn [window] : connection in trouble
          3:43:34 debug [window.async-connection] : retry to connect...

          Which provides ample opportunity for the error to occur.

          Show
          Greg Dick added a comment - Here's a snippet of the IE javascript log when a message missing the ice.session parameter is posted. It may be informative. 3:36:13 info [window.async-connection.heartbeat] : ping 3:36:15 debug [window.async-connection.ui] : [2511824] : send asynchronous POST 3:36:16 debug [window.async-connection.blocking] : [5947530] : receive [200] OK 3:36:16 debug [window.async-connection.ui] : [2511824] : receive [200] OK 3:36:16 debug [window.async-connection.ui] : [2510065] : send asynchronous POST 3:36:16 debug [window.async-connection] : closing previous connection... 3:36:16 debug [window.async-connection.blocking] : [5947530] : connection closed 3:36:16 debug [window.async-connection] : connect... 3:36:17 debug [window.async-connection.blocking] : [3875609] : send asynchronous POST 3:36:17 warn [window.async-connection.heartbeat] : pong lost 3:36:17 warn [window] : connection in trouble 3:36:17 debug [window.async-connection] : retry to connect... 3:36:17 debug [window.async-connection] : closing previous connection... 3:36:17 debug [window.async-connection.blocking] : [3875609] : connection closed 3:36:17 debug [window.async-connection] : connect... 3:36:18 debug [window.async-connection.blocking] : [1931911] : send asynchronous POST 3:36:18 debug [window.async-connection.ui] : [2510065] : receive [200] OK 3:36:18 info [window.async-connection.heartbeat] : pong 3:36:18 debug [window.async-connection.ui] : [2510065] : connection closed 3:36:36 info [window.async-connection.heartbeat] : ping I would suspect that the portion of the code where it says 'retry to connect' followed by "closing previous connection" is exactly the place where the ngrep log shows the [AF] protocol packets, and that further, this is happening at exactly the wrong time for the exchange that is ongoing at that time. Once the session is expired, the following output is logged: 3:42:50 info [window.async-connection.heartbeat] : ping 3:42:50 debug [window.async-connection.ui] : [2293878] : send asynchronous POST 3:42:50 debug [window.async-connection.ui] : [2293878] : receive [200] OK 3:42:53 warn [window.async-connection.heartbeat] : pong lost 3:42:53 warn [window] : connection in trouble 3:42:53 debug [window.async-connection] : retry to connect... 3:43:10 info [window.async-connection.heartbeat] : ping 3:43:10 debug [window.async-connection.ui] : [5219114] : send asynchronous POST 3:43:11 debug [window.async-connection.ui] : [5219114] : receive [200] OK 3:43:13 warn [window.async-connection.heartbeat] : pong lost 3:43:13 warn [window] : connection in trouble 3:43:13 debug [window.async-connection] : retry to connect... 3:43:31 info [window.async-connection.heartbeat] : ping 3:43:31 debug [window.async-connection.ui] : [2266888] : send asynchronous POST 3:43:31 debug [window.async-connection.ui] : [2266888] : receive [200] OK 3:43:34 warn [window.async-connection.heartbeat] : pong lost 3:43:34 warn [window] : connection in trouble 3:43:34 debug [window.async-connection] : retry to connect... Which provides ample opportunity for the error to occur.
          Hide
          Greg Dick added a comment -

          More info. After a point in time, the requests as seen by ngrep on the server changes to an incorrect mode. Sometimes, this seems to be related to session timeout, but under some test runs, it is unrelated.

          At startup, the following normal request response pattern occurs.

          T 2008/01/28 13:11:09.359153 10.18.39.167:4813 -> 10.18.40.13:8080 [AP]
          POST /component-showcase/block/ping HTTP/1.1.
          Accept: /.
          Accept-Language: en-ca.
          Referer: http://lntest3:8080/component-showcase/.
          Content-Type: application/x-www-form-urlencoded; charset=UTF-8.
          UA-CPU: x86.
          Accept-Encoding: gzip, deflate.
          User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1).
          Host: lntest3:8080.
          Content-Length: 111.
          Connection: Keep-Alive.
          Cache-Control: no-cache.
          Cookie: updates=; bconn=started; JSESSIONID=E34087AB0D5FFE17AC018CB5CCD907E9.
          .

          T 2008/01/28 13:11:09.359175 10.18.39.167:4813 -> 10.18.40.13:8080 [AP]
          ice.focus=undefined&ice.window=1333&ice.session=XwKu-5_8PWt515ZyB_z1Jg&ice.view.all=1&rand=0.3258847928923563

          T 2008/01/28 13:11:09.366360 10.18.40.13:8080 -> 10.18.39.167:4813 [AP]
          HTTP/1.1 200 OK.
          Server: Apache-Coyote/1.1.
          Content-Length: 0.
          Date: Mon, 28 Jan 2008 20:10:49 GMT.
          .

          This is what ngrep sees. There is an initial packet, followed by another packet containing the request parameters. Then the server response with: 200 OK. Great. It's interesting that the User-agent field for IE 7 starts with Mozilla/4.0

          After 4 minutes, with a session timeout of 10 minutes, we see the following:

          T 2008/01/28 13:13:49.819655 10.18.39.167:4813 -> 10.18.40.13:8080 [AP]
          POST /component-showcase/block/ping HTTP/1.1.
          Accept: /.
          Accept-Language: en-ca.
          Referer: http://lntest3:8080/component-showcase/.
          Content-Type: application/x-www-form-urlencoded; charset=UTF-8.
          UA-CPU: x86.
          Accept-Encoding: gzip, deflate.
          User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1).
          Host: lntest3:8080.
          Content-Length: 112.
          Connection: Keep-Alive.
          Cache-Control: no-cache.
          Cookie: updates=; bconn=started; JSESSIONID=E34087AB0D5FFE17AC018CB5CCD907E9.
          .

          T 2008/01/28 13:13:49.819708 10.18.39.167:4813 -> 10.18.40.13:8080 [AP]
          ice.focus=undefined&ice.window=1333&ice.session=XwKu-5_8PWt515ZyB_z1Jg&ice.view.all=1&rand=0.15033830778031265

          So far, this is a normal request. But the following packets are quickly seen.

          T 2008/01/28 13:13:49.898853 10.18.39.167:4813 -> 10.18.40.13:8080 [A]
          ......

          T 2008/01/28 13:13:49.931582 10.18.39.167:4813 > 10.18.40.13:8080 [AF] < This is an attempt on the part of the browser
          to close the socket.
          ......

          T 2008/01/28 13:13:50.157550 10.18.39.167:4825 -> 10.18.40.13:8080 [A]
          ......

          T 2008/01/28 13:13:50.168545 10.18.39.167:4825 -> 10.18.40.13:8080 [AP]
          POST /component-showcase/block/ping HTTP/1.1.
          Accept: /.
          Accept-Language: en-ca.
          Referer: http://lntest3:8080/component-showcase/.
          Content-Type: application/x-www-form-urlencoded; charset=UTF-8.
          UA-CPU: x86.
          Accept-Encoding: gzip, deflate.
          User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1).
          Host: lntest3:8080.
          Content-Length: 112.
          Connection: Keep-Alive.
          Cache-Control: no-cache.
          Cookie: updates=; bconn=started; JSESSIONID=E34087AB0D5FFE17AC018CB5CCD907E9.
          .

          3/10's of a second later, the browser re-pings the server, this time, it doesn't contain the request parameters and 20 seconds
          later, the server responds with the error message that ice.session is not found.

          T 2008/01/28 13:14:10.179375 10.18.40.13:8080 -> 10.18.39.167:4825 [A]
          HTTP/1.1 500 Internal Server Error.
          Server: Apache-Coyote/1.1.
          Content-Type: text/html;charset=utf-8.
          Content-Length: 2672.
          Date: Mon, 28 Jan 2008 20:14:10 GMT.
          Connection: close.

          blah blah.... more stack dump follows. No session expired responses are found in the log file until 13:20:04, which is correct given my 10 minute session timeout.

          So errored responses to pings at
          13:14:10
          13:21:42
          13:22:44
          13:23:44
          13:24:44
          13:26:04
          13:27:25

          Which appears to be on the 20 second ping schedule, but not always every minute. Also, once session timeout has occurred,
          the problem appears very readily, but I can't say it's completely limited to being after a session times out.

          Show
          Greg Dick added a comment - More info. After a point in time, the requests as seen by ngrep on the server changes to an incorrect mode. Sometimes, this seems to be related to session timeout, but under some test runs, it is unrelated. At startup, the following normal request response pattern occurs. T 2008/01/28 13:11:09.359153 10.18.39.167:4813 -> 10.18.40.13:8080 [AP] POST /component-showcase/block/ping HTTP/1.1. Accept: / . Accept-Language: en-ca. Referer: http://lntest3:8080/component-showcase/ . Content-Type: application/x-www-form-urlencoded; charset=UTF-8. UA-CPU: x86. Accept-Encoding: gzip, deflate. User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1). Host: lntest3:8080. Content-Length: 111. Connection: Keep-Alive. Cache-Control: no-cache. Cookie: updates=; bconn=started; JSESSIONID=E34087AB0D5FFE17AC018CB5CCD907E9. . T 2008/01/28 13:11:09.359175 10.18.39.167:4813 -> 10.18.40.13:8080 [AP] ice.focus=undefined&ice.window=1333&ice.session=XwKu-5_8PWt515ZyB_z1Jg&ice.view.all=1&rand=0.3258847928923563 T 2008/01/28 13:11:09.366360 10.18.40.13:8080 -> 10.18.39.167:4813 [AP] HTTP/1.1 200 OK. Server: Apache-Coyote/1.1. Content-Length: 0. Date: Mon, 28 Jan 2008 20:10:49 GMT. . This is what ngrep sees. There is an initial packet, followed by another packet containing the request parameters. Then the server response with: 200 OK. Great. It's interesting that the User-agent field for IE 7 starts with Mozilla/4.0 After 4 minutes, with a session timeout of 10 minutes, we see the following: T 2008/01/28 13:13:49.819655 10.18.39.167:4813 -> 10.18.40.13:8080 [AP] POST /component-showcase/block/ping HTTP/1.1. Accept: / . Accept-Language: en-ca. Referer: http://lntest3:8080/component-showcase/ . Content-Type: application/x-www-form-urlencoded; charset=UTF-8. UA-CPU: x86. Accept-Encoding: gzip, deflate. User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1). Host: lntest3:8080. Content-Length: 112. Connection: Keep-Alive. Cache-Control: no-cache. Cookie: updates=; bconn=started; JSESSIONID=E34087AB0D5FFE17AC018CB5CCD907E9. . T 2008/01/28 13:13:49.819708 10.18.39.167:4813 -> 10.18.40.13:8080 [AP] ice.focus=undefined&ice.window=1333&ice.session=XwKu-5_8PWt515ZyB_z1Jg&ice.view.all=1&rand=0.15033830778031265 So far, this is a normal request. But the following packets are quickly seen. T 2008/01/28 13:13:49.898853 10.18.39.167:4813 -> 10.18.40.13:8080 [A] ...... T 2008/01/28 13:13:49.931582 10.18.39.167:4813 > 10.18.40.13:8080 [AF] < This is an attempt on the part of the browser to close the socket. ...... T 2008/01/28 13:13:50.157550 10.18.39.167:4825 -> 10.18.40.13:8080 [A] ...... T 2008/01/28 13:13:50.168545 10.18.39.167:4825 -> 10.18.40.13:8080 [AP] POST /component-showcase/block/ping HTTP/1.1. Accept: / . Accept-Language: en-ca. Referer: http://lntest3:8080/component-showcase/ . Content-Type: application/x-www-form-urlencoded; charset=UTF-8. UA-CPU: x86. Accept-Encoding: gzip, deflate. User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1). Host: lntest3:8080. Content-Length: 112. Connection: Keep-Alive. Cache-Control: no-cache. Cookie: updates=; bconn=started; JSESSIONID=E34087AB0D5FFE17AC018CB5CCD907E9. . 3/10's of a second later, the browser re-pings the server, this time, it doesn't contain the request parameters and 20 seconds later, the server responds with the error message that ice.session is not found. T 2008/01/28 13:14:10.179375 10.18.40.13:8080 -> 10.18.39.167:4825 [A] HTTP/1.1 500 Internal Server Error. Server: Apache-Coyote/1.1. Content-Type: text/html;charset=utf-8. Content-Length: 2672. Date: Mon, 28 Jan 2008 20:14:10 GMT. Connection: close. blah blah.... more stack dump follows. No session expired responses are found in the log file until 13:20:04, which is correct given my 10 minute session timeout. So errored responses to pings at 13:14:10 13:21:42 13:22:44 13:23:44 13:24:44 13:26:04 13:27:25 Which appears to be on the 20 second ping schedule, but not always every minute. Also, once session timeout has occurred, the problem appears very readily, but I can't say it's completely limited to being after a session times out.
          Greg Dick made changes -
          Link This issue blocks ICE-2360 [ ICE-2360 ]
          Greg Dick made changes -
          Link This issue is duplicated by ICE-2143 [ ICE-2143 ]
          Hide
          Greg Dick added a comment -

          Oh yes, to turn on the error logging to catch this issue in the 1.7 Beta release, one must set the log category for

          com.icesoft.faces.webapp.http.servlet.ServletRequestResponse

          to debug. Note that the problem will still throw a runtime exception that will pop a dialog box up at the browser. It isn't possible to carry on at this stage, as we really do need the ice.session value to create a response for the client.

          Show
          Greg Dick added a comment - Oh yes, to turn on the error logging to catch this issue in the 1.7 Beta release, one must set the log category for com.icesoft.faces.webapp.http.servlet.ServletRequestResponse to debug. Note that the problem will still throw a runtime exception that will pop a dialog box up at the browser. It isn't possible to carry on at this stage, as we really do need the ice.session value to create a response for the client.
          Hide
          Greg Dick added a comment -

          We've tried all week to duplicate this issue with no success. Well, actually, we can do it, but always the browser is impaired in some way. Either Firebug is actively causing the problem, or Firebug is enabled (but not visible) and it uses up memory in the browser until the browser starts to generate anomalous requests. If the client has any ability at all to use some network sniffing tools in their environment, it would be extremely helpful. We can log what we see inside the servlets, or even inside the filter, and we'll never be able to discern who exactly is breaking things. They can either run Wireshark on a windows platform with the client as long as the server is somewhere else, or they can run ngrep on a unix platform. There is a limitation running wireshark on a windows platform where the client and the server are on the same machine.

          http://www.wireshark.org/
          or
          http://ngrep.sourceforge.net/

          Wireshark is a windows app, and pretty straightforward aside from its inability to easily monitor traffic generated and destined for the localhost (even installing the loopback adapter) but to run ngrep on a Unix platform, I've been using the following command:

          ngrep -d eth0 -q -W byline -t port 8080 > capture.log &

          At least we have not seen this error because of collisions caused by over use. We've had 5 browser sessions, 2 with tab key generated traffic and two external remote clients hitting the Linux server very hard for hours at a time with no duplication of the error.

          Even browsers just pinging consume memory, and it's possible that there's some form of resource struggle going on in IE after some idle time. It's possible that there is some form of request sharing collision happening within our framework, but the odds are getting slimmer the more we hit on it without result. Also a remote possibility is request sharing within Tomcat, but googling for that finds no hits. I would think that scenario would have been long solved if it were a real possibility.

          Show
          Greg Dick added a comment - We've tried all week to duplicate this issue with no success. Well, actually, we can do it, but always the browser is impaired in some way. Either Firebug is actively causing the problem, or Firebug is enabled (but not visible) and it uses up memory in the browser until the browser starts to generate anomalous requests. If the client has any ability at all to use some network sniffing tools in their environment, it would be extremely helpful. We can log what we see inside the servlets, or even inside the filter, and we'll never be able to discern who exactly is breaking things. They can either run Wireshark on a windows platform with the client as long as the server is somewhere else, or they can run ngrep on a unix platform. There is a limitation running wireshark on a windows platform where the client and the server are on the same machine. http://www.wireshark.org/ or http://ngrep.sourceforge.net/ Wireshark is a windows app, and pretty straightforward aside from its inability to easily monitor traffic generated and destined for the localhost (even installing the loopback adapter) but to run ngrep on a Unix platform, I've been using the following command: ngrep -d eth0 -q -W byline -t port 8080 > capture.log & At least we have not seen this error because of collisions caused by over use. We've had 5 browser sessions, 2 with tab key generated traffic and two external remote clients hitting the Linux server very hard for hours at a time with no duplication of the error. Even browsers just pinging consume memory, and it's possible that there's some form of resource struggle going on in IE after some idle time. It's possible that there is some form of request sharing collision happening within our framework, but the odds are getting slimmer the more we hit on it without result. Also a remote possibility is request sharing within Tomcat, but googling for that finds no hits. I would think that scenario would have been long solved if it were a real possibility.
          Repository Revision Date User Message
          ICEsoft Public SVN Repository #15660 Fri Jan 25 15:54:36 MST 2008 greg.dick ICE-2607 Added additional logging to the checkExistenceOf method. Logged are the external host and port (for correlating with packet sniffer output, as well as the names and values of the other parameters in the request.
          Files Changed
          Commit graph MODIFY /icefaces/trunk/icefaces/core/src/com/icesoft/faces/webapp/http/servlet/ServletRequestResponse.java
          Hide
          Ted Goddard added a comment -

          Greg's long running test showed the following network activity characteristic of the error:

          T 10.18.39.167:3392 -> 10.18.40.13:8080 [A]
          ......

          T 10.18.39.167:3392 -> 10.18.40.13:8080 [AP]
          POST /syncTest/block/receive-updated-views HTTP/1.1.
          Accept: /.
          Accept-Language: en-ca.
          Referer: http://lntest3:8080/syncTest/.
          Content-Type: application/x-www-form-urlencoded; charset=UTF-8.
          UA-CPU: x86.
          Accept-Encoding: gzip, deflate.
          User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1).
          Host: lntest3:8080.
          Content-Length: 61.
          Connection: Keep-Alive.
          Cache-Control: no-cache.
          Cookie: updates=ixK_g7cA4SVnBI8mdvhVcg:1; bconn=acquired; JSESSIONID=4A8D3BBF50EEA4C51F09C8F0B426496C.
          .

          T 10.18.39.167:3392 -> 10.18.40.13:8080 [AF]
          ......

          T 10.18.40.13:8080 -> 10.18.39.167:3392 [A]
          HTTP/1.1 500 Internal Server Error.
          Server: Apache-Coyote/1.1.
          Content-Type: text/html;charset=utf-8.
          Content-Length: 2668.
          Date: Thu, 24 Jan 2008 00:20:11 GMT.
          Connection: close.

          According to the network activity, the browser is not sending the remainder of the HTTP request, instead, it is closing the connection after sending the headers with the [AF] packet (indicating a TCP FIN).

          Show
          Ted Goddard added a comment - Greg's long running test showed the following network activity characteristic of the error: T 10.18.39.167:3392 -> 10.18.40.13:8080 [A] ...... T 10.18.39.167:3392 -> 10.18.40.13:8080 [AP] POST /syncTest/block/receive-updated-views HTTP/1.1. Accept: / . Accept-Language: en-ca. Referer: http://lntest3:8080/syncTest/ . Content-Type: application/x-www-form-urlencoded; charset=UTF-8. UA-CPU: x86. Accept-Encoding: gzip, deflate. User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1). Host: lntest3:8080. Content-Length: 61. Connection: Keep-Alive. Cache-Control: no-cache. Cookie: updates=ixK_g7cA4SVnBI8mdvhVcg:1; bconn=acquired; JSESSIONID=4A8D3BBF50EEA4C51F09C8F0B426496C. . T 10.18.39.167:3392 -> 10.18.40.13:8080 [AF] ...... T 10.18.40.13:8080 -> 10.18.39.167:3392 [A] HTTP/1.1 500 Internal Server Error. Server: Apache-Coyote/1.1. Content-Type: text/html;charset=utf-8. Content-Length: 2668. Date: Thu, 24 Jan 2008 00:20:11 GMT. Connection: close. According to the network activity, the browser is not sending the remainder of the HTTP request, instead, it is closing the connection after sending the headers with the [AF] packet (indicating a TCP FIN).
          Ken Fyten made changes -
          Resolution Fixed [ 1 ]
          Status Resolved [ 5 ] Reopened [ 4 ]
          Hide
          Ken Fyten added a comment -

          Althought using FireBug does cause this problem to occur, we are still able to reproduce the issue without Firebug. Re-opened.

          Show
          Ken Fyten added a comment - Althought using FireBug does cause this problem to occur, we are still able to reproduce the issue without Firebug. Re-opened.
          Greg Dick made changes -
          Status Open [ 1 ] Resolved [ 5 ]
          Resolution Fixed [ 1 ]
          Hide
          Greg Dick added a comment -

          To be honest, it was Sam who noted that the problem couldn't be reproduced. I added some logging to the code to give more information if the parameter was missing, and it never fired unless we were actively poking around with Firebug.

          This would explain why it occurs on each of the platforms, despite what must certainly be different request pooling mechanisms on each one.

          Show
          Greg Dick added a comment - To be honest, it was Sam who noted that the problem couldn't be reproduced. I added some logging to the code to give more information if the parameter was missing, and it never fired unless we were actively poking around with Firebug. This would explain why it occurs on each of the platforms, despite what must certainly be different request pooling mechanisms on each one.
          Greg Dick made changes -
          Attachment failure_scenario.JPG [ 10791 ]
          Hide
          Greg Dick added a comment -

          This screen capture from Tamper shows the GET request generated by Firebug when you examine the ping request using firebug. Firebug creates a PING request, apparently from cache, which is a GET request and which does not contain the ice.session parameter in the postdata.

          Show
          Greg Dick added a comment - This screen capture from Tamper shows the GET request generated by Firebug when you examine the ping request using firebug. Firebug creates a PING request, apparently from cache, which is a GET request and which does not contain the ice.session parameter in the postdata.
          Hide
          Ted Goddard added a comment -

          Greg has observed that this can be reproduced with firebug; i.e. firebug is the cause. The following GET to /ping would not be produced by the bridge normally (it would normally be a POST) shows this:

          T 10.18.39.60:61950 -> 10.18.39.59:8080 [AP]
          GET /component-showcase/block/ping HTTP/1.1.
          Host: vorlon.ice:8080.
          User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11.
          Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png,/;q=0.5 .
          Accept-Language: en-us,en;q=0.5.
          Accept-Encoding: gzip,deflate.
          Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7.
          Keep-Alive: 300.
          Connection: keep-alive.
          Cookie: updates=; bconn=acquired; JSESSIONID=047D76BF12C9167879868BB69524BBC0.
          .

          T 10.18.39.59:8080 -> 10.18.39.60:61950 [A]
          HTTP/1.1 500 Internal Server Error.
          Server: Apache-Coyote/1.1.
          Content-Type: text/html;charset=utf-8.
          Content-Length: 2672.
          Date: Mon, 21 Jan 2008 19:19:25 GMT.
          Connection: close.
          .
          <html><head><title>Apache Tomcat/5.5.25 - Error report</title><style><!--H1

          {font-family:Tahoma,Arial,sans- serif;color:white;background-color:#525D76;font-size:22px;}

          H2

          {font-family:Tahoma,Arial,sans-serif;color:w hite;background-color:#525D76;font-size:16px;}

          H3

          {font-family:Tahoma,Arial,sans-serif;color:white;backgrou nd-color:#525D76;font-size:14px;}

          BODY

          {font-family:Tahoma,Arial,sans-serif;color:black;background-color:wh ite;}

          B

          {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;}

          P

          {font-family:Tahoma,A rial,sans-serif;background:white;color:black;font-size:12px;}

          A

          {color : black;}

          A.name

          {color : black;}

          HR

          {c olor : #525D76;}

          --></style> </head><body><h1>HTTP Status 500 - </h1><HR size="1" noshade="noshade"><p><b>ty pe</b> Exception report</p><p><b>message</b> <u></u></p><p><b>description</b> <u>The server encountered an internal error () that prevented it from fulfilling this request.</u></p><p><b>exception</b> <pre>java.lang .RuntimeException: Query does not contain parameter named: ice.session
          .com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.checkExistenceOf(ServletRequestResponse.java: 249)
          .com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.getParameter(ServletRequestResponse.java:112)
          .com.icesoft

          T 10.18.39.59:8080 -> 10.18.39.60:61950 [AP]
          .faces.webapp.http.core.IDVerifier.service(IDVerifier.java:23)
          .com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer$Matcher.serviceOnMatch(PathDispatcherSe rver.java:50)
          .com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer.service(PathDispatcherServer.java:19)
          .com.icesoft.faces.webapp.http.servlet.ThreadBlockingAdaptingServlet.service(ThreadBlockingAdaptingServlet. java:19)
          .com.icesoft.faces.webapp.http.servlet.EnvironmentAdaptingServlet.service(EnvironmentAdaptingServlet.java:2 9)
          .com.icesoft.faces.webapp.http.servlet.MainSessionBoundServlet.service(MainSessionBoundServlet.java:105)
          .com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:37)
          .com.icesoft.faces.webapp.http.servlet.PathDispatcher$Matcher.serviceOnMatch(PathDispatcher.java:52)
          .com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:29)
          .com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:76)
          .javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
          .com.icesoft.faces.webapp.xmlhttp.BlockingServlet.service(BlockingServlet.java:54)
          .com.icesoft.icefaces.samples.showcase.util.DummyFilter.doFilter(DummyFilter.java:24)
          </pre></p><p><b>note</b> <u>The full stack trace of the root cause is available in the Apache Tomcat/5.5.25 logs.</u></p><HR size="1" noshade="noshade"><h3>Apache Tomcat/5.5.25</h3></body></html>

          Show
          Ted Goddard added a comment - Greg has observed that this can be reproduced with firebug; i.e. firebug is the cause. The following GET to /ping would not be produced by the bridge normally (it would normally be a POST) shows this: T 10.18.39.60:61950 -> 10.18.39.59:8080 [AP] GET /component-showcase/block/ping HTTP/1.1. Host: vorlon.ice:8080. User-Agent: Mozilla/5.0 (Macintosh; U; Intel Mac OS X; en-US; rv:1.8.1.11) Gecko/20071127 Firefox/2.0.0.11. Accept: text/xml,application/xml,application/xhtml+xml,text/html;q=0.9,text/plain;q=0.8,image/png, / ;q=0.5 . Accept-Language: en-us,en;q=0.5. Accept-Encoding: gzip,deflate. Accept-Charset: ISO-8859-1,utf-8;q=0.7,*;q=0.7. Keep-Alive: 300. Connection: keep-alive. Cookie: updates=; bconn=acquired; JSESSIONID=047D76BF12C9167879868BB69524BBC0. . T 10.18.39.59:8080 -> 10.18.39.60:61950 [A] HTTP/1.1 500 Internal Server Error. Server: Apache-Coyote/1.1. Content-Type: text/html;charset=utf-8. Content-Length: 2672. Date: Mon, 21 Jan 2008 19:19:25 GMT. Connection: close. . <html><head><title>Apache Tomcat/5.5.25 - Error report</title><style><!--H1 {font-family:Tahoma,Arial,sans- serif;color:white;background-color:#525D76;font-size:22px;} H2 {font-family:Tahoma,Arial,sans-serif;color:w hite;background-color:#525D76;font-size:16px;} H3 {font-family:Tahoma,Arial,sans-serif;color:white;backgrou nd-color:#525D76;font-size:14px;} BODY {font-family:Tahoma,Arial,sans-serif;color:black;background-color:wh ite;} B {font-family:Tahoma,Arial,sans-serif;color:white;background-color:#525D76;} P {font-family:Tahoma,A rial,sans-serif;background:white;color:black;font-size:12px;} A {color : black;} A.name {color : black;} HR {c olor : #525D76;} --></style> </head><body><h1>HTTP Status 500 - </h1><HR size="1" noshade="noshade"><p><b>ty pe</b> Exception report</p><p><b>message</b> <u></u></p><p><b>description</b> <u>The server encountered an internal error () that prevented it from fulfilling this request.</u></p><p><b>exception</b> <pre>java.lang .RuntimeException: Query does not contain parameter named: ice.session .com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.checkExistenceOf(ServletRequestResponse.java: 249) .com.icesoft.faces.webapp.http.servlet.ServletRequestResponse.getParameter(ServletRequestResponse.java:112) .com.icesoft T 10.18.39.59:8080 -> 10.18.39.60:61950 [AP] .faces.webapp.http.core.IDVerifier.service(IDVerifier.java:23) .com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer$Matcher.serviceOnMatch(PathDispatcherSe rver.java:50) .com.icesoft.faces.webapp.http.common.standard.PathDispatcherServer.service(PathDispatcherServer.java:19) .com.icesoft.faces.webapp.http.servlet.ThreadBlockingAdaptingServlet.service(ThreadBlockingAdaptingServlet. java:19) .com.icesoft.faces.webapp.http.servlet.EnvironmentAdaptingServlet.service(EnvironmentAdaptingServlet.java:2 9) .com.icesoft.faces.webapp.http.servlet.MainSessionBoundServlet.service(MainSessionBoundServlet.java:105) .com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:37) .com.icesoft.faces.webapp.http.servlet.PathDispatcher$Matcher.serviceOnMatch(PathDispatcher.java:52) .com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:29) .com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:76) .javax.servlet.http.HttpServlet.service(HttpServlet.java:803) .com.icesoft.faces.webapp.xmlhttp.BlockingServlet.service(BlockingServlet.java:54) .com.icesoft.icefaces.samples.showcase.util.DummyFilter.doFilter(DummyFilter.java:24) </pre></p><p><b>note</b> <u>The full stack trace of the root cause is available in the Apache Tomcat/5.5.25 logs.</u></p><HR size="1" noshade="noshade"><h3>Apache Tomcat/5.5.25</h3></body></html>
          Hide
          Ken Fyten added a comment -

          Also happens on WebLogic and WebSphere.

          Show
          Ken Fyten added a comment - Also happens on WebLogic and WebSphere.
          Ken Fyten made changes -
          Assignee Priority P2 P1
          Assignee Mircea Toma [ mircea.toma ] Greg Dick [ greg.dick ]
          Hide
          Ken Fyten added a comment -

          This seems like it could be related to ICE-2410.

          Show
          Ken Fyten added a comment - This seems like it could be related to ICE-2410 .
          Ken Fyten made changes -
          Environment Tomcat 5.5.23 on Windows 2000 Server Tomcat 5.5.23 on Windows 2000 Server
          Tomcat 6.0
          Glassfish v2
          Hide
          Ken Fyten added a comment -

          We are now able to reproduce this issue with a specific test application (incl. use of a filter) on the following app. servers:

          • Tomcat 5.5
          • Tomcat 6.0
          • Glassfish v2

          Does not appear to be a Tomcat specific issue as we originally suspected.

          Show
          Ken Fyten added a comment - We are now able to reproduce this issue with a specific test application (incl. use of a filter) on the following app. servers: Tomcat 5.5 Tomcat 6.0 Glassfish v2 Does not appear to be a Tomcat specific issue as we originally suspected.
          Ken Fyten made changes -
          Fix Version/s 1.7Beta1 [ 10121 ]
          Fix Version/s 1.7 [ 10080 ]
          Hide
          Ken Fyten added a comment -

          It seems that all the known instances of this involve the use of a filter.

          Show
          Ken Fyten added a comment - It seems that all the known instances of this involve the use of a filter.
          Ken Fyten made changes -
          Fix Version/s 1.7 [ 10080 ]
          Assignee Priority P2
          Assignee Mircea Toma [ mircea.toma ]
          Hide
          Ken Fyten added a comment -

          Currently trying to reproduce this reliably (QA).

          Show
          Ken Fyten added a comment - Currently trying to reproduce this reliably (QA).
          Philip Breau made changes -
          Field Original Value New Value
          Support Case References https://www.icesoft.ca:4443/supportilla/show_bug.cgi?id=4522
          Philip Ralph created issue -

            People

            • Assignee:
              Unassigned
              Reporter:
              Philip Ralph
            • Votes:
              1 Vote for this issue
              Watchers:
              2 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: