You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@openwebbeans.apache.org by st...@apache.org on 2012/12/05 11:17:25 UTC
svn commit: r1417338 - in
/openwebbeans/branches/owb_1.1.x/webbeans-impl/src/main/java/org/apache/webbeans:
context/AbstractContext.java portable/creation/AbstractProducer.java
portable/creation/InjectionTargetProducer.java
Author: struberg
Date: Wed Dec 5 10:17:24 2012
New Revision: 1417338
URL: http://svn.apache.org/viewvc?rev=1417338&view=rev
Log:
OWB-734 add quicks mode for getting the right CC
previously we only used the CC which got used for creating
the _last_ contextual instance
Modified:
openwebbeans/branches/owb_1.1.x/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java
openwebbeans/branches/owb_1.1.x/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/AbstractProducer.java
openwebbeans/branches/owb_1.1.x/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducer.java
Modified: openwebbeans/branches/owb_1.1.x/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java
URL: http://svn.apache.org/viewvc/openwebbeans/branches/owb_1.1.x/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java?rev=1417338&r1=1417337&r2=1417338&view=diff
==============================================================================
--- openwebbeans/branches/owb_1.1.x/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java (original)
+++ openwebbeans/branches/owb_1.1.x/webbeans-impl/src/main/java/org/apache/webbeans/context/AbstractContext.java Wed Dec 5 10:17:24 2012
@@ -177,6 +177,12 @@ public abstract class AbstractContext im
@SuppressWarnings("unchecked")
public <T> CreationalContext<T> getCreationalContext(Contextual<T> contextual)
{
+ if (componentInstanceMap == null)
+ {
+ // this happens with @Dependent scoped beans
+ return null;
+ }
+
BeanInstanceBag<?> bag = componentInstanceMap.get(contextual);
if (bag != null)
{
Modified: openwebbeans/branches/owb_1.1.x/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/AbstractProducer.java
URL: http://svn.apache.org/viewvc/openwebbeans/branches/owb_1.1.x/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/AbstractProducer.java?rev=1417338&r1=1417337&r2=1417338&view=diff
==============================================================================
--- openwebbeans/branches/owb_1.1.x/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/AbstractProducer.java (original)
+++ openwebbeans/branches/owb_1.1.x/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/AbstractProducer.java Wed Dec 5 10:17:24 2012
@@ -20,11 +20,14 @@ package org.apache.webbeans.portable.cre
import java.util.Set;
+import javax.enterprise.context.spi.Context;
import javax.enterprise.context.spi.CreationalContext;
+import javax.enterprise.inject.spi.BeanManager;
import javax.enterprise.inject.spi.InjectionPoint;
import javax.enterprise.inject.spi.Producer;
import org.apache.webbeans.component.OwbBean;
+import org.apache.webbeans.context.AbstractContext;
import org.apache.webbeans.context.creational.CreationalContextImpl;
/**
@@ -39,9 +42,6 @@ public abstract class AbstractProducer<T
/**Bean instance*/
protected OwbBean<T> bean;
- /**Passing creational context*/
- protected CreationalContext<T> creationalContext = null;
-
/**
* Create a new producer with given bean.
*
@@ -72,11 +72,8 @@ public abstract class AbstractProducer<T
creationalContext = bean.getWebBeansContext().getCreationalContextFactory().wrappedCreationalContext(creationalContext, bean);
}
- //Save it
- this.creationalContext = creationalContext;
-
//Create an instance of the bean
- instance = bean.createNewInstance(this.creationalContext);
+ instance = bean.createNewInstance(creationalContext);
return instance;
}
@@ -86,10 +83,37 @@ public abstract class AbstractProducer<T
*/
public void dispose(T instance)
{
- bean.destroyCreatedInstance(instance, creationalContext);
+ CreationalContext<T> cc= getCreationalContext();
+ bean.destroyCreatedInstance(instance, cc);
}
/**
+ * This is a quirks mode function :(
+ * The problem is that we also need the CC for detecting the
+ * interceptors for PreDestroy and PostConstruct methods for example.
+ * But sadly the CDI SPI doesn't pass the CC :/
+ *
+ * @return
+ */
+ protected CreationalContext<T> getCreationalContext()
+ {
+ CreationalContext<T> cc = null;
+ BeanManager bm = bean.getWebBeansContext().getBeanManagerImpl();
+ Context ctx = bm.getContext(bean.getScope());
+ if (ctx instanceof AbstractContext)
+ {
+ cc = ((AbstractContext) ctx).getCreationalContext(bean);
+ }
+
+ if (cc == null)
+ {
+ cc = bm.createCreationalContext(bean);
+ }
+ return cc;
+ }
+
+
+ /**
* Returns actual bean instance.
*
* @param <X> bean type info
Modified: openwebbeans/branches/owb_1.1.x/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducer.java
URL: http://svn.apache.org/viewvc/openwebbeans/branches/owb_1.1.x/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducer.java?rev=1417338&r1=1417337&r2=1417338&view=diff
==============================================================================
--- openwebbeans/branches/owb_1.1.x/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducer.java (original)
+++ openwebbeans/branches/owb_1.1.x/webbeans-impl/src/main/java/org/apache/webbeans/portable/creation/InjectionTargetProducer.java Wed Dec 5 10:17:24 2012
@@ -119,7 +119,7 @@ public class InjectionTargetProducer<T>
InjectionTargetBean<T> bean = getBean(InjectionTargetBean.class);
if(!(bean instanceof EnterpriseBeanMarker))
{
- bean.postConstruct(instance, creationalContext);
+ bean.postConstruct(instance, getCreationalContext());
}
}
@@ -129,7 +129,7 @@ public class InjectionTargetProducer<T>
public void preDestroy(T instance)
{
InjectionTargetBean<T> bean = getBean(InjectionTargetBean.class);
- bean.destroyCreatedInstance(instance, creationalContext);
+ bean.destroyCreatedInstance(instance, getCreationalContext());
}
}