この規則は、以下の使用にフラグを立てます。 javax.validation.Validation.buildDefaultValidatorFactory() または Validation.byDefaultProvider().configure().buildValidatorFactory() 。 Liberty beanValidation-1.0 および beanValidation-1.1 実装は Apache Bean Validation によって提供されます。 Java EE 8 では、 Liberty フィーチャーによって提供される Bean Validation 実装 beanValidation-2.0 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 Validation コードに対する変更を実装する必要があります。
以下のコードは、リファクタリングする必要がある Bean Validation 使用法の例です。
//Original application behavior
Validator validator = Validation.byDefaultProvider().configure().messageInterpolator(messageResourceInterpolator).buildValidatorFactory().getValidator();
以下のコードは、問題のあるコードの修正を示しています。
//Recommended application behavior (potential Automated 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 の資料を参照してください。