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)
>
>

Reply via email to