2015-02-07 52 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. 
}