2010-03-09 69 views
2

我想知道,如果我可以注入(無狀態)bean的列表,那麼所有實現一個特殊的接口。是否有可能使用Java EE注入實現接口的bean列表

比如我有一個模塊合同

public interface ResetService { 
    void reset(MyContext context); 
} 

比我兩個模塊,即要實現這個接口。和一個模塊,那應該叫所有實現:

@EJBs 
private List<ResetService> resetServices; 

void resetAllModules(MyContext context) { 
    for (ResetService resetService : resetServices) 
    resetService.reset(context); 
} 

所有來電都在主事務和復位調用者必須知道,如果復位調用完成是非常重要的。所以我不能使用JMS和主題。

我想,這是不可能的,或?

回答

2

註解不可能。這裏最好的選擇是遍歷一個JNDI名稱數組,並對每個JNDI查找進行List供稿。以防萬一,如果您想嘗試使事情更具活力(如果我不相信這將是一個好主意),那麼可以查看以前的問題,如this one

3

以上答案是錯誤的。您可以使用@Any註釋和javax.enterprise.inject.Instance類注入dynamicaly。這裏簡單的例子http://coders-kitchen.com/2013/01/24/jee-and-dynamic-dependency-injection/

+0

我認爲這個問題是關於EJB的。而你的博文顯示了CDI註釋的用法。 CDI和EJB在服務器端的使用和處理完全不同。 – 2014-11-13 10:55:38

+1

上一個回答在4年前沒有錯。使用最新的J2EE規範(版本6)添加了提供解決方案的CDI。 – Konstantin 2015-02-13 08:18:30

2

您可以得到類型的所有豆類:

@Inject 
    BeanManager beanManager; 

    public Set<ResetService> getAllResetServices() { 
     return beanManager.getBeans(ResetService.class); 
    } 
相關問題