![](/img/trans.png)
[英]EJB Cannot resolve reference because there are multiple ejbs in the application with the same interface
[英]Implement interface with multiple EJBs
給出以下界面:
public interface MyRunnable {
public MyResponse run(int x);
}
它由兩個@Stateless
bean實現:
@Stateless
public class Bean1 implements MyRunnable {
public MyResponse run(int x) {
// some logic
}
}
@Stateless
public class Bean2 implements MyRunnable {
public MyResponse run(int x) {
// some logic
}
}
現在,我想根據條件運行一個bean或另一個bean。 實現這一目標的最佳方法是什么?
這是我嘗試過的,但沒有成功:
@Stateless
@LocalBean
public class MainBean {
@Inject
private Bean1 bean1;
@Inject
private Bean2 bean2;
public void someMethod(int y) {
MyRunnable runnable = null;
if (y == 1)
runnable = bean1;
else
runnable = bean2;
runnable.run(5);
}
}
代碼編譯,但它給我(在Wildfly中)一個啟動錯誤:
WELD-001408:類型Bean1與限定符@Default的不滿意依賴關系
更新我注意到的東西; 如果我從bean中刪除implements MyRunnable
,則沒有啟動錯誤。
由於您在Bean1
和Bean2
實現了相同的接口, Bean1
它們被映射到MyRunnable
(它們現在是@Local
bean)。 由於Weld不知道如何解決這個問題,因此您需要指定要注入的bean。 正確的方法是:
@Stateless
public class MyBean {
@EJB(beanName = "Bean1")
MyRunnable bean1;
@EJB(beanName = "Bean2")
MyRunnable bean2;
public void run() {
MyRunnable r = Math.random() < 0.5d ? bean1 : bean2;
r.run(10);
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.