将 JNDI 资源注入 EJB 的集合 属性
Inject JNDI resources into a collection property of EJB
我有一个无状态 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); }
...
}
}
我当前的实现使用多个字段来接收注入的资源,然后将它们移动到一个集合中供后续使用。
不过,这段代码很丑,队列数应该是动态的。当我不得不增加队列数量时,我不想在多个地方更改代码,而是简单地添加一个配置 line/annotation.
有没有办法配置无状态bean,让资源直接注入List?我正在使用 EJB 3.0。
@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 完成代码。
我有一个无状态 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); }
...
}
}
我当前的实现使用多个字段来接收注入的资源,然后将它们移动到一个集合中供后续使用。
不过,这段代码很丑,队列数应该是动态的。当我不得不增加队列数量时,我不想在多个地方更改代码,而是简单地添加一个配置 line/annotation.
有没有办法配置无状态bean,让资源直接注入List?我正在使用 EJB 3.0。
@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 完成代码。