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 2009/05/28 04:56:01 UTC
svn commit: r779418 -
/myfaces/core/trunk_1.2.x/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlRenderKitImpl.java
Author: lu4242
Date: Thu May 28 02:56:00 2009
New Revision: 779418
URL: http://svn.apache.org/viewvc?rev=779418&view=rev
Log:
MYFACES-2156 Performance improvement in HtmlRenderKitImpl
Modified:
myfaces/core/trunk_1.2.x/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlRenderKitImpl.java
Modified: myfaces/core/trunk_1.2.x/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlRenderKitImpl.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk_1.2.x/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlRenderKitImpl.java?rev=779418&r1=779417&r2=779418&view=diff
==============================================================================
--- myfaces/core/trunk_1.2.x/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlRenderKitImpl.java (original)
+++ myfaces/core/trunk_1.2.x/impl/src/main/java/org/apache/myfaces/renderkit/html/HtmlRenderKitImpl.java Thu May 28 02:56:00 2009
@@ -21,8 +21,8 @@
import java.io.IOException;
import java.io.OutputStream;
import java.io.Writer;
-import java.util.HashMap;
import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
import javax.faces.context.ResponseStream;
import javax.faces.context.ResponseWriter;
@@ -30,6 +30,7 @@
import javax.faces.render.Renderer;
import javax.faces.render.ResponseStateManager;
+import org.apache.commons.collections.map.Flat3Map;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.myfaces.buildtools.maven2.plugin.builder.annotation.JSFRenderKit;
@@ -49,24 +50,19 @@
//~ Instance fields ----------------------------------------------------------------------------
- private Map<String, Renderer> _renderers;
+ private Map<String, Map<String, Renderer>> _renderers;
private ResponseStateManager _responseStateManager;
//~ Constructors -------------------------------------------------------------------------------
public HtmlRenderKitImpl()
{
- _renderers = new HashMap<String, Renderer>();
+ _renderers = new ConcurrentHashMap<String, Map<String, Renderer>>(64, 0.75f, 1);
_responseStateManager = new HtmlResponseStateManager();
}
//~ Methods ------------------------------------------------------------------------------------
- private String key(String componentFamily, String rendererType)
- {
- return componentFamily + "." + rendererType;
- }
-
public Renderer getRenderer(String componentFamily, String rendererType)
{
if(componentFamily == null)
@@ -77,7 +73,12 @@
{
throw new NullPointerException("renderer type must not be null.");
}
- Renderer renderer = _renderers.get(key(componentFamily, rendererType));
+ Map <String,Renderer> familyRendererMap = _renderers.get(componentFamily);
+ Renderer renderer = null;
+ if (familyRendererMap != null)
+ {
+ renderer = familyRendererMap.get(rendererType);
+ }
if (renderer == null)
{
log.warn("Unsupported component-family/renderer-type: " + componentFamily + "/" + rendererType);
@@ -102,24 +103,43 @@
log.error("addRenderer: renderer = null is not allowed");
throw new NullPointerException("renderer must not be null.");
}
-
- String rendererKey = key(componentFamily, rendererType);
- if (_renderers.get(rendererKey) != null) {
- // this is not necessarily an error, but users do need to be
- // very careful about jar processing order when overriding
- // some component's renderer with an alternate renderer.
- log.debug("Overwriting renderer with family = " + componentFamily +
- " rendererType = " + rendererType +
- " renderer class = " + renderer.getClass().getName());
- }
-
- _renderers.put(rendererKey, renderer);
+
+ _put(componentFamily, rendererType, renderer);
if (log.isTraceEnabled())
log.trace("add Renderer family = " + componentFamily +
" rendererType = " + rendererType +
" renderer class = " + renderer.getClass().getName());
}
+
+ /**
+ * Put the renderer on the double map
+ *
+ * @param componentFamily
+ * @param rendererType
+ * @param renderer
+ */
+ synchronized private void _put(String componentFamily, String rendererType, Renderer renderer)
+ {
+ Map <String,Renderer> familyRendererMap = _renderers.get(componentFamily);
+ if (familyRendererMap == null)
+ {
+ familyRendererMap = (Map<String,Renderer>) new Flat3Map();
+ _renderers.put(componentFamily, familyRendererMap);
+ }
+ else
+ {
+ if (familyRendererMap.get(rendererType) != null) {
+ // this is not necessarily an error, but users do need to be
+ // very careful about jar processing order when overriding
+ // some component's renderer with an alternate renderer.
+ log.debug("Overwriting renderer with family = " + componentFamily +
+ " rendererType = " + rendererType +
+ " renderer class = " + renderer.getClass().getName());
+ }
+ }
+ familyRendererMap.put(rendererType, renderer);
+ }
public ResponseStateManager getResponseStateManager()
{