ICEfaces
  1. ICEfaces
  2. ICE-7339

Test if SessionBoundServer is null

    Details

    • Type: Bug Bug
    • Status: Closed
    • Priority: Major Major
    • Resolution: Fixed
    • Affects Version/s: EE-1.8.2.GA_P03
    • Fix Version/s: EE-1.8.2.GA_P04
    • Component/s: Framework
    • Labels:
      None
    • Environment:
      Glassfish 2.1, EPS

      Description

      When testing 1.8.2 P03 EPS with a patched build of 1.8.2 P03 (includes only additional logging) for case 10040, the customer was unable to run their application. The application did not load, the screen froze and the browser eventually crashes. Here are the offending code snippets from the exception (also below):

      MainServlet.java

      // ICE-4507 let Jetty continuation messages get through untouched
      String errorClassname = e.getClass().getName();
      if (errorClassname.startsWith("org.mortbay.jetty")) {
          throw e;
          }
      throw new RuntimeException("wrapped Exception: " + errorClassname, e); line 217


      SessionDispatcher.java

      try {
                  //put the request in the pool of active request in case HttpServletRequest.isUserInRole need to be called
                  addRequest(id, request);
                  //lookup session bound server -- this is a lock-free strategy
                  lookupServer(session).service(request, response); line 78
              }

      and the the exception:

      java.lang.RuntimeException: wrapped Exception: java.lang.NullPointerException
              at com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:217)
              at javax.servlet.http.HttpServlet.service(HttpServlet.java:847)
              at com.icesoft.faces.webapp.xmlhttp.BlockingServlet.service(BlockingServlet.java:67)
              at org.apache.catalina.core.ApplicationFilterChain.servletService(ApplicationFilterChain.java:427)
              at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:315)
              at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:287)
              at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:218)
              at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
              at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
              at com.sun.enterprise.web.WebPipeline.invoke(WebPipeline.java:94)
              at com.sun.enterprise.web.PESessionLockingStandardPipeline.invoke(PESessionLockingStandardPipeline.java:98)
              at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:222)
              at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
              at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
              at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)
              at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1093)
              at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:166)
              at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:648)
              at org.apache.catalina.core.StandardPipeline.doInvoke(StandardPipeline.java:593)
              at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:587)
              at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:1093)
              at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:291)
              at com.sun.enterprise.web.connector.grizzly.DefaultProcessorTask.invokeAdapter(DefaultProcessorTask.java:666)
              at com.sun.enterprise.web.connector.grizzly.comet.CometEngine.executeServlet(CometEngine.java:616)
              at com.sun.enterprise.web.connector.grizzly.comet.CometEngine.handle(CometEngine.java:362)
              at com.sun.enterprise.web.connector.grizzly.comet.CometAsyncFilter.doFilter(CometAsyncFilter.java:84)
              at com.sun.enterprise.web.connector.grizzly.async.DefaultAsyncExecutor.invokeFilters(DefaultAsyncExecutor.java:189)
              at com.sun.enterprise.web.connector.grizzly.async.DefaultAsyncExecutor.interrupt(DefaultAsyncExecutor.java:164)
              at com.sun.enterprise.web.connector.grizzly.async.AsyncProcessorTask.doTask(AsyncProcessorTask.java:92)
              at com.sun.enterprise.web.connector.grizzly.TaskBase.run(TaskBase.java:264)
              at com.sun.enterprise.web.connector.grizzly.ssl.SSLWorkerThread.run(SSLWorkerThread.java:106)
      Caused by: java.lang.NullPointerException
              at com.icesoft.faces.webapp.http.servlet.SessionDispatcher.service(SessionDispatcher.java:78)
              at com.icesoft.faces.webapp.http.servlet.PathDispatcher.service(PathDispatcher.java:55)
              at com.icesoft.faces.webapp.http.servlet.MainServlet.service(MainServlet.java:192)

        Activity

        Hide
        Tyler Johnson added a comment -

        Ted recommended the following:

        This should be split into multiple lines where we test for null:

        lookupServer(session).service(request, response); line 78

        If the SessionBoundServer is null, it likely indicates a request to an expired
        session, which we could log at debug level. (Perhaps a browser on someone's laptop
        has initiated a request after being woken from sleep.) We should respond
        with an HTTP error from the server.

        Show
        Tyler Johnson added a comment - Ted recommended the following: This should be split into multiple lines where we test for null: lookupServer(session).service(request, response); line 78 If the SessionBoundServer is null, it likely indicates a request to an expired session, which we could log at debug level. (Perhaps a browser on someone's laptop has initiated a request after being woken from sleep.) We should respond with an HTTP error from the server.
        Hide
        Jack Van Ooststroom added a comment -

        Null check has been added. If the result is null a 404 Not Found response is send. Marking this one as fixed.

        Show
        Jack Van Ooststroom added a comment - Null check has been added. If the result is null a 404 Not Found response is send. Marking this one as fixed.

          People

          • Assignee:
            Jack Van Ooststroom
            Reporter:
            Tyler Johnson
          • Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

            Dates

            • Created:
              Updated:
              Resolved: