Mark;

Could you revert your last changes? I will dig into details about this. This 
part effects lots of place in codebase. 

Therefore we may get conflicts :(

Thanks;

--Gurkan




________________________________
From: Gurkan Erdogdu <[email protected]>
To: [email protected]
Sent: Tue, February 9, 2010 9:11:24 PM
Subject: Re: AW: svn commit: r908140 - in 
/openwebbeans/trunk/webbeans-impl/src: main/java/org/apache/webbeans/container/ 
main/java/org/apache/webbeans/context/ main/java/org/apache/webbeans/intercept/ 
main/java/org/apache/webbeans/util/ test/java/org/apache/webbeans/t...

Hello Mark;

I think that problem may seems to be removed but there are some symptoms/side 
effects. In BeanManager#getReference client gives CreationalContext instance. 
We have to keep this creational context with owner bean as long as bean is not 
destroyed. 

But in your committed NormalSccopedInterceptorHandler, problems are:

1* Lost of client provided CreationalContext (Because you create a new instance 
of CreationalContext if thread local is empty)
2* Remove thread local instance in finally even if bean is not destroyed



Thanks;

--Gurkan



________________________________
From: Mark Struberg <[email protected]>
To: [email protected]
Sent: Tue, February 9, 2010 8:26:24 PM
Subject: AW: svn commit: r908140 - in /openwebbeans/trunk/webbeans-impl/src: 
main/java/org/apache/webbeans/container/ main/java/org/apache/webbeans/context/ 
main/java/org/apache/webbeans/intercept/ main/java/org/apache/webbeans/util/ 
test/java/org/apache/webbeans/t...

Gurkan, it would be great if you could review my changes, because this is a 
very difficult area!

txs and LieGrue,
strub

--- [email protected] <[email protected]> schrieb am Di, 9.2.2010:

> Von: [email protected] <[email protected]>
> Betreff: svn commit: r908140 - in /openwebbeans/trunk/webbeans-impl/src: 
> main/java/org/apache/webbeans/container/ 
> main/java/org/apache/webbeans/context/ 
> main/java/org/apache/webbeans/intercept/ main/java/org/apache/webbeans/util/ 
> test/java/org/apache/webbeans/t...
> An: [email protected]
> Datum: Dienstag, 9. Februar 2010, 19:11
> Author: struberg
> Date: Tue Feb  9 18:11:38 2010
> New Revision: 908140
> 
> URL: http://svn.apache.org/viewvc?rev=908140&view=rev
> Log:
> OWB-272 fix memory leak caused by proxies (at least most of
> it)
> 
> Modified:
>    
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
>    
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java
>    
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
>    
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
>    
> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/intercept/webbeans/CallingBusinessInConstructorTest.java
> 
> Modified:
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
> URL: 
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java?rev=908140&r1=908139&r2=908140&view=diff
> ==============================================================================
> ---
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
> (original)
> +++
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java
> Tue Feb  9 18:11:38 2010
> @@ -739,9 +739,7 @@
>          
>    //Create Managed Bean Proxy
>              else
>          
>    {  
> -              
> boolean proxyCacheable =
> WebBeansUtil.isProxyForScopeCachable(bean.getScope());
> -                
> -                if
> (proxyCacheable && this.proxyMap.containsKey(bean))
> +                if
> (this.proxyMap.containsKey(bean))
>              
>    {
>                
>      instance =
> this.proxyMap.get(bean);
>              
>    }
> @@ -749,11 +747,8 @@
>              
>    {
>                
>      instance =
> JavassistProxyFactory.createNormalScopedBeanProxy(bean,creationalContext);
>                
>      
> -              
>     if(proxyCacheable)
> -              
>     {
> -              
>         this.proxyMap.put(bean,
> instance);  
> -              
>     }    
> -              
>    
> +              
>     this.proxyMap.put(bean,
> instance);  
> +
>                
>      //push this proxy instance into
> creational context
>                
>      if(creationalContext instanceof
> CreationalContextImpl)
>                
>      {
> 
> Modified:
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java
> URL: 
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java?rev=908140&r1=908139&r2=908140&view=diff
> ==============================================================================
> ---
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java
> (original)
> +++
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/ContextFactory.java
> Tue Feb  9 18:11:38 2010
> @@ -89,8 +89,11 @@
>       */
>      public static void
> initRequestContext(ServletRequestEvent event)
>      {
> -        requestContext.set(new
> RequestContext());// set thread local
> -      
> requestContext.get().setActive(true);
> +        RequestContext rq = new
> RequestContext();
> +        rq.setActive(true);
> +
> +        requestContext.set(rq);// set
> thread local
> +        RequestContext rq2 =
> requestContext.get();
>          
>          if(event != null)
>          {
> 
> Modified:
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
> URL: 
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java?rev=908140&r1=908139&r2=908140&view=diff
> ==============================================================================
> ---
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
> (original)
> +++
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/intercept/NormalScopedBeanInterceptorHandler.java
> Tue Feb  9 18:11:38 2010
> @@ -32,26 +32,55 @@
>  {
>      private static final long
> serialVersionUID = -7169354477951284657L;
>  
> -    private CreationalContext<?>
> creationalContext;
> -    
> -    
> -    public
> NormalScopedBeanInterceptorHandler(AbstractBean<?>
> bean, CreationalContext<?> creationalContext)
> +    // A creationalContext has a very short
> lifespan. So we can use a ThreadLocal to pass it over
> +    // if we make sure that it is cleaned up
> properly!
> +    private static
> ThreadLocal<CreationalContext<Object>>
> creationalContxt = new
> ThreadLocal<CreationalContext<Object>>();
> +
> +    public
> NormalScopedBeanInterceptorHandler(AbstractBean<?>
> bean, CreationalContext<?> cc)
>      {
>          super(bean);
> -        this.creationalContext =
> creationalContext;
> +      
> creationalContxt.set((CreationalContext<Object>) cc);
>      }
>      
>      @SuppressWarnings("unchecked")
>      @Override
>      public Object invoke(Object
> instance, Method method, Method proceed, Object[] arguments)
> throws Exception
>      {
> +        BeanManagerImpl beanManager =
> BeanManagerImpl.getManager();
> +
>          //Context of the
> bean
> -        Context webbeansContext =
> BeanManagerImpl.getManager().getContext(bean.getScope());
> -        
> -        //Get bean instance from
> context
> -        Object webbeansInstance =
> webbeansContext.get((Contextual<Object>)this.bean,
> (CreationalContext<Object>)this.creationalContext);
> -        
> -        // TODO Auto-generated method
> stub
> +        Context webbeansContext =
> beanManager.getContext(bean.getScope());
> +        Object webbeansInstance =
> webbeansContext.get(this.bean);
> +              
>                
>                
>                
>      C
> +        if (webbeansInstance == null)
> +        {
> +          
> CreationalContext<Object> cc =
> creationalContxt.get();
> +
> +            if (cc == null)
> +            {
> +                //
> we need to create the CreationalContext ourself and store
> it
> +              
> try
> +                {
> +              
>     cc = (CreationalContext<Object>)
> beanManager.createCreationalContext(bean);
> +              
>     creationalContxt.set(cc);
> +              
>     //Get bean instance from context
> +              
>     webbeansInstance =
> webbeansContext.get((Contextual<Object>)this.bean,
> cc);
> +                }
> +              
> finally
> +                {
> +              
>     // make sure that we remove the cc from the
> thread in the handler who created it
> +              
>     creationalContxt.remove();
> +                }
> +            }
> +            else
> +            {
> +              
> //Get bean instance from context
> +              
> webbeansInstance =
> webbeansContext.get((Contextual<Object>)this.bean,
> cc);
> +            }
> +
> +        }
> +
> +
>          return
> super.invoke(webbeansInstance, method, proceed, arguments);
>      }
>      
> 
> Modified:
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
> URL: 
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java?rev=908140&r1=908139&r2=908140&view=diff
> ==============================================================================
> ---
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
> (original)
> +++
> openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/util/WebBeansUtil.java
> Tue Feb  9 18:11:38 2010
> @@ -2297,17 +2297,6 @@
>  
>      }    
>      
> -    public static boolean
> isProxyForScopeCachable(Class<? extends Annotation>
> scopeType)
> -    {
> -      
> Asserts.assertNotNull(scopeType, "Scope type is null");
> -      
> if(scopeType.equals(ApplicationScoped.class))
> -        {
> -            return true;
> -        }
> -        
> -        return false;
> -    }
> -    
>      public static boolean
> isDependent(Bean<?> bean)
>      {
>      
>    if(bean.getScope().equals(Dependent.class))
> 
> Modified:
> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/intercept/webbeans/CallingBusinessInConstructorTest.java
> URL: 
> http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/intercept/webbeans/CallingBusinessInConstructorTest.java?rev=908140&r1=908139&r2=908140&view=diff
> ==============================================================================
> ---
> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/intercept/webbeans/CallingBusinessInConstructorTest.java
> (original)
> +++
> openwebbeans/trunk/webbeans-impl/src/test/java/org/apache/webbeans/test/unittests/intercept/webbeans/CallingBusinessInConstructorTest.java
> Tue Feb  9 18:11:38 2010
> @@ -25,8 +25,10 @@
>  import
> org.apache.webbeans.test.component.intercept.webbeans.SecureInterceptor;
>  import org.junit.After;
>  import org.junit.Before;
> +import org.junit.Ignore;
>  import org.junit.Test;
>  
> +...@ignore
>  public class CallingBusinessInConstructorTest extends
> TestContext
>  {
>      public
> CallingBusinessInConstructorTest()
> 
> 
> 

__________________________________________________
Do You Yahoo!?
Sie sind Spam leid? Yahoo! Mail verfügt über einen herausragenden Schutz gegen 
Massenmails. 
http://mail.yahoo.com



      ___________________________________________________________________
Yahoo! Türkiye açıldı!  http://yahoo.com.tr
İnternet üzerindeki en iyi içeriği Yahoo! Türkiye sizlere sunuyor!


      ___________________________________________________________________
Yahoo! Türkiye açıldı!  http://yahoo.com.tr
İnternet üzerindeki en iyi içeriği Yahoo! Türkiye sizlere sunuyor!

Reply via email to