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 2010/08/12 04:22:50 UTC

svn commit: r984632 - in /myfaces/extensions/cdi/trunk: core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/ core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/spi/ jee-modules/jsf-...

Author: gpetracek
Date: Thu Aug 12 02:22:49 2010
New Revision: 984632

URL: http://svn.apache.org/viewvc?rev=984632&view=rev
Log:
EXTCDI-1, EXTCDI-2 and EXTCDI-3 refactoring and cleanup

Added:
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/EditableConversation.java
      - copied, changed from r984534, myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/spi/EditableConversation.java
Removed:
    myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/spi/EditableConversation.java
Modified:
    myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/AbstractConversationContextAdapter.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultConversation.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultWindowContextManager.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultWindowContextQuotaHandler.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/GroupedConversationContextAdapter.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/InstanceProducer.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/JsfAwareConversationFactory.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/JsfWindowContext.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/WindowContextManagerObserver.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/ConversationFactory.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/EditableWindowContext.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/EditableWindowContextManager.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/ConversationUtils.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/ExceptionUtils.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/RequestCache.java

Modified: myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/AbstractConversationContextAdapter.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/AbstractConversationContextAdapter.java?rev=984632&r1=984631&r2=984632&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/AbstractConversationContextAdapter.java (original)
+++ myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/AbstractConversationContextAdapter.java Thu Aug 12 02:22:49 2010
@@ -153,24 +153,24 @@ public abstract class AbstractConversati
     protected abstract WindowContextManager resolveWindowContextManager();
 
     /**
-     * @param conversationManager the current
+     * @param windowContextManager the current
      * {@link org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager}
      * @param beanDescriptor      descriptor of the requested bean
      * @return the instance of the requested bean if it exists in the current
      *         {@link org.apache.myfaces.extensions.cdi.core.api.scope.conversation.WindowContext}
      *         null otherwise
      */
-    protected abstract <T> T resolveBeanInstance(WindowContextManager conversationManager, Bean<T> beanDescriptor);
+    protected abstract <T> T resolveBeanInstance(WindowContextManager windowContextManager, Bean<T> beanDescriptor);
 
     /**
      * Store the given bean in the
      * {@link org.apache.myfaces.extensions.cdi.core.api.scope.conversation.WindowContext}
      *
-     * @param conversationManager current
+     * @param windowContextManager current
      * {@link org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager}
      * @param beanEntry           current bean-entry
      */
-    protected abstract <T> void scopeBeanEntry(WindowContextManager conversationManager, BeanEntry<T> beanEntry);
+    protected abstract <T> void scopeBeanEntry(WindowContextManager windowContextManager, BeanEntry<T> beanEntry);
 
     protected abstract ConversationConfig getConversationConfig();
 }

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultConversation.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultConversation.java?rev=984632&r1=984631&r2=984632&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultConversation.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultConversation.java Thu Aug 12 02:22:49 2010
@@ -19,8 +19,8 @@
 package org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation;
 
 import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.BeanEntry;
-import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.EditableConversation;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.ConversationKey;
+import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.EditableConversation;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.RequestCache;
 
 import javax.enterprise.inject.Typed;

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultWindowContextManager.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultWindowContextManager.java?rev=984632&r1=984631&r2=984632&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultWindowContextManager.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultWindowContextManager.java Thu Aug 12 02:22:49 2010
@@ -21,11 +21,11 @@ package org.apache.myfaces.extensions.cd
 import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.Conversation;
 import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.WindowContext;
 import org.apache.myfaces.extensions.cdi.core.api.projectstage.ProjectStage;
-import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.EditableConversation;
-import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.WindowHandler;
+import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.EditableConversation;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.JsfUtils;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.RequestCache;
+import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ExceptionUtils.windowContextNotEditable;
 import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils.*;
 import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils.resolveWindowContextId;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.EditableWindowContext;
@@ -33,6 +33,7 @@ import org.apache.myfaces.extensions.cdi
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.EditableWindowContextManager;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.WindowContextFactory;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.WindowContextQuotaHandler;
+import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.WindowHandler;
 
 import javax.enterprise.inject.Typed;
 import javax.faces.component.UIComponent;
