Я знаю, как выполнить внедрение ресурсов, чтобы получить очередь JMS в EJB, как и в следующем примере, легко получить QUEUE1.Но если у меня много очередей, и я не хочу менять код при появлении новой очереди "QUEUE4".
Можно ли получить ресурс динамически или какие-либо предложения для него?
@Stateless
public class OrderBean implements Order {
@Resource(name = "A.QCF", mappedName = "A.QCF")
private ConnectionFactory connectionFactory;
@Resource(name = "QUEUE1")
private Queue QUEUE1;
@Resource(name = "QUEUE2")
private Queue QUEUE2;
@Resource(name = "QUEUE3")
private Queue QUEUE3;
public String sendData(String abc) {
// ...
}
}
Обновление:
Спасибо за Гонсало и bkail, мое решение следующее:
Код EJB: "QueueName" - это параметр от клиента.
InitialContext initialContext = new InitialContext();
Queue dynamicQueue = (Queue)initialContext.lookup("java:comp/env/" + QueueName);
ejb-jar.xml:
<enterprise-beans>
<session>
<<resource-env-ref>>
<resource-env-ref-name>Queue1</resource-env-ref-name>
<resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>
</<resource-env-ref>>
<<resource-env-ref>>
<resource-env-ref-name>Queue2</resource-env-ref-name>
<resource-env-ref-type>javax.jms.Queue</resource-env-ref-type>
</<resource-env-ref>>
</session>
</enterprise-beans>
Когда у меня появится новая очередь, мне просто нужно изменить ejb-jar.xml и перезапустить сервер.