複数のEJBとのインタフェースを実装

ps0604:

次のインタフェースを考えます:

public interface MyRunnable {   
    public MyResponse run(int x);
}

それは2つので実装されている@Stateless豆:

@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
     }
}

今、私は条件に応じて、1つの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

UPDATEの私が気づいたことを何か。私は削除する場合はimplements MyRunnable豆から何の起動エラーはありません。

フライング:

あなたが同じインターフェイスを実装しているので、Bean1Bean2彼らはににマッピングされているMyRunnable(彼らは今ある@Local豆)。溶接は、これを解決する方法を知らないので、あなたが注入したいどの豆を指定する必要があります。適切な方法は、次のようになります。

@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);
  }
}

おすすめ

転載: http://43.154.161.224:23101/article/api/json?id=209010&siteId=1