You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by st...@apache.org on 2011/08/30 19:40:17 UTC

svn commit: r1163305 - /myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/JsfWindowContext.java

Author: struberg
Date: Tue Aug 30 17:40:16 2011
New Revision: 1163305

URL: http://svn.apache.org/viewvc?rev=1163305&view=rev
Log:
EXTCDI-220 destroy beans when they are removed from conversation subgroups

Modified:
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/JsfWindowContext.java

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/JsfWindowContext.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/JsfWindowContext.java?rev=1163305&r1=1163304&r2=1163305&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/JsfWindowContext.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/JsfWindowContext.java Tue Aug 30 17:40:16 2011
@@ -23,6 +23,7 @@ import org.apache.myfaces.extensions.cdi
 import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.config.WindowContextConfig;
 import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.config.ConversationConfig;
 import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.event.CloseWindowContextEvent;
+import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.BeanEntry;
 import org.apache.myfaces.extensions.cdi.core.impl.util.CodiUtils;
 import org.apache.myfaces.extensions.cdi.jsf.impl.scope.conversation.spi.ConversationFactory;
 import org.apache.myfaces.extensions.cdi.jsf.impl.scope.conversation.spi.ConversationKey;
@@ -296,11 +297,16 @@ class JsfWindowContext implements Editab
         List<Class<?>> implicitSubGroupCandidates = new ArrayList<Class<?>>();
         for(Class<?> subGroup : subGroups)
         {
-            if(editableConversation.removeBeanEntry(subGroup) == null)
+            BeanEntry<?> beanEntry = editableConversation.removeBeanEntry(subGroup);
+            if(beanEntry == null)
             {
                 //no bean was scoped -> try to use the sub-group as sub-group-type
                 implicitSubGroupCandidates.add(subGroup);
             }
+            else
+            {
+                destroyBean(beanEntry);
+            }
         }
 
         tryToCloseImplicitConversationSubGroup(editableConversation, implicitSubGroupCandidates);
@@ -320,12 +326,21 @@ class JsfWindowContext implements Editab
 
                 for(Class<?> beanClass : concreteBeanClasses)
                 {
-                    editableConversation.removeBeanEntry(beanClass);
+                    BeanEntry<?> beanEntry = editableConversation.removeBeanEntry(beanClass);
+                    destroyBean(beanEntry);
                 }
             }
         }
     }
 
+    private <T> void destroyBean(BeanEntry<T> beanEntry)
+    {
+        if (beanEntry != null)
+        {
+            beanEntry.getBean().destroy(beanEntry.getBeanInstance(), beanEntry.getCreationalContext());
+        }
+    }
+
     /**
      * {@inheritDoc}
      */