+1 and txs for reporting!

LieGrue,
strub

> Am 11.06.2015 um 15:07 schrieb Thomas Andraschko 
> <[email protected]>:
> 
> +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