我們正在嘗試在部署在Wildfly 10.1.0服務器上的集成測試套件中使用替代bean實例注入。@Specializes in Wildfly 10.1.0
根據CDI 1.2規範,可能的解決方案是僅對集成測試歸檔中部署的替代方案使用@Specializes註釋。
但是,默認實現總是被注入。我們嘗試了對受管Bean,會話bean的@Specializes,並嘗試在beans.xml文件中選擇備選項。
下面的示例說明這個問題:
BeanInterface.java
public interface BeanInterface {
void work();
}
Implementation1.java
@Dependent
public class Implementation1 implements BeanInterface {
@Override
public void work() {
System.out.println("test 1");
}
}
Implementation2
@Dependent
@Alternative
@Specializes
public class Implementation2 extends Implementation1 {
@Override
public void work() {
System.out.println("test 2");
}
}
TestSingleton.java :
@Singleton
@Startup
public class TestSingleton {
@Inject
private BeanInterface beanInterface;
@PostConstruct
public void init() {
this.beanInterface.work();
}
}
包裝這些類中一戰(有一個web.xml)和wildfly部署上,實施1中的無狀態豆總是注入。
Wildfly 10.1.0使用了實現CDI 1.2的weld-2.3.SP2。
感謝,
查理
您是否在beans.xml中聲明瞭bean作爲替代方案?你把它放在哪裏?在webapp/WEB-INF中?你需要什麼web.xml? – Rouliboy
另外,所有這些都直接部署到WAR中,還是有任何內部庫JAR參與?作爲說明,您可以通過'@ Priority'自動激活備選方案 –
謝謝John - 在Implementation2上使用@Priority按預期工作。我們在某種程度上試圖沒有成功,可能還有別的。 Rouliboy:我的意思是beans.xml,web.xml。 beans.xml爲空,使用bean-discovery-mode =「all」。 – cghislai