1

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 のバージョンに、プロジェクトの段階 (または私が制御できるその他の要因) に基づいて専門化を無視するよう説得する方法はありますか?

4

1 に答える 1

0

WAS 8.0 は、かなり古いバージョンの OpenWebBeans を使用しています。この問題は、かなり前に OpenWebBeans で修正されました。私は8.5+に移行します。および/または@Alternativeで同じことを試してください(ただし、BDAはオフにしてください)。

于 2012-12-30T19:34:13.567 に答える