JSF と CDI の世界に初めて足を踏み入れたとき、私は @Specializes アノテーションを使用して、単体テストのみでマネージド Bean の動作をオーバーライドしようとしました。WEB-INF/lib に MyFaces CODI jar があり、単体テストの側面は問題なく動作します。つまり、私の Mock 専門化が選択されて使用されます。
@ProjectStageActivated(ProjectStage.UnitTest.class)
@Specializes
class MockCustomerSearchScreenBean extends CustomerSearchScreenBean {
...
プロジェクトステージが実際に単体テストの場合は問題なく動作しますが、それ以外の場合はWARの起動が失敗します
org.apache.webbeans.exception.WebBeansDeploymentException: org.apache.webbeans.exception.inject.InconsistentSpecializationException: Specialized bean for class : class bla.bla.MockCustomerSearchScreenBean is not enabled in the deployment.
at org.apache.webbeans.config.BeansDeployer.checkSpecializations(BeansDeployer.java:653)
CODI ActivationExtension によって ProcessAnnotatedType に拒否フラグが設定されていることがわかるため、Bean の検出中に @Observes ProcessAnnotatedType が起動していることはわかっています。また、モック バージョンを明示的に拒否する独自の拡張機能も作成しましたが、コンテナーはまだ「通常の」バージョンではなく、特殊なバージョンを試してみてください。また、 @Specialization アノテーションを宣伝しないように AnnotatedType をラップしてみました。
モック サブクラスをデスクトップ サーバーにデプロイしない簡単な方法もありません。
WebSphere のオープン Web Bean のバージョンに、プロジェクトの段階 (または私が制御できるその他の要因) に基づいて専門化を無視するよう説得する方法はありますか?