From d064ff93aeac533ba47b06a6cab1f3181eaca0a6 Mon Sep 17 00:00:00 2001 From: Lukasz Lenart Date: Sat, 23 Oct 2010 19:59:30 +0000 Subject: [PATCH] Solved WW-3461 - reduced lock scope git-svn-id: https://svn.apache.org/repos/asf/struts/struts2/trunk@1026672 13f79535-47bb-0310-9956-ffa450edef68 --- .../AnnotationActionValidatorManager.java | 28 ++++++++++--------- 1 file changed, 15 insertions(+), 13 deletions(-) diff --git a/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java b/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java index 844f78244..789e0fd72 100644 --- a/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java +++ b/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java @@ -61,23 +61,25 @@ public class AnnotationActionValidatorManager implements ActionValidatorManager this.validatorFileParser = parser; } - public synchronized List getValidators(Class clazz, String context) { + public List getValidators(Class clazz, String context) { return getValidators(clazz, context, null); } - public synchronized List getValidators(Class clazz, String context, String method) { + public List getValidators(Class clazz, String context, String method) { final String validatorKey = buildValidatorKey(clazz); - - if (validatorCache.containsKey(validatorKey)) { - if (FileManager.isReloadingConfigs()) { - validatorCache.put(validatorKey, buildValidatorConfigs(clazz, context, true, null)); + final List cfgs; + synchronized (validatorCache) { + if (validatorCache.containsKey(validatorKey)) { + if (FileManager.isReloadingConfigs()) { + validatorCache.put(validatorKey, buildValidatorConfigs(clazz, context, true, null)); + } + } else { + validatorCache.put(validatorKey, buildValidatorConfigs(clazz, context, false, null)); } - } else { - validatorCache.put(validatorKey, buildValidatorConfigs(clazz, context, false, null)); - } - // get the set of validator configs - List cfgs = validatorCache.get(validatorKey); + // get the set of validator configs + cfgs = new ArrayList(validatorCache.get(validatorKey)); + } ValueStack stack = ActionContext.getContext().getValueStack(); @@ -87,8 +89,8 @@ public class AnnotationActionValidatorManager implements ActionValidatorManager if (method == null || method.equals(cfg.getParams().get("methodName"))) { Validator validator = validatorFactory.getValidator( new ValidatorConfig.Builder(cfg) - .removeParam("methodName") - .build()); + .removeParam("methodName") + .build()); validator.setValidatorType(cfg.getType()); validator.setValueStack(stack); validators.add(validator);