+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
>

Reply via email to