You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gp...@apache.org on 2013/10/13 20:11:43 UTC

svn commit: r1531726 - in /myfaces/core/trunk/impl/src/main/java/org/apache/myfaces: application/cdi/DependentBeanEntry.java cdi/DependentInstanceEntry.java cdi/impl/CDIAnnotationInjectionProvider.java

Author: gpetracek
Date: Sun Oct 13 18:11:43 2013
New Revision: 1531726

URL: http://svn.apache.org/r1531726
Log:
MYFACES-3786 fixed handling of injected dependent-scoped beans

Added:
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/cdi/DependentInstanceEntry.java
Modified:
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/cdi/DependentBeanEntry.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/cdi/impl/CDIAnnotationInjectionProvider.java

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/cdi/DependentBeanEntry.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/cdi/DependentBeanEntry.java?rev=1531726&r1=1531725&r2=1531726&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/cdi/DependentBeanEntry.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/application/cdi/DependentBeanEntry.java Sun Oct 13 18:11:43 2013
@@ -18,37 +18,25 @@
  */
 package org.apache.myfaces.application.cdi;
 
+import org.apache.myfaces.cdi.DependentInstanceEntry;
+
 import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.Bean;
-import java.io.Serializable;
 
-class DependentBeanEntry<T> implements Serializable
+class DependentBeanEntry<T> extends DependentInstanceEntry<T>
 {
-    private static final long serialVersionUID = 7148484695430831322L;
+    private static final long serialVersionUID = -6024053044999581580L;
 
-    private final T instance;
     private final Bean<?> bean;
-    private final CreationalContext<T> creationalContext;
 
-    DependentBeanEntry(T instance, Bean<?> bean, CreationalContext<T> creationalContext)
+    public DependentBeanEntry(T instance, Bean<?> bean, CreationalContext<T> creationalContext)
     {
-        this.instance = instance;
+        super(instance, creationalContext);
         this.bean = bean;
-        this.creationalContext = creationalContext;
-    }
-
-    T getInstance()
-    {
-        return instance;
     }
 
-    Bean<?> getBean()
+    public Bean<?> getBean()
     {
         return bean;
     }
-
-    CreationalContext<T> getCreationalContext()
-    {
-        return creationalContext;
-    }
 }

Added: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/cdi/DependentInstanceEntry.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/cdi/DependentInstanceEntry.java?rev=1531726&view=auto
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/cdi/DependentInstanceEntry.java (added)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/cdi/DependentInstanceEntry.java Sun Oct 13 18:11:43 2013
@@ -0,0 +1,46 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.myfaces.cdi;
+
+import javax.enterprise.context.spi.CreationalContext;
+import java.io.Serializable;
+
+public class DependentInstanceEntry<T> implements Serializable
+{
+    private static final long serialVersionUID = 7148484695430831322L;
+
+    private final T instance;
+    private final CreationalContext<T> creationalContext;
+
+    public DependentInstanceEntry(T instance, CreationalContext<T> creationalContext)
+    {
+        this.instance = instance;
+        this.creationalContext = creationalContext;
+    }
+
+    public T getInstance()
+    {
+        return instance;
+    }
+
+    public CreationalContext<T> getCreationalContext()
+    {
+        return creationalContext;
+    }
+}

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/cdi/impl/CDIAnnotationInjectionProvider.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/cdi/impl/CDIAnnotationInjectionProvider.java?rev=1531726&r1=1531725&r2=1531726&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/cdi/impl/CDIAnnotationInjectionProvider.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/cdi/impl/CDIAnnotationInjectionProvider.java Sun Oct 13 18:11:43 2013
@@ -18,13 +18,18 @@
  */
 package org.apache.myfaces.cdi.impl;
 
+import org.apache.myfaces.cdi.DependentInstanceEntry;
+import org.apache.myfaces.cdi.util.CDIUtils;
+import org.apache.myfaces.spi.InjectionProvider;
+import org.apache.myfaces.spi.InjectionProviderException;
+
+import javax.enterprise.context.spi.CreationalContext;
 import javax.enterprise.inject.spi.AnnotatedType;
 import javax.enterprise.inject.spi.BeanManager;
 import javax.enterprise.inject.spi.InjectionTarget;
 import javax.faces.context.ExternalContext;
-import org.apache.myfaces.cdi.util.CDIUtils;
-import org.apache.myfaces.spi.InjectionProvider;
-import org.apache.myfaces.spi.InjectionProviderException;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
 
 /**
  *
@@ -33,6 +38,9 @@ import org.apache.myfaces.spi.InjectionP
 public class CDIAnnotationInjectionProvider extends InjectionProvider
 {
     private BeanManager beanManager;
+
+    private Map<Integer, DependentInstanceEntry> facesApplicationDependentBeans =
+            new ConcurrentHashMap<Integer, DependentInstanceEntry>();
     
     public CDIAnnotationInjectionProvider(ExternalContext externalContext)
     {
@@ -44,7 +52,13 @@ public class CDIAnnotationInjectionProvi
     {
         AnnotatedType annoType = beanManager.createAnnotatedType(instance.getClass());
         InjectionTarget target = beanManager.createInjectionTarget(annoType);
-        target.inject(instance, beanManager.createCreationalContext(null));
+        CreationalContext<?> creationalContext =  beanManager.createCreationalContext(null);
+
+        facesApplicationDependentBeans.put(
+                System.identityHashCode(instance),
+                new DependentInstanceEntry(instance, creationalContext));
+
+        target.inject(instance, creationalContext);
     }
 
     @Override
@@ -61,5 +75,12 @@ public class CDIAnnotationInjectionProvi
         AnnotatedType annoType = beanManager.createAnnotatedType(instance.getClass());
         InjectionTarget target = beanManager.createInjectionTarget(annoType);
         target.preDestroy(instance);
+
+        DependentInstanceEntry entry = facesApplicationDependentBeans.get(System.identityHashCode(instance));
+
+        if (entry != null)
+        {
+            entry.getCreationalContext().release();
+        }
     }
 }