簡體   English   中英

實現具有多個EJB的接口

[英]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 ,則沒有啟動錯誤。

由於您在Bean1Bean2實現了相同的接口, 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM