Использование ActiveMQ через JNDI - PullRequest
7 голосов
/ 17 января 2009

Я пытаюсь создать просто соединение с ActiveMQ, используя JNDI. <Ч /> У меня

  1. Очередь с именем 'example.A'.

  2. Согласно документации ActiveMQ, касающейся JNDI , если я хочу использовать ConectionFactories и Queues (Topics) через JNDI, я должен поместить файл jndi.properties в мой путь к классам. Как я понял, путь к классу activeMQ по умолчанию является каталогом% activemq% / conf. Я не изменил это. Итак, у меня есть это свойство для моей очереди:

    queue.MyQueue = пример. A

  3. Я создал клиентский класс Java для ActiveMQ, который использует JNDI, как показано ниже:

        Properties jndiParameters = new Properties() ;
        jndiParameters.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
        jndiParameters.put(Context.PROVIDER_URL, "tcp://localhost:61616");
        Context context = new InitialContext(jndiParameters);
        ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("ConnectionFactory");
        Queue queue = (Queue) context.lookup("MyQueue");
    

но он не может найти мою очередь, он выдает исключение: javax.naming.NameNotFoundException: MyQueue

Где мои ошибки?

Ответы [ 2 ]

6 голосов
/ 18 января 2009

Проблема в том, что вы явно создаете свойства и передаете их в конструктор InitialContext. Это означает, что jndi.properties в пути к классам не будут прочитаны.

Ваш код должен выглядеть примерно так:

Context context = new InitialContext();
ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("ConnectionFactory");
Queue queue = (Queue) context.lookup("MyQueue");
1 голос
/ 18 ноября 2011

Вы можете установить статические свойства, а также извлечь их из файла следующим образом:

    InputStream is = getClass().getResourceAsStream("/my.jndi.properties");
    Properties jndiParameters = new Properties();
    jndiParameters.load(is);
    jndiParameters.put(Context.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
    jndiParameters.put(Context.PROVIDER_URL, "tcp://localhost:61616");
    Context ctx =  new InitialContext(jndiParameters);
...

Это работает до тех пор, пока вы устанавливаете статический реквизит после загрузки ресурса. Полезно, если вы загружаете URL-адрес провайдера, например, из другого места.

...