buildValidatorFactory 및 buildDefaultValidatorFactory 메소드에서 동작 변경 확인

이 규칙은 javax.validation.Validation.buildDefaultValidatorFactory() 또는 Validation.byDefaultProvider().configure().buildValidatorFactory()의 사용에 플래그를 지정합니다. Liberty beanValidation-1.0beanValidation-1.1 구현은 Apache Bean Validation에서 제공합니다. Java EE 8에서 Liberty 기능 beanValidation-2.0 에서 제공하는 Bean Validation 구현이 Hibernate Validator로 변경되었습니다. Apache Bean Validation 구현에는 관리되지 않는 ValidatorFactory 오브젝트를 작성하기 위한 애플리케이션이 필요하며 ConstraintValidatorFactory는 CDI 관리 ConstraintValidator 인스턴스를 리턴합니다. 그러나 Hibernate Validator는 서버 런타임에서 제공하는 기본 ValidatorFactory를 사용하여 CDI 관리 ConstraintValidator 오브젝트 생성만 지원합니다. 이 서버 관리 ValidatorFactory는 @Resource, @Inject 또는 직접 JNDI 검색을 통해 얻을 수 있습니다.

애플리케이션은 javax.validation.Validation.buildDefaultValidatorFactory() 또는 Validation.byDefaultProvider().configure().buildValidatorFactory()를 사용할 때 동작 변경을 확인할 수 있습니다. buildValidatorFactory()가 호출되기 전에 messageInterpolator(), traversableResolver(), parameterNameProvider() 또는 constraintValidatorFactory()와 같은 다른 사용자 정의 메소드가 호출될 수 있습니다.

요약하면 ConstraintValidatorFactory에서 리턴된 오브젝트가 CDI 관리라고 예상하는 사용자는 기존의 Bean Validator 코드를 변경해야 합니다.

다음 코드는 리팩토링해야 하는 Bean Validation 사용의 예입니다.

		//Original application behavior
Validator validator = Validation.byDefaultProvider().configure().messageInterpolator(messageResourceInterpolator).buildValidatorFactory().getValidator();

다음 코드는 문제가 있는 코드에 대한 수정사항을 보여줍니다.

					//Recommended application behavior (potential quick fix)
@Inject    //@Resource or a jndi lookup of java:comp/ValidatorFactory could also be used to obtain the container's default ValidatorFactory
					ValidatorFactory validatorFactory;
Validator validator =  validatorFactory.usingContext().messageInterpolator(messageResourceInterpolator).getValidator();

WebSphere Liberty에서 유효성 검증 구성에 대한 자세한 정보는 Bean Validation 2.0 문서를 참조하십시오.