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
{