better handling of creational contexts for web components

Project: http://git-wip-us.apache.org/repos/asf/tomee/repo
Commit: http://git-wip-us.apache.org/repos/asf/tomee/commit/3035c836
Tree: http://git-wip-us.apache.org/repos/asf/tomee/tree/3035c836
Diff: http://git-wip-us.apache.org/repos/asf/tomee/diff/3035c836

Branch: refs/heads/tomee-7.0.0-M1
Commit: 3035c83604755cacf8073d6cbcbd0992bd6ddcf9
Parents: 59e366a
Author: Romain Manni-Bucau <rmann...@gmail.com>
Authored: Mon Nov 2 10:22:16 2015 -0800
Committer: Romain Manni-Bucau <rmann...@gmail.com>
Committed: Mon Nov 2 10:22:16 2015 -0800

----------------------------------------------------------------------
 .../main/java/org/apache/openejb/core/WebContext.java | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tomee/blob/3035c836/container/openejb-core/src/main/java/org/apache/openejb/core/WebContext.java
----------------------------------------------------------------------
diff --git 
a/container/openejb-core/src/main/java/org/apache/openejb/core/WebContext.java 
b/container/openejb-core/src/main/java/org/apache/openejb/core/WebContext.java
index 55d98c1..073be91 100644
--- 
a/container/openejb-core/src/main/java/org/apache/openejb/core/WebContext.java
+++ 
b/container/openejb-core/src/main/java/org/apache/openejb/core/WebContext.java
@@ -25,7 +25,6 @@ import org.apache.openejb.cdi.ConstructorInjectionBean;
 import org.apache.webbeans.component.InjectionTargetBean;
 import org.apache.webbeans.config.WebBeansContext;
 
-import javax.enterprise.context.Dependent;
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.AnnotatedType;
 import javax.naming.Context;
@@ -132,7 +131,7 @@ public class WebContext {
     public <T> Instance newWeakableInstance(final Class<T> beanClass) throws 
OpenEJBException {
         final WebBeansContext webBeansContext = getWebBeansContext();
         final ConstructorInjectionBean<Object> beanDefinition = 
getConstructorInjectionBean(beanClass, webBeansContext);
-        final CreationalContext<Object> creationalContext;
+        CreationalContext<Object> creationalContext;
         final Object o;
         if (webBeansContext == null) {
             creationalContext = null;
@@ -155,6 +154,9 @@ public class WebContext {
         if (webBeansContext != null) {
             final InjectionTargetBean<Object> bean = 
InjectionTargetBean.class.cast(beanDefinition);
             bean.getInjectionTarget().inject(beanInstance, creationalContext);
+            if (shouldBeReleased(bean.getScope())) {
+                creationalContexts.put(beanInstance, creationalContext);
+            }
         }
         return new Instance(beanInstance, creationalContext);
     }
@@ -229,9 +231,7 @@ public class WebContext {
                 final InjectionTargetBean<Object> bean = 
InjectionTargetBean.class.cast(beanDefinition);
                 bean.getInjectionTarget().inject(beanInstance, 
creationalContext);
 
-                // if the bean is dependent simply cleanup the creational 
context once it is created
-                final Class<? extends Annotation> scope = 
beanDefinition.getScope();
-                if (scope == null || Dependent.class.equals(scope)) {
+                if (shouldBeReleased(beanDefinition.getScope())) {
                     creationalContexts.put(beanInstance, creationalContext);
                 }
             }
@@ -242,6 +242,10 @@ public class WebContext {
         }
     }
 
+    private boolean shouldBeReleased(final Class<? extends Annotation> scope) {
+        return scope == null || 
!getWebBeansContext().getBeanManagerImpl().isNormalScope(scope);
+    }
+
     public void setBindings(final Map<String, Object> bindings) {
         this.bindings = bindings;
     }

Reply via email to