You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by lu...@apache.org on 2013/11/26 01:53:11 UTC

svn commit: r1545483 - in /myfaces/core/trunk/impl/src/main/java/org/apache/myfaces: config/ view/facelets/compiler/ view/facelets/tag/composite/

Author: lu4242
Date: Tue Nov 26 00:53:11 2013
New Revision: 1545483

URL: http://svn.apache.org/r1545483
Log:
MYFACES-3828 - [perf] Do not store the namespace into state for dynamic components

Modified:
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/RuntimeConfig.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/RefreshDynamicComponentListener.java
    myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/CreateDynamicCompositeComponentListener.java

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java?rev=1545483&r1=1545482&r2=1545483&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/FacesConfigurator.java Tue Nov 26 00:53:11 2013
@@ -28,11 +28,15 @@ import java.net.URL;
 import java.net.URLConnection;
 import java.util.ArrayList;
 import java.util.Collection;
+import java.util.Collections;
 import java.util.Comparator;
+import java.util.HashMap;
+import java.util.HashSet;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Set;
 import java.util.StringTokenizer;
 import java.util.concurrent.CopyOnWriteArrayList;
 import java.util.logging.Level;
@@ -853,12 +857,16 @@ public class FacesConfigurator
     private void configureRuntimeConfig()
     {
         RuntimeConfig runtimeConfig = RuntimeConfig.getCurrentInstance(_externalContext);
-
         FacesConfigData dispenser = getDispenser();
+        List<String> knownNamespaces = new ArrayList<String>();
         
         for (ComponentTagDeclaration declaration : dispenser.getComponentTagDeclarations())
         {
             runtimeConfig.addComponentTagDeclaration(declaration);
+            if (declaration.getNamespace() != null)
+            {
+                knownNamespaces.add(declaration.getNamespace());
+            }
         }
         
         for (ManagedBean bean : dispenser.getManagedBeans())
@@ -1051,7 +1059,42 @@ public class FacesConfigurator
         for (FaceletTagLibrary faceletTagLibrary : dispenser.getTagLibraries())
         {
             runtimeConfig.addFaceletTagLibrary(faceletTagLibrary);
+            if (faceletTagLibrary.getNamespace() != null)
+            {
+                knownNamespaces.add(faceletTagLibrary.getNamespace());
+            }
+        }
+        
+        // Add default namespaces to the known namespaces
+        knownNamespaces.add("http://xmlns.jcp.org/jsf/core");
+        knownNamespaces.add("http://java.sun.com/jsf/core");
+        knownNamespaces.add("http://xmlns.jcp.org/jsf/html");
+        knownNamespaces.add("http://java.sun.com/jsf/html");
+        knownNamespaces.add("http://xmlns.jcp.org/jsf/facelets");
+        knownNamespaces.add("http://java.sun.com/jsf/facelets");
+        knownNamespaces.add("http://xmlns.jcp.org/jsp/jstl/core");
+        knownNamespaces.add("http://java.sun.com/jsp/jstl/core");
+        knownNamespaces.add("http://java.sun.com/jstl/core");
+        knownNamespaces.add("http://xmlns.jcp.org/jsp/jstl/functions");
+        knownNamespaces.add("http://java.sun.com/jsp/jstl/functions");
+        knownNamespaces.add("http://xmlns.jcp.org/jsf/composite");
+        knownNamespaces.add("http://java.sun.com/jsf/composite");
+        knownNamespaces.add("http://xmlns.jcp.org/jsf");
+        knownNamespaces.add("http://java.sun.com/jsf");
+        knownNamespaces.add("http://xmlns.jcp.org/jsf/passthrough");
+        knownNamespaces.add("http://java.sun.com/jsf/passthrough");
+        
+        Map<Integer, String> namespaceById = new HashMap<Integer, String>();
+        Map<String, Integer> idByNamespace = new HashMap<String, Integer>();
+        // Sort them to ensure the same id 
+        Collections.sort(knownNamespaces);
+        for (int i = 0; i < knownNamespaces.size(); i++)
+        {
+            namespaceById.put(i, knownNamespaces.get(i));
+            idByNamespace.put(knownNamespaces.get(i), i);
         }
+        runtimeConfig.setNamespaceById(Collections.unmodifiableMap(namespaceById));
+        runtimeConfig.setIdByNamespace(Collections.unmodifiableMap(idByNamespace));
     }
 
     private void removePurgedBeansFromSessionAndApplication(RuntimeConfig runtimeConfig)

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/RuntimeConfig.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/RuntimeConfig.java?rev=1545483&r1=1545482&r2=1545483&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/RuntimeConfig.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/config/RuntimeConfig.java Tue Nov 26 00:53:11 2013
@@ -115,6 +115,9 @@ public class RuntimeConfig
     private List<Object> _injectedObjects = new ArrayList<Object>();
     
     private List<FaceletTagLibrary> _faceletTagLibraries = new ArrayList<FaceletTagLibrary>();
