Author: lukaszlenart Date: Sat Oct 23 19:59:30 2010 New Revision: 1026672 URL: http://svn.apache.org/viewvc?rev=1026672&view=rev Log: Solved WW-3461 - reduced lock scope
Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java Modified: struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java URL: http://svn.apache.org/viewvc/struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java?rev=1026672&r1=1026671&r2=1026672&view=diff ============================================================================== --- struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java (original) +++ struts/struts2/trunk/xwork-core/src/main/java/com/opensymphony/xwork2/validator/AnnotationActionValidatorManager.java Sat Oct 23 19:59:30 2010 @@ -61,23 +61,25 @@ public class AnnotationActionValidatorMa this.validatorFileParser = parser; } - public synchronized List<Validator> getValidators(Class clazz, String context) { + public List<Validator> getValidators(Class clazz, String context) { return getValidators(clazz, context, null); } - public synchronized List<Validator> getValidators(Class clazz, String context, String method) { + public List<Validator> 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<ValidatorConfig> 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<ValidatorConfig> cfgs = validatorCache.get(validatorKey); + // get the set of validator configs + cfgs = new ArrayList<ValidatorConfig>(validatorCache.get(validatorKey)); + } ValueStack stack = ActionContext.getContext().getValueStack(); @@ -87,8 +89,8 @@ public class AnnotationActionValidatorMa 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);