Thank you Mark and Romain for investigating and fixing!! - Rohit
On Fri, Feb 24, 2012 at 5:31 PM, <[email protected]> wrote: > Author: struberg > Date: Fri Feb 24 22:31:49 2012 > New Revision: 1293457 > > URL: http://svn.apache.org/viewvc?rev=1293457&view=rev > Log: > OWB-648 fix TCK > > txs to Romain Manni-Bucau for the patch! > > Modified: > > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionPointBean.java > > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java > > Modified: > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionPointBean.java > URL: > http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionPointBean.java?rev=1293457&r1=1293456&r2=1293457&view=diff > ============================================================================== > --- > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionPointBean.java > (original) > +++ > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/component/InjectionPointBean.java > Fri Feb 24 22:31:49 2012 > @@ -31,7 +31,6 @@ public class InjectionPointBean extends > { > private static final WebBeansLogger logger = > WebBeansLogger.getLogger(InjectionPointBean.class); > > - //X TODO refactor. public static variables are utterly ugly > private static ThreadLocal<Stack<InjectionPoint>> localThreadlocalStack = > new ThreadLocal<Stack<InjectionPoint>>(); > > private static Stack<InjectionPoint> getStackOfInjectionPoints() > @@ -80,6 +79,11 @@ public class InjectionPointBean extends > addApiType(Object.class); > } > > + public static boolean isStackEmpty() > + { > + return getStackOfInjectionPoints().isEmpty(); > + } > + > @Override > protected InjectionPoint createInstance(CreationalContext<InjectionPoint> > creationalContext) > { > > Modified: > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java > URL: > http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java?rev=1293457&r1=1293456&r2=1293457&view=diff > ============================================================================== > --- > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java > (original) > +++ > openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/container/BeanManagerImpl.java > Fri Feb 24 22:31:49 2012 > @@ -62,6 +62,7 @@ import javax.naming.Referenceable; > import javax.naming.StringRefAddr; > import org.apache.webbeans.component.AbstractOwbBean; > import org.apache.webbeans.component.EnterpriseBeanMarker; > +import org.apache.webbeans.component.InjectionPointBean; > import org.apache.webbeans.component.InjectionTargetBean; > import org.apache.webbeans.component.InjectionTargetWrapper; > import org.apache.webbeans.component.JmsBeanMarker; > @@ -827,17 +828,34 @@ public class BeanManagerImpl implements > InjectionResolver.injectionPoints.set(injectionPoint); > } > > - if(WebBeansUtil.isDependent(injectedBean)) > - { > - //Using owner creational context > - //Dependents use parent creational context > - instance = getReference(injectedBean, injectionPoint.getType(), > ownerCreationalContext); > + boolean ijbSet = false; > + if (InjectionPointBean.isStackEmpty()) > + { > + ijbSet = true; > + InjectionPointBean.setThreadLocal(injectionPoint); > } > - else > - { > - //New creational context for normal scoped beans > - CreationalContextImpl<Object> injectedCreational = > (CreationalContextImpl<Object>)createCreationalContext(injectedBean); > - instance = getReference(injectedBean, injectionPoint.getType(), > injectedCreational); > + > + try > + { > + if(WebBeansUtil.isDependent(injectedBean)) > + { > + //Using owner creational context > + //Dependents use parent creational context > + instance = getReference(injectedBean, > injectionPoint.getType(), ownerCreationalContext); > + } > + else > + { > + //New creational context for normal scoped beans > + CreationalContextImpl<Object> injectedCreational = > (CreationalContextImpl<Object>)createCreationalContext(injectedBean); > + instance = getReference(injectedBean, > injectionPoint.getType(), injectedCreational); > + } > + } > + finally > + { > + if (ijbSet) > + { > + InjectionPointBean.unsetThreadLocal(); > + } > } > > if(isSetIPForProducers) > >
