Hi folks!

since this is pretty heavy stuff, I'd be happy if someone could review my 
changes.

txs and LieGrue,
strub




----- Original Message ----
> From: "[email protected]" <[email protected]>
> To: [email protected]
> Sent: Thu, August 12, 2010 12:51:26 AM
> Subject: svn commit: r984612 - in 
>/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context: 
>AbstractContext.java creational/BeanInstanceBag.java
> 
> Author: struberg
> Date: Wed Aug 11 22:51:26 2010
> New Revision:  984612
> 
> URL:  http://svn.apache.org/viewvc?rev=984612&view=rev
> Log:
> OWB-437 improve  synchronization block for creating new contextual instances
> 
> by moving it  to the ContextualBeanBag. This way only the beanbag will get 
> locked and not  the whole container anymore
> 
> Modified:
>      
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java
>
>       
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/BeanInstanceBag.java
>
> 
> Modified: 
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java
>
> URL: :  
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java?rev=984612&r1=984611&r2=984612&view=diff
>
> ==============================================================================
> --- 
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java
> a (original)
> +++  
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java
>  Wed Aug 11 22:51:26 2010
> @@ -195,7 +195,7 @@ public abstract class  AbstractContext im
>       * {...@inheritdoc} 
>        */
>      @SuppressWarnings("unchecked")
> -     protected synchronized <T> T getInstance(Contextual<T> contextual,  
>CreationalContext<T> creationalContext)
> +    protected  <T> T getInstance(Contextual<T> contextual,  
>CreationalContext<T> creationalContext)
>      {
>           T instance = null;
>         
> @@  -205,9 +205,11 @@ public abstract class AbstractContext im
>           {
>               createContextualBag(contextual, creationalContext);
>           }
> -        
> +
> +         bag =  (BeanInstanceBag<T>)componentInstanceMap.get(contextual);
> +
>           //Look for instance
> -         instance = 
>(T)componentInstanceMap.get(contextual).getBeanInstance();         
>
> +        instance =  bag.getBeanInstance();
>          if (instance !=  null)
>          {
>               return instance;
> @@ -225,16 +227,8 @@ public abstract class  AbstractContext im
>                   //No instance
>                   if(instance == null)
>                   {
> -                     instance = contextual.create(creationalContext);    
> -                 }
> -                 
> -                 //If succesfull creation
> -                 if (instance != null)
> -                 {
> -                     bag =  
>(BeanInstanceBag<T>)this.componentInstanceMap.get(contextual);
> -                      bag.setBeanInstance(instance);
> +                     instance = bag.create(contextual);    
>                  }
> -                 
>               }            
>           }
> 
> 
> Modified:  
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/BeanInstanceBag.java
>
> URL: 
>http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/BeanInstanceBag.java?rev=984612&r1=984611&r2=984612&view=diff
>
> ==============================================================================
> --- -  
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/BeanInstanceBag.java
>  (original)
> +++  
>openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/BeanInstanceBag.java
>  Wed Aug 11 22:51:26 2010
> @@ -18,6 +18,7 @@
>   */
>  package  org.apache.webbeans.context.creational;
> 
> +import  javax.enterprise.context.spi.Contextual;
>  import  javax.enterprise.context.spi.CreationalContext;
>  import java.io.Serializable;
> 
> @@ -25,7 +26,7 @@  public class BeanInstanceBag<T> implemen
>  {
>      private  final CreationalContext<T> beanCreationalContext;
>     
> -    private volatile T beanInstance;
> +    private T  beanInstance;
>     
>      public  BeanInstanceBag(CreationalContext<T> beanCreationalContext)
>       {
> @@ -58,4 +59,19 @@ public class BeanInstanceBag<T>  implemen
>          return beanInstance;
>       }
> 
> +    /**
> +     * Create the contextual instance  in a thread safe fashion
> +     * @param contextual
> +      * @return the single contextual instance for the context
> +      */
> +    public synchronized T create(Contextual<T>  contextual)
> +    {
> +        // we need to  check again, maybe we got blocked by a previous 
>invocation
> +         if (beanInstance == null)
> +         {
> +            beanInstance =  contextual.create(beanCreationalContext);
> +         }
> +
> +        return beanInstance; 
> +     }
>  }
> 
> 
> 


      

Reply via email to