Zkontrolovat změnu chování v metodách buildValidatorFactory a buildDefaultValidatorFactory

Toto pravidlo značí jakékoli použití metody javax.validation.Validation.buildDefaultValidatorFactory() nebo Validation.byDefaultProvider().configure().buildValidatorFactory(). Implementace Liberty beanValidation-1.0 a beanValidation-1.1 jsou poskytovány projektem Apache Bean Validation. V prostředí Java EE 8 byla implementace objektu typu Bean Validation poskytovaná funkcí Liberty beanValidation-2.0 změněna na Hibernate Validator. Implementace objektu Apache Bean Validation vyžaduje aplikaci k vytvoření nespravovaného objektu ValidatorFactory a metoda ConstraintValidatorFactory vrací instanci ConstraintValidator spravovanou objektem CDI. Hibernate Validator však podporuje pouze generování objektů ConstraintValidator spravovaných CDI s výchozím objektem ValidatorFactory, který byl předán běhovým prostředím serveru. Tento server spravovaný objektem ValidatorFactory může být získán použitím @Resource, @Inject nebo přímým vyhledáváním rozhraní JNDI.

Aplikace by mohly zobrazit změnu chování při použití javax.validation.Validation.buildDefaultValidatorFactory() nebo Validation.byDefaultProvider().configure().buildValidatorFactory(). Všimněte si, že před vyvoláním metody buildValidatorFactory() mohou být vyvolány jiné metody přizpůsobení, např. messageInterpolator(), traversableResolver(), parameterNameProvider() nebo constraintValidatorFactory().

Stručně řečeno, uživatelé, kteří očekávají, že objekty vracené ConstraintValidatorFactory budou spravovanými objekty CDI, budou muset implementovat změny do svého existujícího kódu objektu typu Bean Validation.

Následující kód je příkladem použití objektu typu Bean Validation, který by měl být refaktorován:

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

Následující kód zobrazuje opravu pro problematický kód:

//Doporučené chování aplikace (potenciální rychlá oprava)
@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();

Další informace o konfiguraci ověřen na serveru WebSphere Liberty viz dokumentace Bean Validation 2.0.