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 2011/08/30 20:02:37 UTC

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

Author: gpetracek
Date: Tue Aug 30 18:02:37 2011
New Revision: 1163312

URL: http://svn.apache.org/viewvc?rev=1163312&view=rev
Log:
EXTCDI-220 trigger @PreDestroy and UnscopeBeanEvent when closing sub-groups

Modified:
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/BeanStorage.java
    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/BeanStorage.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/BeanStorage.java?rev=1163312&r1=1163311&r2=1163312&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/BeanStorage.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/jsf/impl/scope/conversation/BeanStorage.java Tue Aug 30 18:02:37 2011
@@ -80,24 +80,30 @@ class BeanStorage implements Serializabl
 
     BeanEntry<Serializable> removeBean(Class<Serializable> beanClass)
     {
-        return this.beanMap.remove(beanClass);
+        BeanEntry<Serializable> beanEntryToRemove = this.beanMap.remove(beanClass);
+        removeBeanEntry(beanEntryToRemove);
+        return beanEntryToRemove;
     }
 
     //TODO don't reset window scoped beans
     void resetStorage()
     {
-        Serializable oldBeanInstance;
-        for (BeanEntry<Serializable> beanHolder : this.beanMap.values())
+        for (BeanEntry<Serializable> beanEntry : this.beanMap.values())
         {
-            oldBeanInstance = beanHolder.resetBeanInstance();
+            removeBeanEntry(beanEntry);
+        }
+    }
 
-            if(beanHolder.isUnscopeBeanEventEnabled())
-            {
-                fireUnscopeBeanEvent(oldBeanInstance);
-            }
+    private void removeBeanEntry(BeanEntry<Serializable> beanEntry)
+    {
+        Serializable oldBeanInstance = beanEntry.resetBeanInstance();
 
-            beanHolder.getBean().destroy(oldBeanInstance, beanHolder.getCreationalContext());
+        if(beanEntry.isUnscopeBeanEventEnabled())
+        {
+            fireUnscopeBeanEvent(oldBeanInstance);
         }
+
+        beanEntry.getBean().destroy(oldBeanInstance, beanEntry.getCreationalContext());
     }
 
     private <T extends Serializable> void fireUnscopeBeanEvent(T instance)

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=1163312&r1=1163311&r2=1163312&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 18:02:37 2011
@@ -23,7 +23,6 @@ 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;
@@ -297,16 +296,11 @@ class JsfWindowContext implements Editab
         List<Class<?>> implicitSubGroupCandidates = new ArrayList<Class<?>>();
         for(Class<?> subGroup : subGroups)
         {
-            BeanEntry<?> beanEntry = editableConversation.removeBeanEntry(subGroup);
-            if(beanEntry == null)
+            if(editableConversation.removeBeanEntry(subGroup) == null)
             {
                 //no bean was scoped -> try to use the sub-group as sub-group-type
                 implicitSubGroupCandidates.add(subGroup);
             }
-            else
-            {
-                destroyBean(beanEntry);
-            }
         }
 
         tryToCloseImplicitConversationSubGroup(editableConversation, implicitSubGroupCandidates);
@@ -326,21 +320,12 @@ class JsfWindowContext implements Editab
 
                 for(Class<?> beanClass : concreteBeanClasses)
                 {
-                    BeanEntry<?> beanEntry = editableConversation.removeBeanEntry(beanClass);
-                    destroyBean(beanEntry);
+                    editableConversation.removeBeanEntry(beanClass);
                 }
             }
         }
     }
 
-    private <T> void destroyBean(BeanEntry<T> beanEntry)
-    {
-        if (beanEntry != null)
-        {
-            beanEntry.getBean().destroy(beanEntry.getBeanInstance(), beanEntry.getCreationalContext());
-        }
-    }
-
     /**
      * {@inheritDoc}
      */