-
Bug
-
Resolution: Done
-
Critical
-
None
-
None
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.