我知道如何进行资源注入来获得EJB中的JMS队列,就像下面的示例一样,很容易获得QUEUE1。但是如果我有很多队列,并且当有一个新队列“QUEUE4”时我不想更改代码。EJB3中的动态资源注入?
是否有可能动态获取资源或对此有任何建议?
@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和重新启动服务器。
依赖注入本身是动态的。 “动态资源注入”是什么意思?你想让容器现在可以确定你想要的依赖吗? –
队列名称“QUEUE1”,“QUEUE2”,“QUEUE3”...是EJB中的硬编码。我想让它成为一个来自参数的可配置值,或者从INI中读取它。可能吗? – Dennys