Configuration 动态加载队列

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

我正在实现一个无状态会话Bean,它将消息发送到不同的消息队列。目前有两个不同的队列,但数量可能会增加

目前,队列是硬编码的:

@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实例-如果在需要时获得对这些对象的引用,这是安全的