Uploaded image for project: 'Application Server 3  4  5 and 6'
  1. Application Server 3 4 5 and 6
  2. JBAS-4060

NPE in StandardSession.endAccess()

XMLWordPrintable

      In the jbossweb embedded in Branch_4_2, there is a race between a webapp undeployment and the cleanup of the last Request(s) the app handled that can lead to an NPE in StandardSession. Following server side logging from org.jboss.test.classloader.leak.test.ClassloaderLeakUnitTestCase shows the issue:

      2007-02-04 15:15:11,283 INFO [WEBAPP] WEBAPP is here
      2007-02-04 15:15:11,673 DEBUG [org.jboss.deployment.MainDeployer] Undeploying file:/C:/dev/jboss/jboss-4.2/testsuite/output/lib/classloader-leak-in-war.war, isShutdown=false
      2007-02-04 15:15:11,673 DEBUG [org.jboss.system.ServiceController] stopping service: jboss.web.deployment:war=classloader-leak-in-war.war,id=1522768662
      2007-02-04 15:15:11,673 DEBUG [org.jboss.system.ServiceController] stopping dependent services for: jboss.web.deployment:war=classloader-leak-in-war.war,id=1522768662 dependent services are: []
      2007-02-04 15:15:11,673 DEBUG [org.jboss.web.WebModule] Stopping jboss.web.deployment:war=classloader-leak-in-war.war,id=1522768662
      2007-02-04 15:15:11,673 INFO [org.jboss.web.tomcat.service.TomcatDeployer] undeploy, ctxPath=/classloader-leak, warUrl=.../tmp/deploy/tmp12161classloader-leak-in-war-exp.war/
      2007-02-04 15:15:11,689 ERROR [org.apache.coyote.http11.Http11Processor] Error processing request
      java.lang.NullPointerException
      at org.apache.catalina.session.StandardSession.endAccess(StandardSession.java:638)
      at org.apache.catalina.connector.Request.recycle(Request.java:419)
      at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:239)
      at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:844)
      at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:624)
      at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:445)
      at java.lang.Thread.run(Thread.java:595)

      The test

      1) executes a web request against a JSP (JSP does the first INFO logging above)
      2) executes an RMIAdaptor request telling the AS to undeploy the webapp

      Apparently, the recycle processing from the web request is still ongoing as the webapp is being undeployed. Looks like the undeployment's StandardManager.stop() --> StandardSession.recycle() is nulling out the StandardSession.accessCount field. This leads to the NPE in Request.recycle() --> StandardSession.endAccess().

      The test class executes several different tests like this, deploying different wars/ears. The wars all use the same context-root. It seems that after this failure happens on one test, the next test deploys its war OK, but the first web request gets a 503. So it seems the NPE has some lasting effect on the server. There is no server-side logging explaining the 503.

            rmaucher Remy Maucherat
            bstansbe@redhat.com Brian Stansberry
            Votes:
            0 Vote for this issue
            Watchers:
            0 Start watching this issue

              Created:
              Updated:
              Resolved: