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)