Skip to content

Commit

Permalink
Hibernate Validators are thread-safe, so create one for each resource…
Browse files Browse the repository at this point in the history
… and reuse it instead of create a new one for each request
  • Loading branch information
asoldano committed Nov 20, 2017
1 parent f627350 commit ec2d564
Showing 1 changed file with 15 additions and 14 deletions.
Expand Up @@ -33,6 +33,7 @@
import javax.validation.ConstraintViolationException;
import javax.validation.Validation;
import javax.validation.ValidationException;
import javax.validation.Validator;
import javax.validation.ValidatorFactory;
import javax.validation.executable.ExecutableType;
import javax.validation.executable.ExecutableValidator;
Expand Down Expand Up @@ -68,7 +69,7 @@ public final class JBossWSBeanValidationProvider extends BeanValidationProvider
*/
private TypeResolver typeResolver = new TypeResolver();

private volatile ValidatorFactory contextValidatorFactory = null;
private volatile Validator contextValidator = null;

private ValidatorFactory factory = null;

Expand Down Expand Up @@ -391,45 +392,45 @@ public <T> void validateBean(final T bean)

private <T> Set<ConstraintViolation<T>> doValidateBean(final T bean)
{
if (contextValidatorFactory != null)
if (contextValidator != null)
{
return contextValidatorFactory.getValidator().validate(bean);
return contextValidator.validate(bean);
}
return getValidatorFactory().getValidator().validate(bean);
return getValidator().validate(bean);
}

private ExecutableValidator getExecutableValidator()
{
if (contextValidatorFactory != null)
if (contextValidator != null)
{
return contextValidatorFactory.getValidator().forExecutables();
return contextValidator.forExecutables();
}
return getValidatorFactory().getValidator().forExecutables();
return getValidator().forExecutables();

}


private synchronized ValidatorFactory getValidatorFactory()
private synchronized Validator getValidator()
{
if (contextValidatorFactory != null)
if (contextValidator != null)
{
return contextValidatorFactory;
return contextValidator;
}
try
{
//get jndi vlidatorFactory to validate cdi beans
Context context = new InitialContext();
contextValidatorFactory = ValidatorFactory.class.cast(context.lookup("java:comp/ValidatorFactory"));
contextValidator = ValidatorFactory.class.cast(context.lookup("java:comp/ValidatorFactory")).getValidator();
}
catch (NamingException e)
{
//TODO: i18n log
}
if (contextValidatorFactory == null) {
contextValidatorFactory = factory;
if (contextValidator == null) {
contextValidator = factory.getValidator();
}

return contextValidatorFactory;
return contextValidator;
}


Expand Down

0 comments on commit ec2d564

Please sign in to comment.