cocoon-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Alexander Daniel <alexander.dan...@gmx.at>
Subject Re: [2.2] ThreadLocal use in PoolableProxyHandler
Date Fri, 03 Jul 2009 14:31:21 GMT
On 03.07.2009, at 14:20, Carsten Ziegeler wrote:

> Alexander Daniel wrote:
>> On 03.07.2009, at 10:41, Carsten Ziegeler wrote:
>>
>>> Alexander Daniel wrote:
>>>> Does somebody know why ThreadLocal is used in  
>>>> PoolableProxyHandler [1]
>>>> for the componentHolder in Cocoon 2.2?
>>>>
>>> Sure :)
>>>
>>> Whenever components are taken out of the pool they need to be put  
>>> back
>>> somehow, so they are available for other clients again.
>>> We use a thread local which is cleared when the request finishes,
>>> so all used components get back into the pool.
>>
>> Thanks for the answer Carsten. What you describe is done by the
>> destruction callback mechanism of Spring. But why can't we simply  
>> use a
>> direct reference [2] to the component? Why is a ThreadLocal used as  
>> key
>> to the component?
>>
> Hmm, not sure if I understand you correctly.
> The poolable factory returns a single instance to spring which is the
> proxy - spring has no knowledge of poolable components.
> Therefore the proxy together with a thread local is used to internally
> forward the method calls to instances from the pool. There is a  
> separate
> instance per thread - otherwise you would run into multi-threading
> issues as the same instance would be used across requests.

PoolableFactoryBean [2] creates a new PoolableProxyHandler instance  
[1] for each pooled component used in a pipeline, i.e. it will not be  
shared across different requests. Therefore I do not understand the  
use of ThreadLocal.

Alex

[1]
     public Object getObject() throws Exception {
         return Proxy.newProxyInstance(this.getClass().getClassLoader(),
                                       this.interfaces,
                                       new PoolableProxyHandler(this));
     }

[2] http://svn.apache.org/repos/asf/cocoon/trunk/core/cocoon-sitemap/cocoon-sitemap-impl/src/main/java/org/apache/cocoon/core/container/spring/avalon/PoolableFactoryBean.java

Mime
View raw message