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);