我有一个无状态EJB,它包含多个应该注入的JNDI资源:
@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); }
...
}
}
我当前的实现使用多个字段来接收注入的资源,然后将它们移动到Collection中供以后使用。
但是,这段代码很难看,队列的数量应该是动态的。当我必须增加队列数量时,我不想在多个地方更改代码,而只需添加一个配置行/注释。
是否有办法配置无状态bean,以便将资源直接注入List?我正在使用EJB 3.0。
答案 0 :(得分:1)
@Resource
无法绑定到列表,但您可以使用包含jms/syncQueue2,jms/syncQueue2
等所有资源的字符串列表,然后在@PostCostruct
中进行动态查找。< / p>
@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完成代码。