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