]
Stuart Douglas reassigned WFLY-4712:
------------------------------------
Assignee: Paul Ferraro (was: Stuart Douglas)
Old session id in request crashes servlet handler before reaching
rest endpoint
-------------------------------------------------------------------------------
Key: WFLY-4712
URL:
https://issues.jboss.org/browse/WFLY-4712
Project: WildFly
Issue Type: Bug
Components: CDI / Weld, Clustering, Web (Undertow), Web Services
Affects Versions: 8.1.0.Final, 8.2.0.Final
Environment: SmartOS, CentOS 7, Oracle JDK 7
Reporter: Michael Noack
Assignee: Paul Ferraro
Priority: Critical
Clients with old/wrong JSESSIONIDs in requests will get a 500 internal server error. The
rest endpoint they call won't be reached, even if no session information is required
to process the request.
This is particularly annoying in A/B-deployments where two or more server-groups are used
for role-out of new deployments of the same web application. Clients that are connected to
"server-group A" will get a 500 for their request, once the load-balancer
switches them to "server-group B".
2015-06-01 12:37:19,642 ERROR [io.undertow.request] (default task-339) UT005023:
Exception handling request to /myApp/status: java.lang.NullPointerException
at
org.wildfly.clustering.web.infinispan.session.coarse.CoarseImmutableSessionAttributes.getAttributeNames(CoarseImmutableSessionAttributes.java:51)
at
org.wildfly.clustering.web.infinispan.session.InfinispanSessionManager.findListeners(InfinispanSessionManager.java:319)
at
org.wildfly.clustering.web.infinispan.session.InfinispanSessionManager.triggerPostActivationEvents(InfinispanSessionManager.java:308)
at
org.wildfly.clustering.web.infinispan.session.InfinispanSessionManager.findSession(InfinispanSessionManager.java:163)
at
org.wildfly.clustering.web.undertow.session.DistributableSessionManager.getSession(DistributableSessionManager.java:115)
at
io.undertow.servlet.spec.ServletContextImpl.getSession(ServletContextImpl.java:688)
[undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at
io.undertow.servlet.spec.HttpServletRequestImpl.getSession(HttpServletRequestImpl.java:364)
[undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at org.jboss.weld.servlet.SessionHolder.requestInitialized(SessionHolder.java:47)
[weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05]
at
org.jboss.weld.servlet.HttpContextLifecycle.requestInitialized(HttpContextLifecycle.java:212)
[weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05]
at
org.jboss.weld.servlet.WeldInitialListener.requestInitialized(WeldInitialListener.java:160)
[weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05]
at
io.undertow.servlet.core.ApplicationListeners.requestInitialized(ApplicationListeners.java:216)
[undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at
io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:260)
[undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at
io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:247)
[undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at
io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:76)
[undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at
io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:166)
[undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:197)
[undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:759)
[undertow-core-1.1.0.Final.jar:1.1.0.Final]
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
[rt.jar:1.7.0-internal]
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
[rt.jar:1.7.0-internal]
at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0-internal]
2015-06-01 12:37:19,648 ERROR [io.undertow.servlet.request] (default task-339) UT015005:
Error invoking method requestDestroyed on listener class
org.jboss.weld.servlet.WeldInitialListener: java.lang.NullPointerException
at
org.jboss.weld.context.AbstractBoundContext.deactivate(AbstractBoundContext.java:71)
[weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05]
at
org.jboss.weld.context.http.HttpRequestContextImpl.deactivate(HttpRequestContextImpl.java:72)
[weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05]
at
org.jboss.weld.servlet.HttpContextLifecycle.requestDestroyed(HttpContextLifecycle.java:282)
[weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05]
at
org.jboss.weld.servlet.WeldInitialListener.requestDestroyed(WeldInitialListener.java:143)
[weld-core-impl-2.2.6.Final.jar:2014-10-03 10:05]
at
io.undertow.servlet.core.ApplicationListeners.requestDestroyed(ApplicationListeners.java:225)
[undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at
io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:304)
[undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at
io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:247)
[undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at
io.undertow.servlet.handlers.ServletInitialHandler.access$000(ServletInitialHandler.java:76)
[undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at
io.undertow.servlet.handlers.ServletInitialHandler$1.handleRequest(ServletInitialHandler.java:166)
[undertow-servlet-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:197)
[undertow-core-1.1.0.Final.jar:1.1.0.Final]
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:759)
[undertow-core-1.1.0.Final.jar:1.1.0.Final]
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
[rt.jar:1.7.0-internal]
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
[rt.jar:1.7.0-internal]
at java.lang.Thread.run(Thread.java:745) [rt.jar:1.7.0-internal]
The expected behavior is that:
A) wildfly should simply create a new session (which it already does)
B) wildfly should process the request as if the user came with no session information at
all (instead of returning a 500 server error)