You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@openwebbeans.apache.org by "Adam Cornett (JIRA)" <ji...@apache.org> on 2015/06/12 05:26:02 UTC

[jira] [Created] (OWB-1083) WebContextsService errors when servlet session invalidated during request lifecycle

Adam Cornett created OWB-1083:
---------------------------------

             Summary: WebContextsService errors when servlet session invalidated during request lifecycle
                 Key: OWB-1083
                 URL: https://issues.apache.org/jira/browse/OWB-1083
             Project: OpenWebBeans
          Issue Type: Bug
          Components: Web
    Affects Versions: 1.6.0
            Reporter: Adam Cornett


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(),
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),
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:

{code}
            Object payload = null;
            if (context.getServletRequest() != null)
            {
                payload = context.getServletRequest().getSession();
            }

            webBeansContext.getBeanManagerImpl().fireContextLifecyleEvent(
                payload != null ? payload : new Object(), DestroyedLiteral.INSTANCE_SESSION_SCOPED);
{code}

Suggested fix:

{code}
            Object payload = null;
            if (context.getServletRequest() != null)
            {
                payload = context.getServletRequest().getSession(false);
            }

            webBeansContext.getBeanManagerImpl().fireContextLifecyleEvent(
                payload != null ? payload : new Object(), DestroyedLiteral.INSTANCE_SESSION_SCOPED);

{code}




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)