You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by em...@apache.org on 2018/02/15 16:52:39 UTC
svn commit: r1824327 -
/myfaces/core/branches/2.3.x/shared/src/main/java/org/apache/myfaces/shared/application/FacesServletMappingUtils.java
Author: embreijo
Date: Thu Feb 15 16:52:39 2018
New Revision: 1824327
URL: http://svn.apache.org/viewvc?rev=1824327&view=rev
Log:
MYFACES-4202 FacesServletMappingUtils.isFacesServlet calls ClassUtils.simpleClassForName on every request
Modified:
myfaces/core/branches/2.3.x/shared/src/main/java/org/apache/myfaces/shared/application/FacesServletMappingUtils.java
Modified: myfaces/core/branches/2.3.x/shared/src/main/java/org/apache/myfaces/shared/application/FacesServletMappingUtils.java
URL: http://svn.apache.org/viewvc/myfaces/core/branches/2.3.x/shared/src/main/java/org/apache/myfaces/shared/application/FacesServletMappingUtils.java?rev=1824327&r1=1824326&r2=1824327&view=diff
==============================================================================
--- myfaces/core/branches/2.3.x/shared/src/main/java/org/apache/myfaces/shared/application/FacesServletMappingUtils.java (original)
+++ myfaces/core/branches/2.3.x/shared/src/main/java/org/apache/myfaces/shared/application/FacesServletMappingUtils.java Thu Feb 15 16:52:39 2018
@@ -21,6 +21,9 @@ package org.apache.myfaces.shared.applic
import java.util.Collection;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import javax.faces.context.ExternalContext;
import javax.faces.context.FacesContext;
import javax.faces.webapp.FacesServlet;
import javax.servlet.ServletContext;
@@ -34,6 +37,9 @@ import org.apache.myfaces.shared.webapp.
*/
public class FacesServletMappingUtils
{
+ // Key used to store a map of servlet class names with boolean values that indicate whether the
+ // the servlet is a FacesServlet.
+ private static final String IS_FACES_SERVLET_CLASS_NAME_MAP = "org.apache.myfaces.IS_FACES_SERVLET_CLASS_NAME_MAP";
public static FacesServletMapping calculateGenericFacesServletMapping(
FacesContext facesContext, String servletPath, String pathInfo)
@@ -238,15 +244,41 @@ public class FacesServletMappingUtils
public static boolean isFacesServlet(FacesContext facesContext, String servletClassName)
{
- Class servletClass = org.apache.myfaces.shared.util.ClassUtils.simpleClassForName(
- servletClassName, false);
- boolean isFacesServlet = false;
- if (servletClass != null)
- {
- isFacesServlet = (FacesServlet.class.isAssignableFrom(servletClass) ||
- DelegatedFacesServlet.class.isAssignableFrom(servletClass) ||
- servletClass.getName().equals(
- WebXml.getWebXml(facesContext.getExternalContext()).getDelegateFacesServlet()));
+ ExternalContext eContext = facesContext.getExternalContext();
+
+ // Map used for caching purposes
+ Map<String, Boolean> servletClassNameMap = (Map<String, Boolean>)
+ eContext.getApplicationMap().get(IS_FACES_SERVLET_CLASS_NAME_MAP);
+
+ if (servletClassNameMap == null)
+ {
+ // Create the map if it has not been created yet
+ servletClassNameMap = new ConcurrentHashMap<String, Boolean>();
+ eContext.getApplicationMap().put(IS_FACES_SERVLET_CLASS_NAME_MAP, servletClassNameMap);
+ }
+
+ Boolean isFacesServlet = servletClassNameMap.get(servletClassName);
+
+ // if isFacesServlet is null, that means that we haven't cached the servletClassName boolean value
+ if (isFacesServlet == null)
+ {
+ Class servletClass = org.apache.myfaces.shared.util.ClassUtils.simpleClassForName(
+ servletClassName, false);
+
+ if (servletClass != null)
+ {
+ isFacesServlet = (FacesServlet.class.isAssignableFrom(servletClass) ||
+ DelegatedFacesServlet.class.isAssignableFrom(servletClass) ||
+ servletClass.getName().equals(
+ WebXml.getWebXml(eContext).getDelegateFacesServlet())) ? Boolean.TRUE : Boolean.FALSE;
+
+ servletClassNameMap.put(servletClassName, isFacesServlet);
+ }
+ else
+ {
+ isFacesServlet = Boolean.FALSE;
+ servletClassNameMap.put(servletClassName, isFacesServlet);
+ }
}
return isFacesServlet;