@@ -54,7 +55,8 @@ public class DefaultWindowContextManager
 {
     private static final long serialVersionUID = 2872151847183166424L;
 
-    private Map<String, WindowContext> windowContextMap = new ConcurrentHashMap<String, WindowContext>();
+    private Map<String, EditableWindowContext> windowContextMap =
+            new ConcurrentHashMap<String, EditableWindowContext>();
 
     private ProjectStage projectStage;
 
@@ -133,7 +135,13 @@ public class DefaultWindowContextManager
 
     public synchronized WindowContext getWindowContext(String windowContextId)
     {
-        WindowContext result = this.windowContextMap.get(windowContextId);
+        EditableWindowContext result = this.windowContextMap.get(windowContextId);
+
+        if(result != null && !result.isActive())
+        {
+            removeWindowContext(result);
+            result = null;
+        }
 
         if (result == null)
         {
@@ -142,15 +150,12 @@ public class DefaultWindowContextManager
             this.windowContextMap.put(windowContextId, result);
         }
 
-        if(result instanceof EditableWindowContext)
-        {
-            ((EditableWindowContext)result).touch();
-        }
+        result.touch();
 
         return result;
     }
 
-    private WindowContext createWindowContext(String windowContextId)
+    private EditableWindowContext createWindowContext(String windowContextId)
     {
         WindowContextFactory windowContextFactory = this.jsfAwareWindowContextConfig.getWindowContextFactory();
 
@@ -164,10 +169,10 @@ public class DefaultWindowContextManager
 
     public boolean activateWindowContext(String windowContextId)
     {
-        return activateWindowContext(getWindowContext(windowContextId));
+        return activateWindowContext(convert(getWindowContext(windowContextId)));
     }
 
-    public boolean activateWindowContext(WindowContext windowContext)
+    public boolean activateWindowContext(EditableWindowContext windowContext)
     {
         JsfUtils.resetCaches();
         FacesContext facesContext = FacesContext.getCurrentInstance();
@@ -184,18 +189,18 @@ public class DefaultWindowContextManager
 
     public void resetCurrentWindowContext()
     {
-        resetWindowContext(getCurrentWindowContext());
+        resetWindowContext(convert(getCurrentWindowContext()));
     }
 
     public void resetWindowContext(String windowContextId)
     {
-        resetWindowContext(getWindowContext(windowContextId));
+        resetWindowContext(convert(getWindowContext(windowContextId)));
     }
 
-    public void resetWindowContext(WindowContext windowContext)
+    public void resetWindowContext(EditableWindowContext windowContext)
     {
         JsfUtils.resetCaches();
-        for (Conversation conversation : ((EditableWindowContext)windowContext).getConversations().values())
+        for (Conversation conversation : windowContext.getConversations().values())
         {
             conversation.restart();
         }
@@ -203,22 +208,22 @@ public class DefaultWindowContextManager
 
     public void resetConversations()
     {
-        resetConversations(getCurrentWindowContext());
+        resetConversations(convert(getCurrentWindowContext()));
     }
 
     public void resetConversations(String windowContextId)
     {
-        resetConversations(getWindowContext(windowContextId));
+        resetConversations(convert(getWindowContext(windowContextId)));
     }
 
-    public void resetConversations(WindowContext windowContext)
+    public void resetConversations(EditableWindowContext windowContext)
     {
         JsfUtils.resetCaches();
-        for (Conversation conversation : ((EditableWindowContext)windowContext).getConversations().values())
+        for (EditableConversation conversation : windowContext.getConversations().values())
         {
-            ((EditableConversation)conversation).deactivate();
+            conversation.deactivate();
              //it isn't possible to deactivate window scoped conversations
-            if (!((EditableConversation)conversation).isActive())
+            if (!conversation.isActive())
             {
                 conversation.restart();
             }
@@ -227,15 +232,15 @@ public class DefaultWindowContextManager
 
     public void removeCurrentWindowContext()
     {
-        removeWindowContext(getCurrentWindowContext());
+        removeWindowContext(convert(getCurrentWindowContext()));
     }
 
     public void removeWindowContext(String windowContextId)
     {
-        removeWindowContext(getWindowContext(windowContextId));
+        removeWindowContext(convert(getWindowContext(windowContextId)));
     }
 
-    public void removeWindowContext(WindowContext windowContext)
+    public void removeWindowContext(EditableWindowContext windowContext)
     {
         JsfUtils.resetCaches();
         this.windowContextMap.remove(windowContext.getId());
@@ -282,7 +287,7 @@ public class DefaultWindowContextManager
         return windowContextId;
     }
 
-    public Collection<WindowContext> getWindowContexts()
+    public Collection<EditableWindowContext> getWindowContexts()
     {
         return Collections.unmodifiableCollection(this.windowContextMap.values());
     }
@@ -300,4 +305,14 @@ public class DefaultWindowContextManager
             ((EditableWindowContext)windowContext).removeInactiveConversations();
         }
     }
+
+    private EditableWindowContext convert(WindowContext windowContext)
+    {
+        if(!(windowContext instanceof EditableWindowContext))
+        {
+            throw windowContextNotEditable(windowContext);
+        }
+
+        return (EditableWindowContext)windowContext;
+    }
 }

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultWindowContextQuotaHandler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultWindowContextQuotaHandler.java?rev=984632&r1=984631&r2=984632&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultWindowContextQuotaHandler.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultWindowContextQuotaHandler.java Thu Aug 12 02:22:49 2010
@@ -23,7 +23,6 @@ import org.apache.myfaces.extensions.cdi
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.EditableWindowContextManager;
 import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ExceptionUtils.tooManyOpenWindowException;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils;
-import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.WindowContext;
 import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager;
 
 import java.util.Collection;
@@ -65,7 +64,7 @@ public class DefaultWindowContextQuotaHa
             EditableWindowContextManager editableWindowContextManager =
                     (EditableWindowContextManager)windowContextManager;
 
-            Collection<WindowContext> activeWindowContexts = editableWindowContextManager.getWindowContexts();
+            Collection<EditableWindowContext> activeWindowContexts = editableWindowContextManager.getWindowContexts();
 
             int activeWindowContextCountBeforeCleanup = activeWindowContexts.size();
 
@@ -80,9 +79,9 @@ public class DefaultWindowContextQuotaHa
     }
 
     private void removeEldestWindowContext(EditableWindowContextManager editableWindowContextManager,
-                                           Collection<WindowContext> activeWindowContexts)
+                                           Collection<EditableWindowContext> activeWindowContexts)
     {
-        WindowContext windowContextToRemove = findEldestWindowContext(activeWindowContexts);
+        EditableWindowContext windowContextToRemove = findEldestWindowContext(activeWindowContexts);
 
         if(windowContextToRemove != null)
         {
@@ -90,19 +89,16 @@ public class DefaultWindowContextQuotaHa
         }
     }
 
-    private WindowContext findEldestWindowContext(Collection<WindowContext> activeWindowContexts)
+    private EditableWindowContext findEldestWindowContext(Collection<EditableWindowContext> activeWindowContexts)
     {
         Date lastAccess = new Date();
-        WindowContext result = null;
-        for(WindowContext windowContext : activeWindowContexts)
+        EditableWindowContext result = null;
+        for(EditableWindowContext windowContext : activeWindowContexts)
         {
-            if(windowContext instanceof EditableWindowContext)
+            if(lastAccess.after(windowContext.getLastAccess()))
             {
-                if(lastAccess.after(((EditableWindowContext)windowContext).getLastAccess()))
-                {
-                    lastAccess = ((EditableWindowContext)windowContext).getLastAccess();
-                    result = windowContext;
-                }
+                lastAccess = windowContext.getLastAccess();
+                result = windowContext;
             }
         }
         return result;

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/GroupedConversationContextAdapter.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/GroupedConversationContextAdapter.java?rev=984632&r1=984631&r2=984632&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/GroupedConversationContextAdapter.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/GroupedConversationContextAdapter.java Thu Aug 12 02:22:49 2010
@@ -22,14 +22,16 @@ import org.apache.myfaces.extensions.cdi
 import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.ConversationConfig;
 import org.apache.myfaces.extensions.cdi.core.api.resolver.ConfigResolver;
 import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.AbstractConversationContextAdapter;
-import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.BeanEntry;
-import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.EditableConversation;
+import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.EditableConversation;
 import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager;
+import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.BeanEntry;
 import static org.apache.myfaces.extensions.cdi.core.impl.utils.CodiUtils.getOrCreateScopedInstanceOfBeanByClass;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.RequestCache;
+import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ExceptionUtils.windowContextManagerNotEditable;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.EditableWindowContext;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.JsfAwareWindowContextConfig;
+import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.EditableWindowContextManager;
 
 import javax.enterprise.inject.spi.Bean;
 import javax.enterprise.inject.spi.BeanManager;
@@ -65,26 +67,37 @@ class GroupedConversationContextAdapter 
     }
 
     /**
-     * @param conversationManager the current
+     * @param windowContextManager the current
      * {@link org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager}
      * @param beanDescriptor      descriptor of the requested bean
      * @return the instance of the requested bean if it exists in the current
      *         {@link org.apache.myfaces.extensions.cdi.core.api.scope.conversation.WindowContext}
      *         null otherwise
      */
-    protected <T> T resolveBeanInstance(WindowContextManager conversationManager, Bean<T> beanDescriptor)
+    protected <T> T resolveBeanInstance(WindowContextManager windowContextManager, Bean<T> beanDescriptor)
     {
+        if(!(windowContextManager instanceof EditableWindowContextManager))
+        {
+            throw windowContextManagerNotEditable(windowContextManager);
+        }
+
         Class<?> beanClass = beanDescriptor.getBeanClass();
-        Conversation foundConversation = getConversation(conversationManager, beanDescriptor);
+        EditableConversation foundConversation = getConversation(
+                (EditableWindowContextManager)windowContextManager, beanDescriptor);
 
         //noinspection unchecked
-        return (T)((EditableConversation)foundConversation).getBean(beanClass);
+        return (T)foundConversation.getBean(beanClass);
     }
 
-    protected <T> void scopeBeanEntry(WindowContextManager conversationManager, BeanEntry<T> beanEntry)
+    protected <T> void scopeBeanEntry(WindowContextManager windowContextManager, BeanEntry<T> beanEntry)
     {
+        if(!(windowContextManager instanceof EditableWindowContextManager))
+        {
+            throw windowContextManagerNotEditable(windowContextManager);
+        }
+
         Bean<?> bean = beanEntry.getBean();
-        Conversation foundConversation = getConversation(conversationManager, bean);
+        Conversation foundConversation = getConversation((EditableWindowContextManager)windowContextManager, bean);
 
         ((EditableConversation) foundConversation).addBean(beanEntry);
     }
@@ -94,7 +107,7 @@ class GroupedConversationContextAdapter 
         return getOrCreateScopedInstanceOfBeanByClass(ConfigResolver.class).resolve(JsfAwareWindowContextConfig.class);
     }
 
