You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by ar...@apache.org on 2014/12/09 14:53:41 UTC

svn commit: r1644048 - /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java

Author: arne
Date: Tue Dec  9 13:53:41 2014
New Revision: 1644048

URL: http://svn.apache.org/r1644048
Log:
OWB-1013: Fixed race-condition

Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java?rev=1644048&r1=1644047&r2=1644048&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/instance/InstanceImpl.java Tue Dec  9 13:53:41 2014
@@ -106,7 +106,6 @@ public class InstanceImpl<T> implements
      * @return bean instance
      */
     @Override
-    @SuppressWarnings("unchecked")
     public T get()
     {
         Annotation[] anns = new Annotation[qualifierAnnotations.size()];
@@ -114,43 +113,17 @@ public class InstanceImpl<T> implements
 
         Set<Bean<?>> beans = resolveBeans();
 
-        BeanManagerImpl beanManager = webBeansContext.getBeanManagerImpl();
-
-        Bean<?> bean = beanManager.resolve(beans);
+        Bean<?> bean = webBeansContext.getBeanManagerImpl().resolve(beans);
 
         if (bean == null)
         {
             InjectionExceptionUtil.throwUnsatisfiedResolutionException(ClassUtil.getClazz(injectionClazz), injectionPoint, anns);
         }
 
-        CreationalContextImpl<?> creationalContext = beanManager.createCreationalContext(bean);
-
-        if (!(creationalContext instanceof CreationalContextImpl))
-        {
-            creationalContext = webBeansContext.getCreationalContextFactory().wrappedCreationalContext(creationalContext, bean);
-        }
-
-        ((CreationalContextImpl<?>)creationalContext).putInjectionPoint(injectionPoint);
-        try
-        {
-            final T reference = (T) beanManager.getReference(bean, injectionClazz, creationalContext);
-            if (creationalContexts == null)
-            {
-                creationalContexts = new IdentityHashMap<Object, CreationalContextImpl<?>>();
-            }
-            creationalContexts.put(reference, creationalContext);
-            if (WebBeansUtil.isDependent(bean))
-            {
-                parentCreationalContext.addDependent(bean, reference);
-            }
-            return reference;
-        }
-        finally
-        {
-            ((CreationalContextImpl<?>)creationalContext).removeInjectionPoint();
-        }
+        return create(bean);
     }
 
+
     /**
      * Returns set of resolved beans.
      * 
@@ -264,7 +237,6 @@ public class InstanceImpl<T> implements
      * {@inheritDoc}
      */
     @Override
-    @SuppressWarnings("unchecked")
     public Iterator<T> iterator()
     {
         Set<Bean<?>> beans = resolveBeans();
@@ -274,7 +246,7 @@ public class InstanceImpl<T> implements
         {
             for(Bean<?> bean : beans)
             {
-                T instance = (T) webBeansContext.getBeanManagerImpl().getReference(bean,null, parentCreationalContext);
+                T instance = create(bean);
                 instances.add(instance);
             }
         }
@@ -321,6 +293,32 @@ public class InstanceImpl<T> implements
             creationalContext.destroyDependent(instance);
         }
     }
+
+    @SuppressWarnings("unchecked")
+    private T create(Bean<?> bean) {
+        BeanManagerImpl beanManager = webBeansContext.getBeanManagerImpl();
+        CreationalContextImpl<?> creationalContext = beanManager.createCreationalContext(bean);
+
+        creationalContext.putInjectionPoint(injectionPoint);
+        try
+        {
+            final T reference = (T) beanManager.getReference(bean, injectionClazz, creationalContext);
+            if (creationalContexts == null)
+            {
+                creationalContexts = new IdentityHashMap<Object, CreationalContextImpl<?>>();
+            }
+            creationalContexts.put(reference, creationalContext);
+            if (WebBeansUtil.isDependent(bean))
+            {
+                parentCreationalContext.addDependent(bean, reference);
+            }
+            return reference;
+        }
+        finally
+        {
+            creationalContext.removeInjectionPoint();
+        }
+    }
     
     private void writeObject(java.io.ObjectOutputStream op) throws IOException
     {