2015-02-07 51 views
0

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

有没有办法让所有他们注入?所以我最终得到某种List<MyInterface>?标准注射似乎给出了任何一个,或者模棱两可的错误。

回答

4

随着CDI的整合,根据您组织项目的方式,您有两种选择。

如果提供者相同的模块中定义的,即,喷射相同战争EJB的定义范围内,或在相同的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(); 
    } 
    } 
} 

但是,如果您有这些ejb的远程定义,那么您需要解决使用@Producer,因为您可以使用上述实例注入,因为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. 
}