-    private Conversation getConversation(WindowContextManager windowContextManager, Bean<?> bean)
+    private EditableConversation getConversation(EditableWindowContextManager windowContextManager, Bean<?> bean)
     {
         Class conversationGroup = ConversationUtils.getConversationGroup(bean);
 

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/InstanceProducer.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/InstanceProducer.java?rev=984632&r1=984631&r2=984632&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/InstanceProducer.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/InstanceProducer.java Thu Aug 12 02:22:49 2010
@@ -53,7 +53,7 @@ final class InstanceProducer
     @SessionScoped
     @Named(WINDOW_CONTEXT_MANAGER_BEAN_NAME)
     protected EditableWindowContextManager createWindowContextManager(ConfigResolver configResolver,
-                                                              ProjectStage projectStage)
+                                                                      ProjectStage projectStage)
     {
         JsfAwareWindowContextConfig jsfAwareWindowContextConfig =
                 configResolver.resolve(JsfAwareWindowContextConfig.class);

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/JsfAwareConversationFactory.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/JsfAwareConversationFactory.java?rev=984632&r1=984631&r2=984632&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/JsfAwareConversationFactory.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/JsfAwareConversationFactory.java Thu Aug 12 02:22:49 2010
@@ -20,7 +20,7 @@ package org.apache.myfaces.extensions.cd
 
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.ConversationFactory;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.ConversationKey;
-import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.Conversation;
+import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.EditableConversation;
 import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.WindowScoped;
 import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.ConversationConfig;
 
@@ -48,7 +48,7 @@ public class JsfAwareConversationFactory
         }
     }
     
