WW-3750 reduces scope of cashing

git-svn-id: https://svn.apache.org/repos/asf/struts/struts2/trunk@1307614 13f79535-47bb-0310-9956-ffa450edef68
This commit is contained in:
Lukasz Lenart
2012-03-30 21:04:33 +00:00
parent c7a0ec6256
commit 35b84844d9
3 changed files with 11 additions and 19 deletions
@@ -32,7 +32,6 @@ import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpSession;
import java.util.HashMap;
import java.util.Map;
import java.util.concurrent.ConcurrentHashMap;
/**
@@ -52,8 +51,7 @@ public class ScopesHashModel extends SimpleHash implements TemplateModel {
private ServletContext servletContext;
private ValueStack stack;
private final Map<String,TemplateModel> unlistedModels = new HashMap<String,TemplateModel>();
private final Map<String, Object> stackCache = new ConcurrentHashMap<String, Object>();
private static final Object NULL_OBJECT = new Object();
private volatile Object parametersCache;
public ScopesHashModel(ObjectWrapper objectWrapper, ServletContext context, HttpServletRequest request, ValueStack stack) {
super(objectWrapper);
@@ -143,21 +141,15 @@ public class ScopesHashModel extends SimpleHash implements TemplateModel {
}
private Object findValueOnStack(final String key) {
if (this.stackCache.containsKey(key)) {
final Object value = this.stackCache.get(key);
if (value == NULL_OBJECT) {
return null;
if ("parameters".equals(key)) {
if (parametersCache != null) {
return parametersCache;
}
return value;
Object parametersLocal = stack.findValue(key);
parametersCache = parametersLocal;
return parametersLocal;
}
final Object value = this.stack.findValue(key);
if (value == null) {
this.stackCache.put(key, NULL_OBJECT);
} else {
this.stackCache.put(key, value);
}
return value;
return stack.findValue(key);
}
public void put(String string, boolean b) {
@@ -32,7 +32,7 @@
<@s.param name="namespace">${namespace}</@s.param>
<@s.param name="actionName">${name}</@s.param>
</@s.url>
<li><@s.a href="%{showConfig}">${name}</@s.a></li>
<li><a href="${showConfig}">${name}</a></li>
</#list>
</ul>
</td>
@@ -69,7 +69,7 @@
<@s.url var="namespaceLink" action="actionNames" includeParams="none">
<@s.param name="namespace">${namespace}</@s.param>
</@s.url>
<@s.a href="%{namespaceLink}"><#if namespace == ""> default <#else> ${namespace} </#if></@s.a>
<a href="${namespaceLink}"><#if namespace == ""> default <#else> ${namespace} </#if></a>
</div>
</#foreach>
</div>
@@ -84,7 +84,7 @@
<@s.param name="namespace">${namespace}</@s.param>
<@s.param name="actionName">${name}</@s.param>
</@s.url>
<@s.a href="%{actionLink}">${name}</@s.a>
<a href="${actionLink}">${name}</a>
</div>
</#foreach>
</#if>