2015-07-03 43 views
0

的集合屬性我有一個無狀態EJB包含多個JNDI資源應該被注入:進樣JNDI資源投入到EJB

@Stateless(name = "QueueDispatcher") 
public class QueueDispatcher { 
    @Resource(name = "jms/syncQueue1") 
    private Queue queue1;  
    @Resource(name = "jms/syncQueue2") 
    private Queue queue2; 
    ... 

    private List<Queue> queueList; 

    @PostConstruct 
    public void init() { 
     //Move injected queues into arraylist... 
     queueList = new ArrayList<Queue>(); 
     if(queue1 != null){ queueList.add(queue1); } 
     if(queue2 != null){ queueList.add(queue2); } 
     ... 
    } 
} 

我的當前實現使用多個字段接收注入資源,然後將它們移動到一個收集以備後用。

但是,這段代碼很醜,隊列數量應該是動態的。當我不得不增加隊列數量時,我不想在多個地方更改代碼,而只需添加一個配置行/註釋。

有沒有辦法配置無狀態bean,以便資源直接注入到列表中?我正在使用EJB 3.0。

回答

1

@Resource不能綁定到一個列表,但你可以使用一個字符串列表與所有資源如jms/syncQueue2,jms/syncQueue2然後在@PostCostruct你可以做一個動態查找。

@Resource(name = "myqueues") 
private String queues; 

... 

@PostConstruct 
public void init() { 
    Context ctx=new InitialContext(); 
    String[] list = queues.split(","); 
    for(String item : list) { 
     try { 
      Queue q = (Queue) ctx.lookup(item); 
      queueList.add(q); 
     } 
    } 
} 

用catch ecc完成代碼。

+0

這看起來像我需要的exacly,謝謝:) – maja