在我第一次涉足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)
我知道@Observes ProcessAnnotatedType是在bean发现期间触发的,因为我可以看到COID ActivationExtension在ProcessAnnotatedType上设置了veto标志,我还编写了我自己的扩展,它明确地修改了Mock版本,但容器是仍然决定尝试使用专业版而不是“正常版”。我还尝试将AnnotatedType包装为不通告@Specialization注释。
我没有简单的方法可以不将模拟子类部署到我的桌面服务器。
有没有办法说服WebSphere的开放式Web bean版本忽略基于项目阶段的专业化(或者我可以控制的其他因素)?
答案 0 :(得分:0)
WAS 8.0使用相当旧版本的OpenWebBeans。这个问题很久以前就在OpenWebBeans中修复了。我会转向8.5+。和/或尝试使用@Alternative(但关闭BDA)。