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/08 06:42:53 UTC

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

Author: gpetracek
Date: Sun Aug  8 04:42:53 2010
New Revision: 983341

URL: http://svn.apache.org/viewvc?rev=983341&view=rev
Log:
EXTCDI-41 initial draft

Added:
    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/spi/EditableWindowContextManager.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/WindowContextQuotaHandler.java
Modified:
    myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/spi/WindowContextManager.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/config/DefaultWindowContextConfig.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/JsfWindowContext.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/TimeoutExpirationEvaluator.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/JsfAwareWindowContextConfig.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/ExceptionUtils.java

Modified: myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/spi/WindowContextManager.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/spi/WindowContextManager.java?rev=983341&r1=983340&r2=983341&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/spi/WindowContextManager.java (original)
+++ myfaces/extensions/cdi/trunk/core/impl/src/main/java/org/apache/myfaces/extensions/cdi/core/impl/scope/conversation/spi/WindowContextManager.java Sun Aug  8 04:42:53 2010
@@ -34,27 +34,4 @@ public interface WindowContextManager ex
     WindowContext getCurrentWindowContext();
 
     WindowContext getWindowContext(String windowContextId);
-
-    boolean activateWindowContext(String windowContextId);
-
-    boolean activateWindowContext(WindowContext windowContext);
-
-    void resetCurrentWindowContext();
-
-    void resetWindowContext(String windowContextId);
-
-    void resetWindowContext(WindowContext windowContext);
-
-    //TODO
-    void resetConversations();
-
-    void resetConversations(String windowContextId);
-
-    void resetConversations(WindowContext windowContext);
-
-    void removeCurrentWindowContext();
-
-    void removeWindowContext(String windowContextId);
-
-    void removeWindowContext(WindowContext windowContext);
 }

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/config/DefaultWindowContextConfig.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/config/DefaultWindowContextConfig.java?rev=983341&r1=983340&r2=983341&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/config/DefaultWindowContextConfig.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/config/DefaultWindowContextConfig.java Sun Aug  8 04:42:53 2010
@@ -27,7 +27,9 @@ import org.apache.myfaces.extensions.cdi
 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.WindowHandler;
 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.WindowContextQuotaHandler;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.JsfAwareConversationFactory;
+import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.DefaultWindowContextQuotaHandler;
 
 import javax.enterprise.context.Dependent;
 import javax.enterprise.context.ApplicationScoped;
@@ -231,4 +233,9 @@ public class DefaultWindowContextConfig 
     {
         return new JsfAwareConversationFactory();
     }
+
+    public WindowContextQuotaHandler getWindowContextQuotaHandler()
+    {
+        return new DefaultWindowContextQuotaHandler(getMaxWindowContextCount());
+    }
 }
\ No newline at end of file

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=983341&r1=983340&r2=983341&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 Sun Aug  8 04:42:53 2010
@@ -35,10 +35,11 @@ import org.apache.myfaces.extensions.cdi
 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.tooManyOpenWindowException;
 import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils.*;
 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 org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.WindowContextQuotaHandler;
 
 import javax.annotation.PostConstruct;
 import javax.annotation.PreDestroy;
@@ -58,6 +59,8 @@ import javax.inject.Named;
 import java.util.Iterator;
 import java.util.Map;
 import java.util.Set;
+import java.util.Collection;
+import java.util.Collections;
 import java.util.concurrent.ConcurrentHashMap;
 import java.lang.annotation.Annotation;
 
@@ -69,7 +72,7 @@ import java.lang.annotation.Annotation;
 @SuppressWarnings({"UnusedDeclaration"})
 @Named(WINDOW_CONTEXT_MANAGER_BEAN_NAME)
 @SessionScoped