-    public Conversation createConversation(ConversationKey conversationKey, ConversationConfig configuration)
+    public EditableConversation createConversation(ConversationKey conversationKey, ConversationConfig configuration)
     {
         if(WindowScoped.class.isAssignableFrom(conversationKey.getConversationGroup()))
         {

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/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/javaee/jsf/impl/scope/conversation/JsfWindowContext.java?rev=984632&r1=984631&r2=984632&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/JsfWindowContext.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/JsfWindowContext.java Thu Aug 12 02:22:49 2010
@@ -20,13 +20,14 @@ package org.apache.myfaces.extensions.cd
 
 import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.Conversation;
 import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.WindowContextConfig;
-import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.EditableConversation;
+import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.EditableConversation;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.EditableWindowContext;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.ConversationKey;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.ConversationFactory;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.JsfAwareWindowContextConfig;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.RequestCache;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.JsfUtils;
+import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ExceptionUtils.conversationNotEditable;
 
 import javax.enterprise.inject.Typed;
 import java.util.Date;
@@ -54,8 +55,8 @@ public class JsfWindowContext implements
 
     private final boolean projectStageDevelopment;
 
-    private Map<ConversationKey, Conversation> groupedConversations
-            = new ConcurrentHashMap<ConversationKey, Conversation>();
+    private Map<ConversationKey, EditableConversation> groupedConversations
+            = new ConcurrentHashMap<ConversationKey, EditableConversation>();
 
     private Map<String, Object> attributes = new ConcurrentHashMap<String, Object>();
 
@@ -91,26 +92,26 @@ public class JsfWindowContext implements
 
     public synchronized void endConversations(boolean forceEnd)
     {
-        for (Map.Entry<ConversationKey, Conversation> conversationEntry : this.groupedConversations.entrySet())
+        for (Map.Entry<ConversationKey, EditableConversation> conversationEntry : this.groupedConversations.entrySet())
         {
             endAndRemoveConversation(conversationEntry.getKey(), conversationEntry.getValue(), forceEnd);
         }
         JsfUtils.resetConversationCache();
     }
 
-    public Conversation getConversation(Class conversationGroupKey, Annotation... qualifiers)
+    public EditableConversation getConversation(Class conversationGroupKey, Annotation... qualifiers)
     {
         ConversationKey conversationKey =
                 new DefaultConversationKey(conversationGroupKey, this.projectStageDevelopment, qualifiers);
 
-        Conversation conversation = RequestCache.getConversation(conversationKey);
+        EditableConversation conversation = RequestCache.getConversation(conversationKey);
 
         if(conversation == null)
         {
             conversation = this.groupedConversations.get(conversationKey);
 
             //TODO
-            if (conversation != null && !((EditableConversation)conversation).isActive())
+            if (conversation != null && !conversation.isActive())
             {
                 endAndRemoveConversation(conversationKey, conversation, true);
                 conversation = null;
@@ -133,13 +134,18 @@ public class JsfWindowContext implements
                 new DefaultConversationKey(conversationGroupKey, this.projectStageDevelopment, qualifiers);
 
         Conversation conversation = this.groupedConversations.get(conversationKey);
-        return endAndRemoveConversation(conversationKey, conversation, true);
+
+        if(!(conversation instanceof EditableConversation))
+        {
+            throw conversationNotEditable(conversation);
+        }
+        return endAndRemoveConversation(conversationKey, (EditableConversation)conversation, true);
     }
 
     public Set<Conversation> endConversationGroup(Class conversationGroupKey)
     {
         Set<Conversation> removedConversations = new HashSet<Conversation>();
-        for(Map.Entry<ConversationKey, Conversation> conversationEntry : this.groupedConversations.entrySet())
+        for(Map.Entry<ConversationKey, EditableConversation> conversationEntry : this.groupedConversations.entrySet())
         {
             if(conversationGroupKey.isAssignableFrom(conversationEntry.getKey().getConversationGroup()))
             {
@@ -150,9 +156,9 @@ public class JsfWindowContext implements
         return removedConversations;
     }
 
-    private Conversation endAndRemoveConversation(ConversationKey conversationKey,
-                                                  Conversation conversation,
-                                                  boolean forceEnd)
+    private EditableConversation endAndRemoveConversation(ConversationKey conversationKey,
+                                                          EditableConversation conversation,
+                                                          boolean forceEnd)
     {
         if (forceEnd)
         {
@@ -161,9 +167,9 @@ public class JsfWindowContext implements
         }
         else if(conversation instanceof EditableConversation)
         {
-            ((EditableConversation)conversation).deactivate();
+            conversation.deactivate();
 
-            if(!((EditableConversation)conversation).isActive())
+            if(!conversation.isActive())
             {
                 conversation.end();
                 return this.groupedConversations.remove(conversationKey);
@@ -173,7 +179,7 @@ public class JsfWindowContext implements
         return null;
     }
 
-    public Conversation createConversation(Class conversationGroupKey, Annotation... qualifiers)
+    public EditableConversation createConversation(Class conversationGroupKey, Annotation... qualifiers)
     {
         ConversationKey conversationKey =
                 new DefaultConversationKey(conversationGroupKey, this.projectStageDevelopment, qualifiers);
@@ -183,7 +189,7 @@ public class JsfWindowContext implements
         return conversationFactory.createConversation(conversationKey, this.jsfAwareWindowContextConfig);
     }
 
-    public Map<ConversationKey /*conversation group*/, Conversation> getConversations()
+    public Map<ConversationKey /*conversation group*/, EditableConversation> getConversations()
     {
         return Collections.unmodifiableMap(this.groupedConversations);
     }
@@ -210,15 +216,14 @@ public class JsfWindowContext implements
 
     public void removeInactiveConversations()
     {
-        Iterator<Conversation> conversations = this.groupedConversations.values().iterator();
+        Iterator<EditableConversation> conversations = this.groupedConversations.values().iterator();
 
-        Conversation conversation;
+        EditableConversation conversation;
         while (conversations.hasNext())
         {
             conversation = conversations.next();
 
-            //TODO
-            if (!((EditableConversation)conversation).getActiveState())
+            if (!conversation.getActiveState())
             {
                 conversations.remove();
             }

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/WindowContextManagerObserver.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/WindowContextManagerObserver.java?rev=984632&r1=984631&r2=984632&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/WindowContextManagerObserver.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/WindowContextManagerObserver.java Thu Aug 12 02:22:49 2010
@@ -30,11 +30,9 @@ import org.apache.myfaces.extensions.cdi
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.EditableWindowContextManager;
 import static org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager
         .WINDOW_CONTEXT_ID_PARAMETER_KEY;
-import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager;
-import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.EditableConversation;
-import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.WindowContext;
+import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.EditableConversation;
 import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.WindowContextConfig;
-import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.Conversation;
+import org.apache.myfaces.extensions.cdi.core.api.resolver.ConfigResolver;
 
 import javax.enterprise.event.Observes;
 import javax.faces.event.PhaseEvent;
@@ -50,18 +48,22 @@ final class WindowContextManagerObserver
     //don't change/optimize this observer!!!
     protected void cleanup(@Observes @AfterPhase(PhaseId.RESTORE_VIEW) PhaseEvent phaseEvent,
                            RequestTypeResolver requestTypeResolver,
-                           WindowContextManager windowContextManager)
+                           EditableWindowContextManager windowContextManager,
+                           ConfigResolver configResolver)
     {
-        WindowContext windowContext = windowContextManager.getCurrentWindowContext();
         if (!requestTypeResolver.isPostRequest() && !requestTypeResolver.isPartialRequest())
         {
-            boolean continueRequest = processGetRequest(phaseEvent.getFacesContext(), windowContext.getConfig());
+            //don't use the config of the current window context - it would trigger a touch
+            boolean continueRequest = processGetRequest(
+                    phaseEvent.getFacesContext(), configResolver.resolve(JsfAwareWindowContextConfig.class));
+            
             if (!continueRequest)
             {
                 return;
             }
         }
 
+        EditableWindowContext windowContext = (EditableWindowContext)windowContextManager.getCurrentWindowContext();
         //don't refactor it to a lazy restore
         storeCurrentViewIdAsNewViewId(phaseEvent.getFacesContext(), windowContext);
 
@@ -152,16 +154,16 @@ final class WindowContextManagerObserver
     }
 
     //don't cleanup all window contexts (it would cause a side-effect with the access-scope and multiple windows
-    private void cleanupInactiveConversations(WindowContext windowContext)
+    private void cleanupInactiveConversations(EditableWindowContext windowContext)
     {
-        for (Conversation conversation : ((EditableWindowContext)windowContext).getConversations().values())
+        for (EditableConversation conversation : windowContext.getConversations().values())
         {
-            if (!((EditableConversation)conversation).isActive())
+            if (!conversation.isActive())
             {
                 conversation.end();
             }
         }
 
-        ((EditableWindowContext)windowContext).removeInactiveConversations();
+        windowContext.removeInactiveConversations();
     }
 }

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/ConversationFactory.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/ConversationFactory.java?rev=984632&r1=984631&r2=984632&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/ConversationFactory.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/ConversationFactory.java Thu Aug 12 02:22:49 2010
@@ -18,7 +18,6 @@
  */
 package org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi;
 
-import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.Conversation;
 import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.ConversationConfig;
 
 import java.io.Serializable;
@@ -28,5 +27,5 @@ import java.io.Serializable;
  */
 public interface ConversationFactory extends Serializable
 {
-    Conversation createConversation(ConversationKey conversationKey, ConversationConfig config);
+    EditableConversation createConversation(ConversationKey conversationKey, ConversationConfig config);
 }

Copied: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/EditableConversation.java (from r984534, myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/spi/EditableConversation.java)
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/EditableConversation.java?p2=myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/EditableConversation.java&p1=myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/spi/EditableConversation.java&r1=984534&r2=984632&rev=984632&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/spi/EditableConversation.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/EditableConversation.java Thu Aug 12 02:22:49 2010
@@ -16,9 +16,10 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi;
+package org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi;
 
 import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.Conversation;
+import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.BeanEntry;
 
 /**
  * TODO

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/EditableWindowContext.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/EditableWindowContext.java?rev=984632&r1=984631&r2=984632&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/EditableWindowContext.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/EditableWindowContext.java Thu Aug 12 02:22:49 2010
@@ -18,7 +18,6 @@
  */
 package org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi;
 
-import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.Conversation;
 import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.WindowContext;
 
 import java.util.Map;
@@ -45,19 +44,19 @@ public interface EditableWindowContext e
      * TODO
      * @return all active conversations of the current context
      */
-    Map<ConversationKey /*conversation group*/, Conversation> getConversations();
+    Map<ConversationKey /*conversation group*/, EditableConversation> getConversations();
 
     /**
      * @param conversationGroup group of the conversation in question
      * @param qualifiers optional qualifiers for the conversation
      * @return a new conversation for the given group
      */
-    Conversation createConversation(Class conversationGroup, Annotation... qualifiers);
+    EditableConversation createConversation(Class conversationGroup, Annotation... qualifiers);
 
     /**
      * @param conversationGroup group of the conversation in question
      * @param qualifiers optional qualifiers for the conversation
      * @return a new conversation for the given group
      */
-    Conversation getConversation(Class conversationGroup, Annotation... qualifiers);
+    EditableConversation getConversation(Class conversationGroup, Annotation... qualifiers);
 }

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/EditableWindowContextManager.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/EditableWindowContextManager.java?rev=984632&r1=984631&r2=984632&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/EditableWindowContextManager.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/EditableWindowContextManager.java Thu Aug 12 02:22:49 2010
@@ -30,27 +30,27 @@ public interface EditableWindowContextMa
 {
     boolean activateWindowContext(String windowContextId);
 
-    boolean activateWindowContext(WindowContext windowContext);
+    boolean activateWindowContext(EditableWindowContext windowContext);
 
     void resetCurrentWindowContext();
 
     void resetWindowContext(String windowContextId);
 
-    void resetWindowContext(WindowContext windowContext);
+    void resetWindowContext(EditableWindowContext windowContext);
 
     void resetConversations();
 
     void resetConversations(String windowContextId);
 
-    void resetConversations(WindowContext windowContext);
+    void resetConversations(EditableWindowContext windowContext);
 
     void removeCurrentWindowContext();
 
     void removeWindowContext(String windowContextId);
 
-    void removeWindowContext(WindowContext windowContext);
+    void removeWindowContext(EditableWindowContext windowContext);
 
-    Collection<WindowContext> getWindowContexts();
+    Collection<EditableWindowContext> getWindowContexts();
 
     void destroy();
 }

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/ConversationUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/ConversationUtils.java?rev=984632&r1=984631&r2=984632&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/ConversationUtils.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/ConversationUtils.java Thu Aug 12 02:22:49 2010
@@ -390,13 +390,12 @@ public class ConversationUtils
 
     public static boolean cleanupInactiveWindowContexts(EditableWindowContextManager windowContextManager)
     {
-        Collection<WindowContext> windowContexts = windowContextManager.getWindowContexts();
+        Collection<EditableWindowContext> windowContexts = windowContextManager.getWindowContexts();
         int count = windowContexts.size();
 
-        for (WindowContext windowContext : windowContexts)
+        for (EditableWindowContext windowContext : windowContexts)
         {
-            if(windowContext instanceof EditableWindowContext &&
-                    isEligibleForCleanup((EditableWindowContext)windowContext))
+            if(isEligibleForCleanup(windowContext))
             {
                 windowContextManager.removeWindowContext(windowContext);
             }

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/ExceptionUtils.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/ExceptionUtils.java?rev=984632&r1=984631&r2=984632&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/ExceptionUtils.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/ExceptionUtils.java Thu Aug 12 02:22:49 2010
@@ -18,6 +18,13 @@
  */
 package org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util;
 
+import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.WindowContext;
+import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.Conversation;
+import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager;
+import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.EditableWindowContext;
+import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.EditableWindowContextManager;
+import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.EditableConversation;
+
 /**
  * @author Gerhard Petracek
  */
@@ -29,4 +36,22 @@ public class ExceptionUtils
             " Please continue with one of the existing windows or wait up to "
                 + windowContextTimeoutInMinutes + " minutes.");
     }
+
+    public static RuntimeException windowContextManagerNotEditable(WindowContextManager windowContextManager)
+    {
+        return new RuntimeException(windowContextManager.getClass().getName() + " has to implement "
+                + EditableWindowContextManager.class.getName());
+    }
+
+    public static RuntimeException windowContextNotEditable(WindowContext windowContext)
+    {
+        return new RuntimeException(windowContext.getClass().getName() + " has to implement "
+                + EditableWindowContext.class.getName());
+    }
+
+    public static RuntimeException conversationNotEditable(Conversation conversation)
+    {
+        return new RuntimeException(conversation.getClass().getName() + " has to implement "
+                + EditableConversation.class.getName());
+    }
 }

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/RequestCache.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/RequestCache.java?rev=984632&r1=984631&r2=984632&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/RequestCache.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/RequestCache.java Thu Aug 12 02:22:49 2010
@@ -20,8 +20,8 @@ package org.apache.myfaces.extensions.cd
 
 import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager;
 import org.apache.myfaces.extensions.cdi.core.impl.utils.CodiUtils;
-import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.Conversation;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.ConversationKey;
+import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.EditableConversation;
 
 import javax.enterprise.inject.spi.Bean;
 import java.util.Map;
@@ -40,8 +40,8 @@ public class RequestCache
     private static ThreadLocal<Bean<WindowContextManager>> windowContextManagerBeanCache
             = new ThreadLocal<Bean<WindowContextManager>>();
 
-    private static ThreadLocal<Map<ConversationKey, Conversation>> conversationCache
-            = new ThreadLocal<Map<ConversationKey, Conversation>>();
+    private static ThreadLocal<Map<ConversationKey, EditableConversation>> conversationCache
+            = new ThreadLocal<Map<ConversationKey, EditableConversation>>();
 
     public static void resetCache()
     {
@@ -121,23 +121,23 @@ public class RequestCache
         windowIdCache.set(windowId);
     }
 
-    public static Conversation getConversation(ConversationKey conversationKey)
+    public static EditableConversation getConversation(ConversationKey conversationKey)
     {
         return getConversationCache().get(conversationKey);
     }
 
-    public static void setConversation(ConversationKey conversationKey, Conversation conversation)
+    public static void setConversation(ConversationKey conversationKey, EditableConversation conversation)
     {
         getConversationCache().put(conversationKey, conversation);
     }
 
-    private static Map<ConversationKey, Conversation> getConversationCache()
+    private static Map<ConversationKey, EditableConversation> getConversationCache()
     {
-        Map<ConversationKey, Conversation> conversationMap = conversationCache.get();
+        Map<ConversationKey, EditableConversation> conversationMap = conversationCache.get();
 
         if(conversationMap == null)
         {
-            conversationMap = new HashMap<ConversationKey, Conversation>();
+            conversationMap = new HashMap<ConversationKey, EditableConversation>();
             conversationCache.set(conversationMap);
         }
         return conversationMap;