Configuration 动态加载队列
我正在实现一个无状态会话Bean,它将消息发送到不同的消息队列。目前有两个不同的队列,但数量可能会增加 目前,队列是硬编码的:Configuration 动态加载队列,configuration,jms,jboss7.x,message-queue,Configuration,Jms,Jboss7.x,Message Queue,我正在实现一个无状态会话Bean,它将消息发送到不同的消息队列。目前有两个不同的队列,但数量可能会增加 目前,队列是硬编码的: @Stateless public class SendNotificationBean implements SendNotification { private static final Logger logger = LoggerFactory.getLogger(SendNotificationBean.class); @Resource(look
@Stateless
public class SendNotificationBean implements SendNotification {
private static final Logger logger = LoggerFactory.getLogger(SendNotificationBean.class);
@Resource(lookup = "java:jboss/MQ.CONNECTIONFACTORY.JMS.A")
private ConnectionFactory connectionFactoryA;
@Resource(lookup = "java:jboss/MQ.CONNECTIONFACTORY.JMS.B")
private ConnectionFactory connectionFactoryB;
@Resource(lookup = "java:jboss/MQ.A")
private Queue queueA;
@Resource(lookup = "java:jboss/MQ.B")
private Queue queueB;
private Connection connectionA;
private Connection connectionB;
private MessageProducer producerA;
private MessageProducer producerB;
private Session sessionA;
private Session sessionB;
//...
}
是否可以动态加载队列?比如:
Queue queue = getQueueDependingOfConfiguration(QueueType.A);
我认为这是可能的,但它也有意义吗?我该考虑什么呢?然后我是否必须将ConnectionFactory和/或会话存储在映射中
谢谢
Mike您始终可以使用良好的旧JNDI InitialContext查找:
public Queue getQueueByName(String name) {
Context ctx = new InitialContext();
return ctx.lookup("java:jboss/MQ." + name);
}
对于QueueConnectionFactory也可以这样做。
然而,这种方法有其自身的缺点,因为处理JNDI对象的正确方法是将其添加到组件JNDI环境(java:comp/env-stuff)中
不建议在映射中存储QueueConnectionFactory或Queue实例-如果在需要时获得对这些对象的引用,这是安全的