svn commit: r1241573 - /struts/struts2/trunk/core/src/main/java/org/apache/struts2/views/freemarker/ScopesHashModel.java

2012-02-07 Thread jogep
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

2012-02-07 Thread confluence
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