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/04/29 10:09:25 UTC

svn commit: r1590909 - in /openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject: AbstractInjectable.java InjectableConstructor.java InjectableMethod.java

Author: arne
Date: Tue Apr 29 08:09:25 2014
New Revision: 1590909

URL: http://svn.apache.org/r1590909
Log:
OWB-949: Implemented @TransientReference

Modified:
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/InjectableConstructor.java
    openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/InjectableMethod.java

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java?rev=1590909&r1=1590908&r2=1590909&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/AbstractInjectable.java Tue Apr 29 08:09:25 2014
@@ -24,7 +24,9 @@ import java.util.ArrayList;
 import java.util.List;
 
 import javax.enterprise.context.spi.Contextual;
+import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.IllegalProductException;
+import javax.enterprise.inject.TransientReference;
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.InjectionPoint;
 import javax.enterprise.inject.spi.Producer;
@@ -53,11 +55,14 @@ public abstract class AbstractInjectable
     private Producer<?> owner;
     
     protected final CreationalContextImpl<?> creationalContext;
+    
+    protected CreationalContextImpl<?> transientCreationalContext;
 
     protected AbstractInjectable(Producer<?> owner, CreationalContextImpl<?> creationalContext)
     {
         this.owner = owner;
         this.creationalContext = creationalContext;
+        this.transientCreationalContext = creationalContext.getWebBeansContext().getBeanManagerImpl().createCreationalContext(creationalContext.getContextual());
     }
 
     /**
@@ -90,9 +95,19 @@ public abstract class AbstractInjectable
                 }
             }
         }
+        
+        CreationalContext<?> injectionPointContext;
+        if (injectionPoint.getAnnotated().isAnnotationPresent(TransientReference.class))
+        {
+            injectionPointContext = transientCreationalContext;
+        }
+        else
+        {
+            injectionPointContext = creationalContext;
+        }
 
         //Gets injectable reference for injected bean
-        injected = (T) beanManager.getInjectableReference(injectionPoint, creationalContext);
+        injected = (T) beanManager.getInjectableReference(injectionPoint, injectionPointContext);
 
         if (injected == null && beanManager.isNormalScope(injectedBean.getScope()))
         {

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/InjectableConstructor.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/InjectableConstructor.java?rev=1590909&r1=1590908&r2=1590909&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/InjectableConstructor.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/InjectableConstructor.java Tue Apr 29 08:09:25 2014
@@ -70,6 +70,7 @@ public class InjectableConstructor<T> ex
             }
             
             instance = con.newInstance(createParameters());
+            transientCreationalContext.release();
             return instance;
         }
         catch (Exception e)

Modified: openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/InjectableMethod.java
URL: http://svn.apache.org/viewvc/openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/InjectableMethod.java?rev=1590909&r1=1590908&r2=1590909&view=diff
==============================================================================
--- openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/InjectableMethod.java (original)
+++ openwebbeans/trunk/webbeans-impl/src/main/java/org/apache/webbeans/inject/InjectableMethod.java Tue Apr 29 08:09:25 2014
@@ -159,6 +159,10 @@ public class InjectableMethod<T> extends
         {
             throw new WebBeansException(e);
         }
+        finally
+        {
+            transientCreationalContext.release();
+        }
     }
 
     //X TODO is this still needed? If not we can also drop the whole dependentParameters...