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