You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ge...@apache.org on 2010/08/12 08:50:33 UTC

svn commit: r984656 - /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/BeanInstanceBag.java

Author: gerdogdu
Date: Thu Aug 12 06:50:33 2010
New Revision: 984656

URL: http://svn.apache.org/viewvc?rev=984656&view=rev
Log:
adding java5 concurrency lock support

Modified:
    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/creational/BeanInstanceBag.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/context/creational/BeanInstanceBag.java?rev=984656&r1=984655&r2=984656&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 Thu Aug 12 06:50:33 2010
@@ -21,6 +21,8 @@ package org.apache.webbeans.context.crea
 import javax.enterprise.context.spi.Contextual;
 import javax.enterprise.context.spi.CreationalContext;
 import java.io.Serializable;
+import java.util.concurrent.locks.Lock;
+import java.util.concurrent.locks.ReentrantLock;
 
 public class BeanInstanceBag<T> implements Serializable
 {
@@ -28,6 +30,8 @@ public class BeanInstanceBag<T> implemen
     
     private T beanInstance;
     
+    private final Lock lock = new ReentrantLock();
+    
     public BeanInstanceBag(CreationalContext<T> beanCreationalContext)
     {
         this.beanCreationalContext = beanCreationalContext;
@@ -64,14 +68,23 @@ public class BeanInstanceBag<T> implemen
      * @param contextual
      * @return the single contextual instance for the context
      */
-    public synchronized T create(Contextual<T> contextual)
+    public T create(Contextual<T> contextual)
     {
-        // we need to check again, maybe we got blocked by a previous invocation
-        if (beanInstance == null)
+        try
+        {
+            this.lock.lock();
+            
+            // we need to check again, maybe we got blocked by a previous invocation
+            if (beanInstance == null)
+            {
+                beanInstance = contextual.create(beanCreationalContext);
+            }
+            
+        }finally
         {
-            beanInstance = contextual.create(beanCreationalContext);
+            this.lock.unlock();
         }
-
+        
         return beanInstance; 
     }
 }