You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by gc...@apache.org on 2008/02/01 20:50:26 UTC
svn commit: r617621 -
/myfaces/trinidad/trunk/trinidad-api/src/main/java/org/apache/myfaces/trinidad/context/RequestContext.java
Author: gcrawford
Date: Fri Feb 1 11:50:22 2008
New Revision: 617621
URL: http://svn.apache.org/viewvc?rev=617621&view=rev
Log:
TRINIDAD-926 add method to get an application scoped concurrentMap to RequestContext
Modified:
myfaces/trinidad/trunk/trinidad-api/src/main/java/org/apache/myfaces/trinidad/context/RequestContext.java
Modified: myfaces/trinidad/trunk/trinidad-api/src/main/java/org/apache/myfaces/trinidad/context/RequestContext.java
URL: http://svn.apache.org/viewvc/myfaces/trinidad/trunk/trinidad-api/src/main/java/org/apache/myfaces/trinidad/context/RequestContext.java?rev=617621&r1=617620&r2=617621&view=diff
==============================================================================
--- myfaces/trinidad/trunk/trinidad-api/src/main/java/org/apache/myfaces/trinidad/context/RequestContext.java (original)
+++ myfaces/trinidad/trunk/trinidad-api/src/main/java/org/apache/myfaces/trinidad/context/RequestContext.java Fri Feb 1 11:50:22 2008
@@ -24,6 +24,9 @@
import java.util.Map;
import java.util.TimeZone;
+import java.util.concurrent.ConcurrentHashMap;
+import java.util.concurrent.ConcurrentMap;
+
import javax.faces.component.UIComponent;
import javax.faces.component.UIViewRoot;
import javax.faces.context.FacesContext;
@@ -365,6 +368,29 @@
public abstract ChangeManager getChangeManager();
/**
+ * Gets a per application concurrent map. There is no synchronization
+ * with ServletContext attributes.
+ */
+ public ConcurrentMap<String, Object> getApplicationScopedConcurrentMap()
+ {
+ ClassLoader cl = _getClassLoader();
+
+ ConcurrentMap<String, Object> classMap = _APPLICATION_MAPS.get(cl);
+
+ if (classMap == null)
+ {
+ ConcurrentMap<String, Object> newClassMap = new ConcurrentHashMap<String, Object>();
+ ConcurrentMap<String, Object> oldClassMap = _APPLICATION_MAPS.putIfAbsent(cl, newClassMap);
+
+ classMap = ((oldClassMap != null)? oldClassMap : newClassMap);
+
+ assert(classMap != null);
+ }
+
+ return classMap;
+ }
+
+ /**
* Gets the PageFlowScopeProvider for the current application.
*/
public abstract PageFlowScopeProvider getPageFlowScopeProvider();
@@ -529,6 +555,17 @@
return error;
}
+ //
+ // Pick a ClassLoader
+ //
+ private ClassLoader _getClassLoader()
+ {
+ return Thread.currentThread().getContextClassLoader();
+ }
+
+ @SuppressWarnings({"CollectionWithoutInitialCapacity"})
+ private static final ConcurrentMap<ClassLoader, ConcurrentMap<String, Object>> _APPLICATION_MAPS =
+ new ConcurrentHashMap<ClassLoader, ConcurrentMap<String, Object>>();
static private final ThreadLocal<RequestContext> _CURRENT_CONTEXT =
new ThreadLocal<RequestContext>();
static private final TrinidadLogger _LOG =