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;
}
}