-public class DefaultWindowContextManager implements WindowContextManager
+public class DefaultWindowContextManager implements EditableWindowContextManager
 {
     private static final long serialVersionUID = 2872151847183166424L;
 
@@ -89,11 +92,19 @@ public class DefaultWindowContextManager
 
     private boolean projectStageDevelopment;
 
+    private WindowContextQuotaHandler windowContextQuotaHandler;
+
     @PostConstruct
     protected void init()
     {
         this.windowContextConfig = this.configResolver.resolve(WindowContextConfig.class);
-        this.windowHandler = configResolver.resolve(JsfAwareWindowContextConfig.class).getWindowHandler();
+
+        JsfAwareWindowContextConfig jsfAwareWindowContextConfig =
+                configResolver.resolve(JsfAwareWindowContextConfig.class);
+
+        this.windowHandler = jsfAwareWindowContextConfig.getWindowHandler();
+        this.windowContextQuotaHandler = jsfAwareWindowContextConfig.getWindowContextQuotaHandler();
+
         this.projectStageDevelopment = ProjectStage.Development.equals(this.projectStage);
     }
 
@@ -215,17 +226,12 @@ public class DefaultWindowContextManager
     {
         String windowContextId = this.windowHandler.createWindowId();
 
-        int windowContextCount = getNumberOfNextWindowContext();
-
-        if(this.windowContextConfig.getMaxWindowContextCount() < windowContextCount)
+        if(this.windowContextQuotaHandler.checkQuota(getNumberOfNextWindowContext()))
         {
             if(!cleanupInactiveWindowContexts())
             {
-                //TODO
-                throw tooManyOpenWindowException(this.windowContextConfig.getWindowContextTimeoutInMinutes());
+                this.windowContextQuotaHandler.handleQuotaViolation();
             }
-
-            windowContextCount = getNumberOfNextWindowContext();
         }
 
         if(this.projectStageDevelopment &&
@@ -234,7 +240,7 @@ public class DefaultWindowContextManager
             //it's easier for developers to check the current window context
             //after a cleanup of window contexts it isn't reliable
             //however - such a cleanup shouldn't occur during development
-            windowContextId = convertToDevWindowContextId(windowContextId, windowContextCount);
+            windowContextId = convertToDevWindowContextId(windowContextId, getNumberOfNextWindowContext());
         }
         cacheWindowId(windowContextId);
         return windowContextId;
@@ -424,4 +430,9 @@ public class DefaultWindowContextManager
         }
         return windowContextId;
     }
+
+    public Collection<WindowContext> getWindowContexts()
+    {
+        return Collections.unmodifiableCollection(this.windowContextMap.values());
+    }
 }

