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

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

     [ https://issues.apache.org/jira/browse/OWB-1083?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]

Mark Struberg resolved OWB-1083.
--------------------------------
       Resolution: Fixed
    Fix Version/s: 1.6.1

committed to trunk. And also fixed one other similar problem. Plz retest!

> 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
>            Assignee: Mark Struberg
>             Fix For: 1.6.1
>
>
> 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)