Java 实现与多个EJB的接口

Java 实现与多个EJB的接口,java,jakarta-ee,java-8,ejb,Java,Jakarta Ee,Java 8,Ejb,给定以下接口: public interface MyRunnable { public MyResponse run(int x); } 它由两个无状态bean实现: @Stateless public class Bean1 implements MyRunnable { public MyResponse run(int x) { // some logic } } @Stateless public class Bean2

给定以下接口:

public interface MyRunnable {   
    public MyResponse run(int x);
}
它由两个无状态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
中实现了相同的接口,它们被映射到
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);
  }
}
@无状态
公共类MyBean{
@EJB(beanName=“Bean1”)
MyRunnable bean1;
@EJB(beanName=“Bean2”)
MyRunnable bean2;
公开募捐{
MyRunnable r=Math.random()<0.5d?bean1:bean2;
r、 运行(10);
}
}

@Flown的可能重复您提到的问题只涉及一个bean,在我的例子中是多个。你知道如何解决这个问题吗?