Added: 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=983341&view=auto
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultWindowContextQuotaHandler.java (added)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/DefaultWindowContextQuotaHandler.java Sun Aug  8 04:42:53 2010
@@ -0,0 +1,108 @@
+/*
+ * 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.extensions.cdi.javaee.jsf.impl.scope.conversation;
+
+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.EditableWindowContext;
+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;
+import java.util.Date;
+
+/**
+ * @author Gerhard Petracek
+ */
+public class DefaultWindowContextQuotaHandler implements WindowContextQuotaHandler
+{
+    private final int maxWindowContextCount;
+
+    public DefaultWindowContextQuotaHandler(int maxWindowContextCount)
+    {
+        this.maxWindowContextCount = maxWindowContextCount;
+    }
+
+    public boolean checkQuota(int activeWindowContextCount)
+    {
+        return this.maxWindowContextCount < activeWindowContextCount;
+    }
+
+    public void handleQuotaViolation()
+    {
+        if(!cleanupWindowContext())
+        {
+            throw tooManyOpenWindowException(this.maxWindowContextCount);
+        }
+    }
+
+    private boolean cleanupWindowContext()
+    {
+        WindowContextManager windowContextManager = ConversationUtils.getWindowContextManager();
+
+        if(windowContextManager instanceof EditableWindowContextManager)
+        {
+            EditableWindowContextManager editableWindowContextManager =
+                    (EditableWindowContextManager)windowContextManager;
+
+            Collection<WindowContext> activeWindowContexts = editableWindowContextManager.getWindowContexts();
+
+            int activeWindowContextCountBeforeCleanup = activeWindowContexts.size();
+
+            removeEldestWindowContext(editableWindowContextManager, activeWindowContexts);
+
+            if(activeWindowContextCountBeforeCleanup > editableWindowContextManager.getWindowContexts().size())
+            {
+                return true;
+            }
+        }
+        return false;
+    }
+
+    private void removeEldestWindowContext(EditableWindowContextManager editableWindowContextManager,
+                                           Collection<WindowContext> activeWindowContexts)
+    {
+        WindowContext windowContextToRemove = findEldestWindowContext(activeWindowContexts);
+
+        if(windowContextToRemove != null)
+        {
+            editableWindowContextManager.removeWindowContext(windowContextToRemove);
+        }
+    }
+
+    private WindowContext findEldestWindowContext(Collection<WindowContext> activeWindowContexts)
+    {
+        Date lastAccess = new Date();
+        WindowContext result = null;
+        for(WindowContext windowContext : activeWindowContexts)
+        {
+            if(windowContext instanceof EditableWindowContext)
+            {
+                if(lastAccess.after(((EditableWindowContext)windowContext).getLastAccess()))
+                {
+                    lastAccess = ((EditableWindowContext)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/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=983341&r1=983340&r2=983341&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 Sun Aug  8 04:42:53 2010
@@ -32,6 +32,7 @@ import org.apache.myfaces.extensions.cdi
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.JsfUtils;
 
 import javax.enterprise.inject.Typed;
+import java.util.Date;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.Map;
@@ -212,6 +213,11 @@ public class JsfWindowContext implements
         return !this.expirationEvaluator.isExpired();
     }
 
+    public Date getLastAccess()
+    {
+        return this.expirationEvaluator.getLastAccess();
+    }
+
     public void touch()
     {
         this.expirationEvaluator.touch();

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/TimeoutExpirationEvaluator.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/TimeoutExpirationEvaluator.java?rev=983341&r1=983340&r2=983341&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/TimeoutExpirationEvaluator.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/TimeoutExpirationEvaluator.java Sun Aug  8 04:42:53 2010
@@ -29,7 +29,7 @@ public class TimeoutExpirationEvaluator
 
     protected Date lastAccess;
 
-    TimeoutExpirationEvaluator(int timeoutInMinutes)
+    protected TimeoutExpirationEvaluator(int timeoutInMinutes)
     {
         this.timeoutInMs = timeoutInMinutes * 60000;
     }
@@ -44,4 +44,9 @@ public class TimeoutExpirationEvaluator
     {
         this.lastAccess = new Date();
     }
+
+    Date getLastAccess()
+    {
+        return lastAccess;
+    }
 }

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=983341&r1=983340&r2=983341&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 Sun Aug  8 04:42:53 2010
@@ -22,6 +22,7 @@ import org.apache.myfaces.extensions.cdi
 import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.WindowContext;
 
 import java.util.Map;
+import java.util.Date;
 import java.lang.annotation.Annotation;
 
 /**
@@ -34,6 +35,8 @@ public interface EditableWindowContext e
      */
     boolean isActive();
 
+    Date getLastAccess();
+
     void touch();
 
     void removeInactiveConversations();

Added: 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=983341&view=auto
==============================================================================
--- 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 (added)
+++ 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 Sun Aug  8 04:42:53 2010
@@ -0,0 +1,54 @@
+/*
+ * 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.extensions.cdi.javaee.jsf.impl.scope.conversation.spi;
+
+import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager;
+import org.apache.myfaces.extensions.cdi.core.api.scope.conversation.WindowContext;
+
+import java.util.Collection;
+
+/**
+ * @author Gerhard Petracek
+ */
+public interface EditableWindowContextManager extends WindowContextManager
+{
+    boolean activateWindowContext(String windowContextId);
+
+    boolean activateWindowContext(WindowContext windowContext);
+
+    void resetCurrentWindowContext();
+
+    void resetWindowContext(String windowContextId);
+
+    void resetWindowContext(WindowContext windowContext);
+
+    void resetConversations();
+
+    void resetConversations(String windowContextId);
+
+    void resetConversations(WindowContext windowContext);
+
+    void removeCurrentWindowContext();
+
+    void removeWindowContext(String windowContextId);
+
+    void removeWindowContext(WindowContext windowContext);
+
+    Collection<WindowContext> getWindowContexts();
+}

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/JsfAwareWindowContextConfig.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/JsfAwareWindowContextConfig.java?rev=983341&r1=983340&r2=983341&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/JsfAwareWindowContextConfig.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/JsfAwareWindowContextConfig.java Sun Aug  8 04:42:53 2010
@@ -28,4 +28,6 @@ public abstract class JsfAwareWindowCont
     public abstract WindowHandler getWindowHandler();
 
     public abstract ConversationFactory getConversationFactory();
+
+    public abstract WindowContextQuotaHandler getWindowContextQuotaHandler();
 }

Added: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/WindowContextQuotaHandler.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/WindowContextQuotaHandler.java?rev=983341&view=auto
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/WindowContextQuotaHandler.java (added)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/spi/WindowContextQuotaHandler.java Sun Aug  8 04:42:53 2010
@@ -0,0 +1,29 @@
+/*
+ * 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.extensions.cdi.javaee.jsf.impl.scope.conversation.spi;
+
+/**
+ * @author Gerhard Petracek
+ */
+public interface WindowContextQuotaHandler
+{
+    boolean checkQuota(int activeWindowContextCount);
+
+    void handleQuotaViolation();
+}

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=983341&r1=983340&r2=983341&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 Sun Aug  8 04:42:53 2010
@@ -25,7 +25,7 @@ public class ExceptionUtils
 {
     public static RuntimeException tooManyOpenWindowException(int windowContextTimeoutInMinutes)
     {
-        return new RuntimeException("Too many active Windows/Tabs have been opened!" +
+        return new RuntimeException("Too many active windows/tabs have been opened!" +
             " Please continue with one of the existing windows or wait up to "
                 + windowContextTimeoutInMinutes + " minutes.");
     }