extended synchronization for methodResolverCache (SPR-7525)
This commit is contained in:
parent
479b4c1b84
commit
e035477e6a
|
|
@ -29,7 +29,6 @@ import java.util.LinkedHashMap;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
|
||||||
import javax.portlet.ActionRequest;
|
import javax.portlet.ActionRequest;
|
||||||
import javax.portlet.ActionResponse;
|
import javax.portlet.ActionResponse;
|
||||||
import javax.portlet.ClientDataRequest;
|
import javax.portlet.ClientDataRequest;
|
||||||
|
|
@ -152,7 +151,7 @@ public class AnnotationMethodHandlerAdapter extends PortletContentGenerator
|
||||||
private BeanExpressionContext expressionContext;
|
private BeanExpressionContext expressionContext;
|
||||||
|
|
||||||
private final Map<Class<?>, PortletHandlerMethodResolver> methodResolverCache =
|
private final Map<Class<?>, PortletHandlerMethodResolver> methodResolverCache =
|
||||||
new ConcurrentHashMap<Class<?>, PortletHandlerMethodResolver>();
|
new HashMap<Class<?>, PortletHandlerMethodResolver>();
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
@ -393,12 +392,14 @@ public class AnnotationMethodHandlerAdapter extends PortletContentGenerator
|
||||||
*/
|
*/
|
||||||
private PortletHandlerMethodResolver getMethodResolver(Object handler) {
|
private PortletHandlerMethodResolver getMethodResolver(Object handler) {
|
||||||
Class handlerClass = ClassUtils.getUserClass(handler);
|
Class handlerClass = ClassUtils.getUserClass(handler);
|
||||||
PortletHandlerMethodResolver resolver = this.methodResolverCache.get(handlerClass);
|
synchronized (this.methodResolverCache) {
|
||||||
if (resolver == null) {
|
PortletHandlerMethodResolver resolver = this.methodResolverCache.get(handlerClass);
|
||||||
resolver = new PortletHandlerMethodResolver(handlerClass);
|
if (resolver == null) {
|
||||||
this.methodResolverCache.put(handlerClass, resolver);
|
resolver = new PortletHandlerMethodResolver(handlerClass);
|
||||||
|
this.methodResolverCache.put(handlerClass, resolver);
|
||||||
|
}
|
||||||
|
return resolver;
|
||||||
}
|
}
|
||||||
return resolver;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -34,7 +34,6 @@ import java.util.List;
|
||||||
import java.util.Locale;
|
import java.util.Locale;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ConcurrentHashMap;
|
|
||||||
import javax.servlet.ServletException;
|
import javax.servlet.ServletException;
|
||||||
import javax.servlet.ServletRequest;
|
import javax.servlet.ServletRequest;
|
||||||
import javax.servlet.ServletResponse;
|
import javax.servlet.ServletResponse;
|
||||||
|
|
@ -184,7 +183,7 @@ public class AnnotationMethodHandlerAdapter extends WebContentGenerator
|
||||||
private BeanExpressionContext expressionContext;
|
private BeanExpressionContext expressionContext;
|
||||||
|
|
||||||
private final Map<Class<?>, ServletHandlerMethodResolver> methodResolverCache =
|
private final Map<Class<?>, ServletHandlerMethodResolver> methodResolverCache =
|
||||||
new ConcurrentHashMap<Class<?>, ServletHandlerMethodResolver>();
|
new HashMap<Class<?>, ServletHandlerMethodResolver>();
|
||||||
|
|
||||||
|
|
||||||
public AnnotationMethodHandlerAdapter() {
|
public AnnotationMethodHandlerAdapter() {
|
||||||
|
|
@ -194,7 +193,7 @@ public class AnnotationMethodHandlerAdapter extends WebContentGenerator
|
||||||
// See SPR-7316
|
// See SPR-7316
|
||||||
StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter();
|
StringHttpMessageConverter stringHttpMessageConverter = new StringHttpMessageConverter();
|
||||||
stringHttpMessageConverter.setWriteAcceptCharset(false);
|
stringHttpMessageConverter.setWriteAcceptCharset(false);
|
||||||
messageConverters = new HttpMessageConverter[]{new ByteArrayHttpMessageConverter(), stringHttpMessageConverter,
|
this.messageConverters = new HttpMessageConverter[]{new ByteArrayHttpMessageConverter(), stringHttpMessageConverter,
|
||||||
new SourceHttpMessageConverter(), new XmlAwareFormHttpMessageConverter()};
|
new SourceHttpMessageConverter(), new XmlAwareFormHttpMessageConverter()};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -440,12 +439,14 @@ public class AnnotationMethodHandlerAdapter extends WebContentGenerator
|
||||||
*/
|
*/
|
||||||
private ServletHandlerMethodResolver getMethodResolver(Object handler) {
|
private ServletHandlerMethodResolver getMethodResolver(Object handler) {
|
||||||
Class handlerClass = ClassUtils.getUserClass(handler);
|
Class handlerClass = ClassUtils.getUserClass(handler);
|
||||||
ServletHandlerMethodResolver resolver = this.methodResolverCache.get(handlerClass);
|
synchronized (this.methodResolverCache) {
|
||||||
if (resolver == null) {
|
ServletHandlerMethodResolver resolver = this.methodResolverCache.get(handlerClass);
|
||||||
resolver = new ServletHandlerMethodResolver(handlerClass);
|
if (resolver == null) {
|
||||||
this.methodResolverCache.put(handlerClass, resolver);
|
resolver = new ServletHandlerMethodResolver(handlerClass);
|
||||||
|
this.methodResolverCache.put(handlerClass, resolver);
|
||||||
|
}
|
||||||
|
return resolver;
|
||||||
}
|
}
|
||||||
return resolver;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue