Ta reguła powoduje oznaczenie każdego użycia funkcji javax.validation.Validation.buildDefaultValidatorFactory() lub Validation.byDefaultProvider().configure().buildValidatorFactory(). Implementacje beanValidation-1.0 i beanValidation-1.1 na serwerze Liberty są realizowane przez składnik Apache Bean Validation. W środowisku Java EE 8 implementacja sprawdzania poprawności komponentu bean udostępnianego przez składnik Liberty beanValidation-2.0 została zmieniona na składnik Hibernate Validator. Implementacja Apache Bean Validation wymaga, aby aplikacja utworzyła niezarządzany obiekt ValidatorFactory, a fabryka ConstraintValidatorFactory zwraca instancję ConstraintValidator zarządzaną przez CDI. Jednak składnik Hibernate Validator obsługuje tylko generowanie obiektów ConstraintValidator zarządzanych przez CDI przy użyciu domyślnej fabryki ValidatorFactory udostępnianej przez środowisko wykonawcze serwera. Tę zarządzaną przez serwer fabrykę ValidatorFactory można uzyskać przy użyciu instrukcji @Resource, @Inject lub bezpośredniego wyszukiwania JNDI.
Zmiana w działaniu może być istotna, gdy aplikacja używa metody javax.validation.Validation.buildDefaultValidatorFactory() lub Validation.byDefaultProvider().configure().buildValidatorFactory(). Należy pamiętać, że przed wywołaniem metody buildValidatorFactory() mogą być wywoływane inne metody dostosowujące, takie jak messageInterpolator(), traversableResolver(), parameterNameProvider() lub constraintValidatorFactory().
Podsumowując, stwierdzić należy, że użytkownicy, którzy oczekują, że obiekty zwracane przez interfejs ConstraintValidatorFactory są zarządzane przez CDI, będą musieli wprowadzić zmiany do istniejącego kodu sprawdzania poprawności komponentów bean.
Poniższy kod stanowi przykład sprawdzania poprawności komponentu bean, który powinien zostać refaktoryzowany:
//Pierwotne działanie aplikacji
Validator validator = Validation.byDefaultProvider().configure().messageInterpolator(messageResourceInterpolator).buildValidatorFactory().getValidator();
|
Poniższy przykład ilustruje poprawkę problematycznego kodu:
//Zalecane działanie aplikacji (potencjalna szybka poprawka)
@Inject //Do uzyskania domyślnej fabryki ValidatorFactory kontenera można też użyć @Resource lub wyszukiwania jndi java:comp/ValidatorFactory
ValidatorFactory validatorFactory;
Validator validator = validatorFactory.usingContext().messageInterpolator(messageResourceInterpolator).getValidator();
|
Więcej informacji na temat konfigurowania sprawdzania poprawności w produkcie WebSphere Liberty zawiera dokumentacja Bean Validation 2.0.