查找实现接口的所有EJB

时间:2015-02-07 09:49:43

标签: java-ee dependency-injection ejb-3.0

我有一组由多个提供商提供的数据。由于它们各自都有自己的访问方式,因此它们都有单独的EJB,尽管它们都实现了相同的接口。

有没有办法让所有人都注射?所以我最终得到某种List<MyInterface>?标准注射似乎给出了一个或模糊的错误。

1 个答案:

答案 0 :(得分:5)

通过CDI集成,您可以根据组织项目的方式选择两种方法。

如果提供者是在同一个模块中定义的,即注入与ejbs的定义相同,或者在与注入点声明相同的ejb jar中,那么:

public class MyService {

   @Inject
   @Any
   private Instance<MyProvider> providers;

   public void notifyProviders() {

     //Because there may be multiple implementation, do not use providers.get(), it is ambigous.
     //The Instance object implements Iterable, so you can iterate over it using the for loop.
     for(final MyProvider provider : providers) {
       provider.notify();
     }
   }
}

但是,如果你有远程定义这些ejbs,那么你需要解决使用@Producer,从那里你可以使用上面的Instance注入,因为CDI不能注入远程ejb bean。因此:

@Stateless
public class MyProviderContext {

   @EJB
   private MyProvider1 provider1;

   @EJB
   private MyProvider2 provider2;

   //... More declarations.

   @Produces
   public MyProvider provider1() {return provider1;}

   @Produces
   public MyProvider provider2() {return provider2;}

   //... More producers.
}