+1 please create a issue 2015-06-11 1:13 GMT+02:00 Adam Cornett <[email protected]>:
> If the session is invalidated during the processing of the request an > exception is thrown when OpenWebBeans is cleaning up. > > The issue is in the WebContextsService.destroyRequestContext method, which > tries to get the session from the request, however it calls the no-arg > getSession() > < > http://tomcat.apache.org/tomcat-7.0-doc/servletapi/javax/servlet/http/HttpServletRequest.html#getSession() > >, > which will, per the spec, try to create a new session if one does not > exist. However since the response has been committed this is not allowed > to create a new session and an exception is thrown. > The solution is to call getSession(false) > < > http://tomcat.apache.org/tomcat-7.0-doc/servletapi/javax/servlet/http/HttpServletRequest.html#getSession(boolean) > >, > which will return null if the session does not exist. This seems to be the > desired behavior anyway since the result of the call is null checked a few > lines later. > > I have tested this change in our application and it produces the desired > behavior. > > Current code: > > > Object payload = null; > if (context.getServletRequest() != null) > { > payload = context.getServletRequest().getSession(); > } > > webBeansContext.getBeanManagerImpl().fireContextLifecyleEvent( > payload != null ? payload : new Object(), > DestroyedLiteral.INSTANCE_SESSION_SCOPED); > > Suggested fix: > > > Object payload = null; > if (context.getServletRequest() != null) > { > payload = context.getServletRequest().getSession(false); > } > > webBeansContext.getBeanManagerImpl().fireContextLifecyleEvent( > payload != null ? payload : new Object(), > DestroyedLiteral.INSTANCE_SESSION_SCOPED); > > -- > Adam Cornett > [email protected] > (678) 296-1150 >