+    
+    private Map<Integer, String> _namespaceById = new HashMap<Integer, String>();
+    private Map<String, Integer> _idByNamespace = new HashMap<String, Integer>();
 
     public static RuntimeConfig getCurrentInstance(ExternalContext externalContext)
     {
@@ -531,4 +534,25 @@ public class RuntimeConfig
     {
         _injectedObjects.add(object);
     }
+
+    public Map<Integer, String> getNamespaceById()
+    {
+        return _namespaceById;
+    }
+
+    public void setNamespaceById(Map<Integer, String> namespaceById)
+    {
+        this._namespaceById = namespaceById;
+    }
+
+    public Map<String, Integer> getIdByNamespace()
+    {
+        return _idByNamespace;
+    }
+
+    public void setIdByNamespace(Map<String, Integer> idByNamespace)
+    {
+        this._idByNamespace = idByNamespace;
+    }
+
 }

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/RefreshDynamicComponentListener.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/RefreshDynamicComponentListener.java?rev=1545483&r1=1545482&r2=1545483&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/RefreshDynamicComponentListener.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/compiler/RefreshDynamicComponentListener.java Tue Nov 26 00:53:11 2013
@@ -27,9 +27,11 @@ import javax.faces.context.FacesContext;
 import javax.faces.event.ComponentSystemEvent;
 import javax.faces.event.ComponentSystemEventListener;
 import javax.faces.view.facelets.Facelet;
+import org.apache.myfaces.config.RuntimeConfig;
 import org.apache.myfaces.view.facelets.AbstractFacelet;
 import org.apache.myfaces.view.facelets.FaceletFactory;
 import org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage;
