[
https://issues.apache.org/jira/browse/OWB-466?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Jakob Korherr updated OWB-466:
------------------------------
Attachment: OWB-466.patch
> Ensure removal of all ThreadLocal values
> ----------------------------------------
>
> Key: OWB-466
> URL: https://issues.apache.org/jira/browse/OWB-466
> Project: OpenWebBeans
> Issue Type: Bug
> Affects Versions: 1.0.0-alpha-2
> Reporter: Jakob Korherr
> Assignee: Gurkan Erdogdu
> Attachments: OWB-466.patch
>
>
> While running our automated webapp tests with MyFaces CODI and OWB, I always
> got the following log entries:
> 30.09.2010 16:14:14 org.apache.catalina.loader.WebappClassLoader
> clearThreadLocalMap
> SCHWERWIEGEND: A web application created a ThreadLocal with key of type
> [java.lang.ThreadLocal] (value [java.lang.threadlo...@543c944f]) and a value
> of type [org.apache.webbeans.inject.impl.InjectionPointImpl] (value [Field
> Injection Point, field name : postConstructApplicationEvent, Bean Owner :
> [Name:systemEventBroadcaster,WebBeans Type:MANAGED,API
> Types:[java.lang.Object,org.apache.myfaces.extensions.cdi.jsf2.impl.listener.system.SystemEventBroadcaster],Qualifiers:[javax.enterprise.inject.Any,javax.enterprise.inject.Default,javax.inject.Named]]])
> but failed to remove it when the web application was stopped. To prevent a
> memory leak, the ThreadLocal has been forcibly removed.
> 30.09.2010 16:14:14 org.apache.catalina.loader.WebappClassLoader
> clearThreadLocalMap
> SCHWERWIEGEND: A web application created a ThreadLocal with key of type
> [java.lang.ThreadLocal] (value [java.lang.threadlo...@552cf9bd]) and a value
> of type [org.apache.webbeans.context.SessionContext] (value
> [org.apache.webbeans.context.sessioncont...@7bc012fa]) but failed to remove
> it when the web application was stopped. To prevent a memory leak, the
> ThreadLocal has been forcibly removed.
> 30.09.2010 16:14:14 org.apache.catalina.loader.WebappClassLoader
> clearThreadLocalMap
> SCHWERWIEGEND: A web application created a ThreadLocal with key of type
> [java.lang.ThreadLocal] (value [java.lang.threadlo...@552cf9bd]) and a value
> of type [org.apache.webbeans.context.SessionContext] (value
> [org.apache.webbeans.context.sessioncont...@7f1e1a8e]) but failed to remove
> it when the web application was stopped. To prevent a memory leak, the
> ThreadLocal has been forcibly removed.
> 30.09.2010 16:14:14 org.apache.coyote.http11.Http11Protocol destroy
> ..saying that Tomcat's webappclassloader had to remove some ThreadLocal
> values from the ThreadMap.
> I was able to track the affected ThreadLocal instances down:
> InstanceBean.local and WebContextsService.sessionContext.
> After digging into the code, I found out that there are many remove()
> operations on various ThreadLocal instances, but it was not thought that
> remove() only works for the current Thread. Thus when a ThreadLocal is set
> during a request it won't be removed when the container stops, because the
> shutdown-thread is clearly not the same as the request-thread.
> This means the request-ThreadLocal instances have to be removed after every
> request has ended - in requestDestroyed(ServletRequestEvent event).
> The provided patch adds some remove() calls in requestDestroyed() and also in
> afterStopApplication(). With this patch none of the above error-logs are
> shown in any of my test cases. However there might be some other ThreadLocals
> which should be cleaned up at every request, but this solution currently
> works for me!
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.