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();
+ }
}
}