+import org.apache.myfaces.view.facelets.tag.composite.CompositeResourceLibrary;
 import org.apache.myfaces.view.facelets.tag.jsf.ComponentSupport;
 
 /**
@@ -157,8 +159,26 @@ public final class RefreshDynamicCompone
 
     public Object saveState(FacesContext context)
     {
+        RuntimeConfig runtimeConfig = RuntimeConfig.getCurrentInstance(
+            context.getExternalContext());
         Object[] values = new Object[4];
-        values[0] = taglibURI;
+        Integer tagId = runtimeConfig.getIdByNamespace().get(taglibURI);
+        if (tagId != null)
+        {
+            values[0] = tagId;
+        }
+        else if (taglibURI.startsWith(CompositeResourceLibrary.NAMESPACE_PREFIX))
+        {
+            values[0] = new Object[]{0, taglibURI.substring(35)};
+        }
+        else if(taglibURI.startsWith(CompositeResourceLibrary.ALIAS_NAMESPACE_PREFIX))
+        {
+            values[0] = new Object[]{1, taglibURI.substring(34)};
+        }
+        else
+        {
+            values[0] = taglibURI;
+        }
         values[1] = tagName;
         values[2] = attributes;
         values[3] = baseKey;
@@ -168,7 +188,24 @@ public final class RefreshDynamicCompone
     public void restoreState(FacesContext context, Object state)
     {
         Object[] values = (Object[]) state;
-        taglibURI = (String) values[0];
+        if (values[0] instanceof String)
+        {
+            taglibURI = (String) values[0];
+        }
+        else if (values[0] instanceof Integer)
+        {
+            RuntimeConfig runtimeConfig = RuntimeConfig.getCurrentInstance(
+                context.getExternalContext());
+            taglibURI = runtimeConfig.getNamespaceById().get((Integer)values[0]);
+        }
+        else if (values[0] instanceof Object[])
+        {
+            Object[] def = (Object[])values[0];
+            String ns = ( ((Integer)def[0]).intValue() == 0) ? 
+                CompositeResourceLibrary.NAMESPACE_PREFIX :
+                CompositeResourceLibrary.ALIAS_NAMESPACE_PREFIX;
+            taglibURI = ns + (String)(((Object[])values[0])[1]);
+        }
         tagName = (String)values[1];
         attributes = (Map<String,Object>) values[2];
         baseKey = (String)values[3];

Modified: myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/CreateDynamicCompositeComponentListener.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/CreateDynamicCompositeComponentListener.java?rev=1545483&r1=1545482&r2=1545483&view=diff
==============================================================================
--- myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/CreateDynamicCompositeComponentListener.java (original)
+++ myfaces/core/trunk/impl/src/main/java/org/apache/myfaces/view/facelets/tag/composite/CreateDynamicCompositeComponentListener.java Tue Nov 26 00:53:11 2013
@@ -27,6 +27,7 @@ import javax.faces.context.FacesContext;
 import javax.faces.event.ComponentSystemEvent;
 import javax.faces.event.ComponentSystemEventListener;
 import javax.faces.view.facelets.Facelet;
+import org.apache.myfaces.config.RuntimeConfig;
 import org.apache.myfaces.view.facelets.AbstractFacelet;
 import org.apache.myfaces.view.facelets.DynamicComponentRefreshTransientBuildEvent;
 import org.apache.myfaces.view.facelets.FaceletCompositionContext;
@@ -188,8 +189,26 @@ public class CreateDynamicCompositeCompo
 
     public Object saveState(FacesContext context)
     {
+        RuntimeConfig runtimeConfig = RuntimeConfig.getCurrentInstance(
+            context.getExternalContext());
         Object[] values = new Object[4];
-        values[0] = taglibURI;
+        Integer tagId = runtimeConfig.getIdByNamespace().get(taglibURI);
+        if (tagId != null)
+        {
+            values[0] = tagId;
+        }
+        else if (taglibURI.startsWith(CompositeResourceLibrary.NAMESPACE_PREFIX))
+        {
+            values[0] = new Object[]{0, taglibURI.substring(35)};
+        }
+        else if(taglibURI.startsWith(CompositeResourceLibrary.ALIAS_NAMESPACE_PREFIX))
+        {
+            values[0] = new Object[]{1, taglibURI.substring(34)};
+        }
+        else
+        {
+            values[0] = taglibURI;
+        }
         values[1] = tagName;
         values[2] = attributes;
         values[3] = baseKey;
@@ -199,7 +218,24 @@ public class CreateDynamicCompositeCompo
     public void restoreState(FacesContext context, Object state)
     {
         Object[] values = (Object[]) state;
-        taglibURI = (String) values[0];
+        if (values[0] instanceof String)
+        {
+            taglibURI = (String) values[0];
+        }
+        else if (values[0] instanceof Integer)
+        {
+            RuntimeConfig runtimeConfig = RuntimeConfig.getCurrentInstance(
+                context.getExternalContext());
+            taglibURI = runtimeConfig.getNamespaceById().get((Integer)values[0]);
+        }
+        else if (values[0] instanceof Object[])
+        {
+            Object[] def = (Object[])values[0];
+            String ns = ( ((Integer)def[0]).intValue() == 0) ? 
+                CompositeResourceLibrary.NAMESPACE_PREFIX :
+                CompositeResourceLibrary.ALIAS_NAMESPACE_PREFIX;
+            taglibURI = ns + (String)(((Object[])values[0])[1]);
+        }
         tagName = (String)values[1];
         attributes = (Map<String,Object>) values[2];
         baseKey = (String)values[3];