svn commit: r1241573 - /struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/ScopesHashModel.java
Author: jogep Date: Tue Feb 7 19:41:45 2012 New Revision: 1241573 URL: http://svn.apache.org/viewvc?rev=1241573&view=rev Log: WW-3750: ScopesHashModel calls OgnlValueStack.findValue too many times during rendering freemarker templates Patch provided by Pelladi Gabor Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/ScopesHashModel.java Modified: struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/ScopesHashModel.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/ScopesHashModel.java?rev=1241573&r1=1241572&r2=1241573&view=diff == --- struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/ScopesHashModel.java (original) +++ struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/ScopesHashModel.java Tue Feb 7 19:41:45 2012 @@ -21,19 +21,18 @@ package org.apache.struts2.views.freemarker; -import javax.servlet.ServletContext; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpSession; - import com.opensymphony.xwork2.util.ValueStack; - import freemarker.template.ObjectWrapper; import freemarker.template.SimpleHash; import freemarker.template.TemplateModel; import freemarker.template.TemplateModelException; -import java.util.Map; +import javax.servlet.ServletContext; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpSession; import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; /** @@ -53,7 +52,8 @@ public class ScopesHashModel extends Sim private ServletContext servletContext; private ValueStack stack; private final Map unlistedModels = new HashMap(); - +private final Map stackCache = new ConcurrentHashMap(); +private static final Object NULL_OBJECT = new Object(); public ScopesHashModel(ObjectWrapper objectWrapper, ServletContext context, HttpServletRequest request, ValueStack stack) { super(objectWrapper); @@ -90,7 +90,7 @@ public class ScopesHashModel extends Sim if (stack != null) { -Object obj = stack.findValue(key); +Object obj = findValueOnStack(key); if (obj != null) { return wrap(obj); @@ -142,6 +142,24 @@ public class ScopesHashModel extends Sim return null; } +private Object findValueOnStack(final String key) { +if (this.stackCache.containsKey(key)) { +final Object value = this.stackCache.get(key); +if (value == NULL_OBJECT) { +return null; +} +return value; +} + +final Object value = this.stack.findValue(key); +if (value == null) { +this.stackCache.put(key, NULL_OBJECT); +} else { +this.stackCache.put(key, value); +} +return value; +} + public void put(String string, boolean b) { super.put(string, b); }
[CONF] Confluence Changes in the last 24 hours
This is a daily summary of all recent changes in Confluence. - Updated Spaces: - Apache Bean Validation (https://cwiki.apache.org/confluence/display/BeanValidation) Pages - People edited by mbenson (04:31 PM) https://cwiki.apache.org/confluence/display/BeanValidation/People Apache Camel (https://cwiki.apache.org/confluence/display/CAMEL) Pages - SEDA edited by davsclaus (11:53 PM) https://cwiki.apache.org/confluence/display/CAMEL/SEDA Apache CXF (https://cwiki.apache.org/confluence/display/CXF) Pages - Distributed OSGi Reference edited by sergey_beryozkin (07:07 AM) https://cwiki.apache.org/confluence/display/CXF/Distributed+OSGi+Reference DOSGi Releases edited by sergey_beryozkin (07:05 AM) https://cwiki.apache.org/confluence/display/CXF/DOSGi+Releases CVE-2012-0803 created by cohei...@apache.org (05:38 AM) https://cwiki.apache.org/confluence/display/CXF/CVE-2012-0803 Security Advisories edited by cohei...@apache.org (05:38 AM) https://cwiki.apache.org/confluence/display/CXF/Security+Advisories Apache DeltaSpike (https://cwiki.apache.org/confluence/display/DeltaSpike) Pages - Steps For A Release edited by gpetracek (03:20 PM) https://cwiki.apache.org/confluence/display/DeltaSpike/Steps+For+A+Release Suggested Git Workflows edited by gastaldi (07:25 AM) https://cwiki.apache.org/confluence/display/DeltaSpike/Suggested+Git+Workflows Apache Directory client API (https://cwiki.apache.org/confluence/display/DIRAPI) Pages - Downloads edited by pamarcelot (07:50 AM) https://cwiki.apache.org/confluence/display/DIRAPI/Downloads Navigation edited by pamarcelot (06:02 AM) https://cwiki.apache.org/confluence/display/DIRAPI/Navigation Apache Directory Website (https://cwiki.apache.org/confluence/display/DIRxSITE) Pages - Index edited by pamarcelot (06:15 AM) https://cwiki.apache.org/confluence/display/DIRxSITE/Index Apache Directory Studio 2.0 M2 released created by pamarcelot (06:14 AM) https://cwiki.apache.org/confluence/display/DIRxSITE/2012/02/07/Apache+Directory+Studio+2.0+M2+released ApacheDS 2.0.0-M5 released created by pamarcelot (06:10 AM) https://cwiki.apache.org/confluence/display/DIRxSITE/2012/02/07/ApacheDS+2.0.0-M5+released Apache Directory LDAP API 1.0.0-M10 released created by pamarcelot (06:08 AM) https://cwiki.apache.org/confluence/display/DIRxSITE/2012/02/07/Apache+Directory+LDAP+API+1.0.0-M10+released Navigation edited by pamarcelot (06:04 AM) https://cwiki.apache.org/confluence/display/DIRxSITE/Navigation Apache Directory Studio (https://cwiki.apache.org/confluence/display/DIRxSTUDIO) Pages - Downloads edited by pamarcelot (09:01 AM) https://cwiki.apache.org/confluence/display/DIRxSTUDIO/Downloads Apache Directory Studio 2.0 M2 released created by pamarcelot (05:58 AM) https://cwiki.apache.org/confluence/display/DIRxSTUDIO/2012/02/07/Apache+Directory+Studio+2.0+M2+released Index edited by pamarcelot (06:00 AM) https://cwiki.apache.org/confluence/display/DIRxSTUDIO/Index Navigation edited by pamarcelot (05:56 AM) https://cwiki.apache.org/confluence/display/DIRxSTUDIO/Navigation Apache Directory Studio 2.0 edited by pamarcelot (05:53 AM) https://cwiki.apache.org/confluence/display/DIRxSTUDIO/Apache+Directory+Studio+2.0 Apache Felix (https://cwiki.apache.org/confluence/display/FELIX) Pages - Apache Felix Lightweight HTTP Service edited by kgilmer (10:28 PM) https://cwiki.apache.org/confluence/display/FELIX/Apache+Felix+Lightweight+HTTP+Service news edited by kgilmer (10:14 PM) https://cwiki.apache.org/confluence/display/FELIX/news downloads edited by kgilmer (10:11 PM) https://cwiki.apache.org/confluence/display/FELIX/downloads Apache Flex (https://cwiki.apache.org/confluence/display/FLEX) Pages - Compile-time-data injection edited by martin.heidegger (01:13 PM) https://cwiki.apache.org/confluence/display/FLEX/Compile-time-data+injection Random Thoughts created by martin.heidegger (01:11 PM) https://cwiki.apache.org/confluence/display/FLEX/Random+Thoughts Apache Jackrabbit (https://cwiki.apache.org/confluence/display/JCR) Pages - Downloads edited by jukka (09:00 AM) https://cwiki.apache.org/confluence/disp