On Dec 10, 2014 1:18 AM, "Romain Manni-Bucau" <[email protected]> wrote: > > Hi Matt > > SKIPPED_PREFIXES was designed to be modifiable. >
Sorry; thanks for the note. > It is not sexy but idea was to let other products like tomee change it > without having to release bval. > > Id be happy to have a Filter.accept(fqn) as well if you find it cleaner - I > think we should actually. > > Wdyt? I guess I need more info to understand what kind of structure you're suggesting. Could an SPI work, possibly with the default impl looking for a well known resource name to make it super-simple? Matt > ---------- Message transféré ---------- > De : <[email protected]> > Date : 10 déc. 2014 01:14 > Objet : svn commit: r1644258 - in > /bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval: cdi/ jsr/ > À : <[email protected]> > Cc : > > Author: mbenson > Date: Wed Dec 10 00:14:41 2014 > New Revision: 1644258 > > URL: http://svn.apache.org/r1644258 > Log: > javadoc, cleanup > > Modified: > > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/BValBinding.java > > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/BValExtension.java > > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/BValInterceptor.java > > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/BValInterceptorBean.java > > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/ValidatorBean.java > > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/ValidatorFactoryBean.java > > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultConstraintValidatorFactory.java > > Modified: > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/BValBinding.java > URL: > http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/BValBinding.java?rev=1644258&r1=1644257&r2=1644258&view=diff > ============================================================================== > --- > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/BValBinding.java > (original) > +++ > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/BValBinding.java > Wed Dec 10 00:14:41 2014 > @@ -24,7 +24,9 @@ import java.lang.annotation.Retention; > import java.lang.annotation.RetentionPolicy; > import java.lang.annotation.Target; > > -//TODO javadoc > +/** > + * Custom {@link InterceptorBinding} to invoke executable validations on > CDI beans. > + */ > @Retention(RetentionPolicy.RUNTIME) > @Target({ElementType.TYPE}) > @InterceptorBinding > > Modified: > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/BValExtension.java > URL: > http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/BValExtension.java?rev=1644258&r1=1644257&r2=1644258&view=diff > ============================================================================== > --- > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/BValExtension.java > (original) > +++ > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/BValExtension.java > Wed Dec 10 00:14:41 2014 > @@ -41,28 +41,34 @@ import javax.validation.executable.Execu > import javax.validation.executable.ValidateOnExecution; > import javax.validation.metadata.BeanDescriptor; > import javax.validation.metadata.MethodType; > + > import java.lang.reflect.Modifier; > import java.lang.reflect.Type; > import java.util.Collection; > import java.util.Collections; > +import java.util.EnumSet; > import java.util.HashSet; > import java.util.Set; > -import java.util.concurrent.CopyOnWriteArraySet; > import java.util.logging.Level; > import java.util.logging.Logger; > > +/** > + * CDI {@link Extension} for Apache BVal setup. > + */ > public class BValExtension implements Extension { > private static final Logger LOGGER = > Logger.getLogger(BValExtension.class.getName()); > > // extension point, we can add a SPI if needed, today mainly a > fallback "API" for TomEE if we encounter an issue > - public static Collection<String> SKIPPED_PREFIXES = new > HashSet<String>(); > + public static final Set<String> SKIPPED_PREFIXES; > static { > - SKIPPED_PREFIXES.add("java."); > - SKIPPED_PREFIXES.add("javax."); > - SKIPPED_PREFIXES.add("org.apache.bval."); > - SKIPPED_PREFIXES.add("org.apache.openejb."); > - SKIPPED_PREFIXES.add("org.apache.deltaspike."); // should be > checked when upgrading > - SKIPPED_PREFIXES.add("org.apache.myfaces."); // should be checked > when upgrading > + final Set<String> s = new HashSet<String>(); > + s.add("java."); > + s.add("javax."); > + s.add("org.apache.bval."); > + s.add("org.apache.openejb."); > + s.add("org.apache.deltaspike."); // should be checked when > upgrading > + s.add("org.apache.myfaces."); // should be checked when upgrading > + SKIPPED_PREFIXES = Collections.unmodifiableSet(s); > } > > private boolean validatorFound = > Boolean.getBoolean("bval.in-container"); > @@ -84,11 +90,12 @@ public class BValExtension implements Ex > config = Validation.byDefaultProvider().configure(); > try { > final BootstrapConfiguration bootstrap = > config.getBootstrapConfiguration(); > - globalExecutableTypes = > convertToRuntimeTypes(bootstrap.getDefaultValidatedExecutableTypes()); > + globalExecutableTypes = > Collections.unmodifiableSet(convertToRuntimeTypes(bootstrap.getDefaultValidatedExecutableTypes())); > isExecutableValidationEnabled = > bootstrap.isExecutableValidationEnabled(); > > + // TODO we never contain IMPLICIT or ALL > validBean = > globalExecutableTypes.contains(ExecutableType.IMPLICIT) || > globalExecutableTypes.contains(ExecutableType.ALL); > - validConstructors =validBean || > globalExecutableTypes.contains(ExecutableType.CONSTRUCTORS); > + validConstructors = validBean || > globalExecutableTypes.contains(ExecutableType.CONSTRUCTORS); > validBusinessMethods = validBean || > globalExecutableTypes.contains(ExecutableType.NON_GETTER_METHODS); > validGetterMethods = > globalExecutableTypes.contains(ExecutableType.ALL) || > globalExecutableTypes.contains(ExecutableType.GETTER_METHODS); > } catch (final Exception e) { // custom providers can throw an > exception > @@ -105,22 +112,28 @@ public class BValExtension implements Ex > return; > } > config.addProperty("bval.before.cdi", "true"); // ignore parts of > the config relying on CDI since we didn't start yet > - factory = factory != null ? factory : > config.buildValidatorFactory(); > + if (factory == null) { > + factory = config.buildValidatorFactory(); > + } > validator = factory.getValidator(); > } > > private static Set<ExecutableType> convertToRuntimeTypes(final > Set<ExecutableType> defaultValidatedExecutableTypes) { > - final Set<ExecutableType> types = new > CopyOnWriteArraySet<ExecutableType>(); > + final Set<ExecutableType> types = > EnumSet.noneOf(ExecutableType.class); > for (final ExecutableType type : defaultValidatedExecutableTypes) { > - if (ExecutableType.IMPLICIT.equals(type)) { > - types.add(ExecutableType.CONSTRUCTORS); > - types.add(ExecutableType.NON_GETTER_METHODS); > - } else if (ExecutableType.ALL.equals(type)) { > + if (ExecutableType.NONE == type) { > + continue; > + } > + if (ExecutableType.ALL == type) { > types.add(ExecutableType.CONSTRUCTORS); > types.add(ExecutableType.NON_GETTER_METHODS); > types.add(ExecutableType.GETTER_METHODS); > break; > - } else if (!ExecutableType.NONE.equals(type)) { > + } > + if (ExecutableType.IMPLICIT == type) { > + types.add(ExecutableType.CONSTRUCTORS); > + types.add(ExecutableType.NON_GETTER_METHODS); > + } else { > types.add(type); > } > } > @@ -166,10 +179,12 @@ public class BValExtension implements Ex > if > (annotatedType.isAnnotationPresent(ValidateOnExecution.class) > || > hasValidationAnnotation(annotatedType.getMethods()) > || > hasValidationAnnotation(annotatedType.getConstructors()) > - || (validBean && classConstraints != null && > classConstraints.isBeanConstrained()) > - || (validConstructors && classConstraints != > null && !classConstraints.getConstrainedConstructors().isEmpty()) > - || (validBusinessMethods && classConstraints > != null && > !classConstraints.getConstrainedMethods(MethodType.NON_GETTER).isEmpty()) > - || (validGetterMethods && classConstraints != > null && > !classConstraints.getConstrainedMethods(MethodType.GETTER).isEmpty())) { > + || classConstraints != null > + && (validBean && > classConstraints.isBeanConstrained() > + || validConstructors && > !classConstraints.getConstrainedConstructors().isEmpty() > + || validBusinessMethods && > !classConstraints.getConstrainedMethods(MethodType.NON_GETTER).isEmpty() > + || validGetterMethods && > !classConstraints.getConstrainedMethods(MethodType.GETTER).isEmpty()) > + ) { > // TODO: keep track of bValAnnotatedType and > remove @BValBinding in > // ProcessBean event if needed cause here we can't > really add @ValidateOnExecution > // through an extension > @@ -250,10 +265,11 @@ public class BValExtension implements Ex > } > } > > - private static ClassLoader loader() { > - return Thread.currentThread().getContextClassLoader(); > - } > - > + /** > + * Request that an instance of the specified type be provided by the > container. > + * @param clazz > + * @return the requested instance wrapped in a {@link Releasable}. > + */ > public static <T> Releasable<T> inject(final Class<T> clazz) { > try { > final BeanManager beanManager = CDI.current().getBeanManager(); > @@ -280,6 +296,10 @@ public class BValExtension implements Ex > return CDI.current().getBeanManager(); > } > > + /** > + * Represents an item that can be released from a {@link > CreationalContext} at some point in the future. > + * @param <T> > + */ > public static class Releasable<T> { > private final CreationalContext<T> context; > private final InjectionTarget<T> injectionTarget; > > Modified: > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/BValInterceptor.java > URL: > http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/BValInterceptor.java?rev=1644258&r1=1644257&r2=1644258&view=diff > ============================================================================== > --- > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/BValInterceptor.java > (original) > +++ > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/BValInterceptor.java > Wed Dec 10 00:14:41 2014 > @@ -26,6 +26,7 @@ import javax.inject.Inject; > import javax.interceptor.AroundConstruct; > import javax.interceptor.AroundInvoke; > import javax.interceptor.Interceptor; > +import javax.interceptor.InterceptorBinding; > import javax.interceptor.InvocationContext; > import javax.validation.ConstraintViolation; > import javax.validation.ConstraintViolationException; > @@ -42,19 +43,23 @@ import java.util.ArrayList; > import java.util.Arrays; > import java.util.Collection; > import java.util.Collections; > -import java.util.HashSet; > +import java.util.EnumSet; > import java.util.List; > import java.util.Map; > import java.util.Set; > import java.util.concurrent.ConcurrentHashMap; > -import java.util.concurrent.CopyOnWriteArraySet; > > +/** > + * Interceptor class for the {@link BValBinding} {@link > InterceptorBinding}. > + */ > @Interceptor > @BValBinding > -@Priority(4800) // TODO: maybe add it through ASM to be compliant with CDI > 1.0 containers using simply this class as a template to generate another > one for CDI 1.1 impl > +@Priority(4800) > +// TODO: maybe add it through ASM to be compliant with CDI 1.0 containers > using simply this class as a template to > +// generate another one for CDI 1.1 impl > public class BValInterceptor { > private final Map<Method, Boolean> methodConfiguration = new > ConcurrentHashMap<Method, Boolean>(); > - private Collection<ExecutableType> classConfiguration; > + private Set<ExecutableType> classConfiguration; > private Boolean constructorValidated; > > @Inject > @@ -65,7 +70,8 @@ public class BValInterceptor { > > private ExecutableValidator executableValidator; > > - @AroundConstruct // TODO: see previous one > + @AroundConstruct > + // TODO: see previous one > public Object construct(final InvocationContext context) throws > Exception { > @SuppressWarnings("rawtypes") > final Constructor constructor = context.getConstructor(); > @@ -84,7 +90,8 @@ public class BValInterceptor { > > { > @SuppressWarnings("unchecked") > - final Set<ConstraintViolation<?>> violations = > executableValidator.validateConstructorParameters(constructor, > context.getParameters()); > + final Set<ConstraintViolation<?>> violations = > + > executableValidator.validateConstructorParameters(constructor, > context.getParameters()); > if (!violations.isEmpty()) { > throw new ConstraintViolationException(violations); > } > @@ -94,7 +101,8 @@ public class BValInterceptor { > > { > @SuppressWarnings("unchecked") > - final Set<ConstraintViolation<?>> violations = > executableValidator.validateConstructorReturnValue(constructor, > context.getTarget()); > + final Set<ConstraintViolation<?>> violations = > + > executableValidator.validateConstructorReturnValue(constructor, > context.getTarget()); > if (!violations.isEmpty()) { > throw new ConstraintViolationException(violations); > } > @@ -141,7 +149,8 @@ public class BValInterceptor { > return result; > } > > - private boolean isConstructorValidated(final Class<?> targetClass, > final Constructor<?> constructor) throws NoSuchMethodException { > + private boolean isConstructorValidated(final Class<?> targetClass, > final Constructor<?> constructor) > + throws NoSuchMethodException { > initClassConfig(targetClass); > > if (constructorValidated == null) { > @@ -206,18 +215,22 @@ public class BValInterceptor { > if (validateOnExecution == null) { > methodConfig = doValidMethod(method, > classConfiguration); > } else { > - final Collection<ExecutableType> config = new > HashSet<ExecutableType>(); > + final Set<ExecutableType> config = > EnumSet.noneOf(ExecutableType.class); > for (final ExecutableType type : > validateOnExecution.type()) { > + if (ExecutableType.NONE == type) { > + continue; > + } > + if (ExecutableType.ALL == type) { > + > config.add(ExecutableType.NON_GETTER_METHODS); > + config.add(ExecutableType.GETTER_METHODS); > + break; > + } > if (ExecutableType.IMPLICIT == type) { // on > method it just means validate, even on getters > > config.add(ExecutableType.NON_GETTER_METHODS); > if (lastClassWithTheMethod == null) { > > config.add(ExecutableType.GETTER_METHODS); > } // else the annotation was not on the > method so implicit doesn't mean getters > - } else if (ExecutableType.ALL == type) { > - > config.add(ExecutableType.NON_GETTER_METHODS); > - config.add(ExecutableType.GETTER_METHODS); > - break; > - } else if (ExecutableType.NONE != type) { > + } else { > config.add(type); > } > } > @@ -235,22 +248,26 @@ public class BValInterceptor { > if (classConfiguration == null) { > synchronized (this) { > if (classConfiguration == null) { > - classConfiguration = new > CopyOnWriteArraySet<ExecutableType>(); > + classConfiguration = > EnumSet.noneOf(ExecutableType.class); > > final ValidateOnExecution annotation = > targetClass.getAnnotation(ValidateOnExecution.class); > if (annotation == null) { > > classConfiguration.addAll(globalConfiguration.getGlobalExecutableTypes()); > } else { > for (final ExecutableType type : > annotation.type()) { > - if (ExecutableType.IMPLICIT ==type) { > - > classConfiguration.add(ExecutableType.CONSTRUCTORS); > - > classConfiguration.add(ExecutableType.NON_GETTER_METHODS); > - } else if (ExecutableType.ALL == type) { > + if (ExecutableType.NONE == type) { > + continue; > + } > + if (ExecutableType.ALL == type) { > > classConfiguration.add(ExecutableType.CONSTRUCTORS); > > classConfiguration.add(ExecutableType.NON_GETTER_METHODS); > > classConfiguration.add(ExecutableType.GETTER_METHODS); > break; > - } else if (ExecutableType.NONE != type) { > + } > + if (ExecutableType.IMPLICIT == type) { > + > classConfiguration.add(ExecutableType.CONSTRUCTORS); > + > classConfiguration.add(ExecutableType.NON_GETTER_METHODS); > + } else { > classConfiguration.add(type); > } > } > @@ -270,14 +287,14 @@ public class BValInterceptor { > } > } > > - private static boolean doValidMethod(final Method method, final > Collection<ExecutableType> config) { > - final boolean getter = isGetter(method); > - return (!getter && > config.contains(ExecutableType.NON_GETTER_METHODS)) > - || (getter && config.contains(ExecutableType.GETTER_METHODS)); > + private static boolean doValidMethod(final Method method, final > Set<ExecutableType> config) { > + return isGetter(method) ? > config.contains(ExecutableType.GETTER_METHODS) : config > + .contains(ExecutableType.NON_GETTER_METHODS); > } > > private static boolean isGetter(final Method method) { > final String name = method.getName(); > - return (name.startsWith("get") || name.startsWith("is")) && > method.getParameterTypes().length == 0; > - } > + return method.getParameterTypes().length == 0 && > !Void.TYPE.equals(method.getReturnType()) > + && (name.startsWith("get") || name.startsWith("is") && > boolean.class.equals(method.getReturnType())); > + } > } > > Modified: > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/BValInterceptorBean.java > URL: > http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/BValInterceptorBean.java?rev=1644258&r1=1644257&r2=1644258&view=diff > ============================================================================== > --- > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/BValInterceptorBean.java > (original) > +++ > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/BValInterceptorBean.java > Wed Dec 10 00:14:41 2014 > @@ -33,6 +33,9 @@ import java.util.Collections; > import java.util.HashSet; > import java.util.Set; > > +/** > + * {@link BValInterceptor} CDI {@link Bean}. > + */ > public class BValInterceptorBean implements Bean<BValInterceptor>, > PassivationCapable { > private final Set<Type> types; > private final Set<Annotation> qualifiers; > @@ -40,13 +43,15 @@ public class BValInterceptorBean impleme > private final InjectionTarget<BValInterceptor> injectionTarget; > > public BValInterceptorBean(final BeanManager bm) { > - types = new HashSet<Type>(); > - types.add(BValInterceptor.class); > - types.add(Object.class); > + final Set<Type> t = new HashSet<Type>(); > + t.add(BValInterceptor.class); > + t.add(Object.class); > + types = Collections.unmodifiableSet(t); > > - qualifiers = new HashSet<Annotation>(); > - qualifiers.add(DefaultLiteral.INSTANCE); > - qualifiers.add(AnyLiteral.INSTANCE); > + final Set<Annotation> q = new HashSet<Annotation>(); > + q.add(DefaultLiteral.INSTANCE); > + q.add(AnyLiteral.INSTANCE); > + qualifiers = Collections.unmodifiableSet(q); > > injectionTarget = > bm.createInjectionTarget(bm.createAnnotatedType(BValInterceptor.class)); > injectionPoints = > > Modified: > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/ValidatorBean.java > URL: > http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/ValidatorBean.java?rev=1644258&r1=1644257&r2=1644258&view=diff > ============================================================================== > --- > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/ValidatorBean.java > (original) > +++ > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/ValidatorBean.java > Wed Dec 10 00:14:41 2014 > @@ -31,7 +31,10 @@ import java.util.Collections; > import java.util.HashSet; > import java.util.Set; > > -public class ValidatorBean implements Bean<Validator> , PassivationCapable{ > +/** > + * {@link Validator} CDI {@link Bean}. > + */ > +public class ValidatorBean implements Bean<Validator> , PassivationCapable > { > private final Set<Type> types; > private final Set<Annotation> qualifiers; > private final ValidatorFactory factory; > @@ -41,13 +44,15 @@ public class ValidatorBean implements Be > this.factory = factory; > this.instance = validator; > > - types = new HashSet<Type>(); > - types.add(Validator.class); > - types.add(Object.class); > + final Set<Type> t = new HashSet<Type>(); > + t.add(Validator.class); > + t.add(Object.class); > + types = Collections.unmodifiableSet(t); > > - qualifiers = new HashSet<Annotation>(); > - qualifiers.add(DefaultLiteral.INSTANCE); > - qualifiers.add(AnyLiteral.INSTANCE); > + final Set<Annotation> q = new HashSet<Annotation>(); > + q.add(DefaultLiteral.INSTANCE); > + q.add(AnyLiteral.INSTANCE); > + qualifiers = Collections.unmodifiableSet(q); > } > > public Set<Type> getTypes() { > > Modified: > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/ValidatorFactoryBean.java > URL: > http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/ValidatorFactoryBean.java?rev=1644258&r1=1644257&r2=1644258&view=diff > ============================================================================== > --- > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/ValidatorFactoryBean.java > (original) > +++ > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/cdi/ValidatorFactoryBean.java > Wed Dec 10 00:14:41 2014 > @@ -30,6 +30,9 @@ import java.util.Collections; > import java.util.HashSet; > import java.util.Set; > > +/** > + * {@link ValidatorFactory} CDI {@link Bean}. > + */ > public class ValidatorFactoryBean implements Bean<ValidatorFactory> , > PassivationCapable{ > private final Set<Type> types; > private final Set<Annotation> qualifiers; > @@ -38,13 +41,15 @@ public class ValidatorFactoryBean implem > public ValidatorFactoryBean(final ValidatorFactory validatorFactory) { > this.instance = validatorFactory; > > - types = new HashSet<Type>(); > - types.add(ValidatorFactory.class); > - types.add(Object.class); > + final Set<Type> t = new HashSet<Type>(); > + t.add(ValidatorFactory.class); > + t.add(Object.class); > + types = Collections.unmodifiableSet(t); > > - qualifiers = new HashSet<Annotation>(); > - qualifiers.add(DefaultLiteral.INSTANCE); > - qualifiers.add(AnyLiteral.INSTANCE); > + final Set<Annotation> q = new HashSet<Annotation>(); > + q.add(DefaultLiteral.INSTANCE); > + q.add(AnyLiteral.INSTANCE); > + qualifiers = Collections.unmodifiableSet(q); > } > > public Set<Type> getTypes() { > > Modified: > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultConstraintValidatorFactory.java > URL: > http://svn.apache.org/viewvc/bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultConstraintValidatorFactory.java?rev=1644258&r1=1644257&r2=1644258&view=diff > ============================================================================== > --- > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultConstraintValidatorFactory.java > (original) > +++ > bval/branches/bval-11/bval-jsr/src/main/java/org/apache/bval/jsr/DefaultConstraintValidatorFactory.java > Wed Dec 10 00:14:41 2014 > @@ -33,7 +33,7 @@ import java.util.concurrent.CopyOnWriteA > * Description: create constraint instances with the default / no-arg > constructor <br/> > */ > public class DefaultConstraintValidatorFactory implements > ConstraintValidatorFactory, Closeable { > - private final Collection< BValExtension.Releasable<?>> releasables = > new CopyOnWriteArrayList<BValExtension.Releasable<?>>(); > + private final Collection<BValExtension.Releasable<?>> releasables = > new CopyOnWriteArrayList<BValExtension.Releasable<?>>(); > private Boolean useCdi = null; // store it to avoid > NoClassDefFoundError when cdi is not present (it is slow) + lazily (to wait > cdi is started) > > /** > @@ -47,11 +47,11 @@ public class DefaultConstraintValidatorF > synchronized (this) { > if (useCdi == null) { > try { > - useCdi = BValExtension.getBeanManager() != null; > + useCdi = > Boolean.valueOf(BValExtension.getBeanManager() != null); > } catch (final NoClassDefFoundError error) { > - useCdi = false; > + useCdi = Boolean.FALSE; > } catch (final Exception e) { > - useCdi = false; > + useCdi = Boolean.FALSE; > } > } > } > @@ -60,7 +60,7 @@ public class DefaultConstraintValidatorF > // 2011-03-27 jw: Do not use PrivilegedAction. > // Otherwise any user code would be executed with the privileges > of this class. > try { > - if (useCdi) { > + if (useCdi.booleanValue()) { > try { > final BValExtension.Releasable<T> instance = > BValExtension.inject(constraintClass); > if (instance != null) {
