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/07/24 20:58:03 UTC

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

Author: gpetracek
Date: Sat Jul 24 18:58:02 2010
New Revision: 978926

URL: http://svn.apache.org/viewvc?rev=978926&view=rev
Log:
EXTCDI-33 cached window context

Added:
    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/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/AccessScopeAwareNavigationHandler.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/GroupedConversationContextAdapter.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/JsfUtils.java
    myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf2/impl/scope/conversation/AccessScopeAwareNavigationHandler.java

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/AccessScopeAwareNavigationHandler.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/AccessScopeAwareNavigationHandler.java?rev=978926&r1=978925&r2=978926&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/AccessScopeAwareNavigationHandler.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/scope/conversation/AccessScopeAwareNavigationHandler.java Sat Jul 24 18:58:02 2010
@@ -21,6 +21,7 @@ package org.apache.myfaces.extensions.cd
 import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.request.CodiFacesContextFactory.wrapFacesContext;
 import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils.storeCurrentViewIdAsOldViewId;
 import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils.storeCurrentViewIdAsNewViewId;
+import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.JsfUtils;
 
 import javax.faces.application.NavigationHandler;
 import javax.faces.context.FacesContext;
@@ -39,6 +40,8 @@ public class AccessScopeAwareNavigationH
 
     public void handleNavigation(FacesContext facesContext, String s, String s1)
     {
+        JsfUtils.resetCaches();
+
         //TODO check myfaces core - issue? facesContext is not wrapped here
         facesContext = wrapFacesContext(facesContext);
 

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=978926&r1=978925&r2=978926&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 Sat Jul 24 18:58:02 2010
@@ -30,6 +30,8 @@ import org.apache.myfaces.extensions.cdi
 import org.apache.myfaces.extensions.cdi.javaee.jsf.api.listener.phase.PhaseId;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.api.request.RequestTypeResolver;
 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.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.RedirectHandler;
@@ -179,32 +181,36 @@ public class DefaultWindowContextManager
     //TODO improve performance
     public WindowContext getCurrentWindowContext()
     {
-        Long windowContextId = resolveWindowContextId(this.windowContextConfig.isGetRequestParameterSupported(),
-                                                      this.redirectHandler);
+        Long windowContextId = RequestCache.getCurrentWindowId();
 
-        if (windowContextId == null)
+        if(windowContextId == null)
         {
-            windowContextId = this.lastWindowContextId.incrementAndGet();
-            cacheWindowId(windowContextId);
+            windowContextId = resolveWindowContextId(this.windowContextConfig.isGetRequestParameterSupported(),
+                                                     this.redirectHandler);
+
+            if (windowContextId == null)
+            {
+                windowContextId = this.lastWindowContextId.incrementAndGet();
+                cacheWindowId(windowContextId);
+            }
+
+            RequestCache.setCurrentWindowId(windowContextId);
         }
 
         return getWindowContext(windowContextId);
     }
 
-    public WindowContext getWindowContext(long windowContextId)
+    public synchronized WindowContext getWindowContext(long windowContextId)
     {
-        synchronized (this)
-        {
-            WindowContext result = this.windowContextMap.get(windowContextId);
+        WindowContext result = this.windowContextMap.get(windowContextId);
 
-            if (result == null)
-            {
-                result = new JsfWindowContext(windowContextId, this.windowContextConfig);
+        if (result == null)
+        {
+            result = new JsfWindowContext(windowContextId, this.windowContextConfig);
 
-                this.windowContextMap.put(windowContextId, result);
-            }
-            return result;
+            this.windowContextMap.put(windowContextId, result);
         }
+        return result;
     }
 
     public void activateWindowContext(long id)
@@ -214,6 +220,7 @@ public class DefaultWindowContextManager
 
     public void activateWindowContext(WindowContext windowContext)
     {
+        JsfUtils.resetCaches();
         FacesContext facesContext = FacesContext.getCurrentInstance();
         WindowContextIdHolderComponent windowContextIdHolder =
                 ConversationUtils.getWindowContextIdHolderComponent(facesContext);
@@ -240,6 +247,7 @@ public class DefaultWindowContextManager
 
     public void resetWindowContext(WindowContext windowContext)
     {
+        JsfUtils.resetCaches();
         for (Conversation conversation : ((EditableWindowContext)windowContext).getConversations().values())
         {
             conversation.restart();
@@ -258,6 +266,7 @@ public class DefaultWindowContextManager
 
     public void resetConversations(WindowContext windowContext)
     {
+        JsfUtils.resetCaches();
         for (Conversation conversation : ((EditableWindowContext)windowContext).getConversations().values())
         {
             //TODO
@@ -282,6 +291,7 @@ public class DefaultWindowContextManager
 
     public void removeWindowContext(WindowContext windowContext)
     {
+        JsfUtils.resetCaches();
         this.windowContextMap.remove(windowContext.getId());
 
         FacesContext facesContext = FacesContext.getCurrentInstance();
@@ -306,6 +316,7 @@ public class DefaultWindowContextManager
 
     private void removeWindowContextIdHolderComponent(FacesContext facesContext)
     {
+        JsfUtils.resetCaches();
         Iterator<UIComponent> uiComponents = facesContext.getViewRoot().getChildren().iterator();
 
         UIComponent uiComponent;

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=978926&r1=978925&r2=978926&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 Sat Jul 24 18:58:02 2010
@@ -24,6 +24,7 @@ import org.apache.myfaces.extensions.cdi
 import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.EditableConversation;
 import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils;
+import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.RequestCache;
 import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.scope.conversation.spi.EditableWindowContext;
 
 import javax.enterprise.inject.spi.Bean;
@@ -62,7 +63,7 @@ class GroupedConversationContextAdapter 
      */
     protected Bean<WindowContextManager> resolveWindowContextManagerBean()
     {
-        return ConversationUtils.resolveConversationManagerBean();
+        return RequestCache.resolveWindowContextManagerBean();
     }
 
     /**

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/JsfUtils.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/JsfUtils.java?rev=978926&r1=978925&r2=978926&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/JsfUtils.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/JsfUtils.java Sat Jul 24 18:58:02 2010
@@ -37,6 +37,11 @@ import java.util.Locale;
  */
 public class JsfUtils
 {
+    public static void resetCaches()
+    {
+        RequestCache.resetCache();
+    }
+
     public static void registerPhaseListener(PhaseListener phaseListener)
     {
         LifecycleFactory lifecycleFactory = (LifecycleFactory) FactoryFinder.getFactory(

Added: 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=978926&view=auto
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/RequestCache.java (added)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf/impl/util/RequestCache.java Sat Jul 24 18:58:02 2010
@@ -0,0 +1,82 @@
+/*
+ * 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.util;
+
+import org.apache.myfaces.extensions.cdi.core.impl.scope.conversation.spi.WindowContextManager;
+import org.apache.myfaces.extensions.cdi.core.impl.utils.CodiUtils;
+
+import javax.enterprise.inject.spi.Bean;
+
+/**
+ * @author Gerhard Petracek
+ */
+public class RequestCache
+{
+    private static ThreadLocal<Long> windowIdCache = new ThreadLocal<Long>();
+
+    private static ThreadLocal<WindowContextManager> windowContextManagerCache
+            = new ThreadLocal<WindowContextManager>();
+
+    private static ThreadLocal<Bean<WindowContextManager>> windowContextManagerBeanCache
+            = new ThreadLocal<Bean<WindowContextManager>>();
+
+
+    public static void resetCache()
+    {
+        windowContextManagerCache.remove();
+        windowContextManagerBeanCache.remove();
+        windowIdCache.remove();
+    }
+
+    public static WindowContextManager resolveWindowContextManager(Bean<WindowContextManager> windowContextManagerBean)
+    {
+        WindowContextManager windowContextManager = windowContextManagerCache.get();
+
+        if(windowContextManager == null)
+        {
+            windowContextManager = CodiUtils.getOrCreateScopedInstanceOfBean(windowContextManagerBean);
+            windowContextManagerCache.set(windowContextManager);
+        }
+
+        return windowContextManager;
+    }
+
+    public static Bean<WindowContextManager> resolveWindowContextManagerBean()
+    {
+        Bean<WindowContextManager> windowContextManagerBean = windowContextManagerBeanCache.get();
+
+        if(windowContextManagerBean == null)
+        {
+            windowContextManagerBean = ConversationUtils.resolveConversationManagerBean();
+            windowContextManagerBeanCache.set(windowContextManagerBean);
+        }
+
+        return windowContextManagerBean;
+    }
+
+    public static Long getCurrentWindowId()
+    {
+        return windowIdCache.get();
+    }
+
+    public static void setCurrentWindowId(Long windowId)
+    {
+        windowIdCache.set(windowId);
+    }
+}

Modified: myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf2/impl/scope/conversation/AccessScopeAwareNavigationHandler.java
URL: http://svn.apache.org/viewvc/myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf2/impl/scope/conversation/AccessScopeAwareNavigationHandler.java?rev=978926&r1=978925&r2=978926&view=diff
==============================================================================
--- myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf2/impl/scope/conversation/AccessScopeAwareNavigationHandler.java (original)
+++ myfaces/extensions/cdi/trunk/jee-modules/jsf20-module/impl/src/main/java/org/apache/myfaces/extensions/cdi/javaee/jsf2/impl/scope/conversation/AccessScopeAwareNavigationHandler.java Sat Jul 24 18:58:02 2010
@@ -21,6 +21,7 @@ package org.apache.myfaces.extensions.cd
 import static org.apache.myfaces.extensions.cdi.javaee.jsf2.impl.request.CodiFacesContextFactory.wrapFacesContext;
 import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils.storeCurrentViewIdAsOldViewId;
 import static org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.ConversationUtils.storeCurrentViewIdAsNewViewId;
+import org.apache.myfaces.extensions.cdi.javaee.jsf.impl.util.JsfUtils;
 
 import javax.faces.application.NavigationHandler;
 import javax.faces.context.FacesContext;
@@ -39,6 +40,8 @@ public class AccessScopeAwareNavigationH
 
     public void handleNavigation(FacesContext facesContext, String s, String s1)
     {
+        JsfUtils.resetCaches();
+
         //TODO check myfaces core - issue? facesContext is not wrapped here
         facesContext = wrapFacesContext(facesContext);