Как добавить назначения JNDI (темы и очереди) с помощью ActiveMQ? - PullRequest
0 голосов
/ 18 июня 2020

Я не хочу использовать файл jdni.properties, поэтому, чтобы добавить новые свойства в мои настройки JNDI, я написал следующее:

    Hashtable<String, Object> jndi_env = new Hashtable<String, Object>();
    jndi_env.put(InitialContext.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.jndi.ActiveMQInitialContextFactory");
    jndi_env.put("connectionFactory.ConnectionFactory","vm://0");
    jndi_env.put("topic.example","example");

Моя проблема, когда я вызываю этот класс:

initialContext = new InitialContext(jndi_env);

Поскольку я передаю параметр имени в последней строке, ищется фабрика контекста URL.

Это заставляет мой код искать tcp://localhost:61616 соединение, которое мне на самом деле не нужно.

Я вижу, что есть

QueueConnectionFactory: org.apache.activemq.ActiveMQConnectionFactory
example: org.apache.activemq.command.ActiveMQTopic
XAConnectionFactory: org.apache.activemq.ActiveMQXAConnectionFactory

, которых у меня нет хотите или, по крайней мере, не того типа, который они есть.

Если я проверю без передачи аргумента, используя свой jndi.properties файл, где у меня нет проблемы с установкой TCP-соединения, то я обнаружу только:

ConnectionFactory: org.apache.activemq.artemis.jms.client.ActiveMQJMSConnectionFactory
queue: org.apache.activemq.artemis.jndi.ReadOnlyContext
queue/exampleQueue: org.apache.activemq.artemis.jms.client.ActiveMQQueue
dynamicTopics: org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory$2
dynamicQueues: org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory$1

Итак, как я могу изменить типы объектов моего добавленного jndi_env.put("topic.example","example");, чтобы он был таким (но, конечно, для тем)

queue: org.apache.activemq.artemis.jndi.ReadOnlyContext
queue/exampleQueue: org.apache.activemq.artemis.jms.client.ActiveMQQueue

1 Ответ

1 голос
/ 18 июня 2020

Когда вы создаете свой InitialContext, вы переходите не на ту фабрику. Сейчас вы проезжаете org.apache.activemq.jndi.ActiveMQInitialContextFactory. Это заводская установка для ActiveMQ 5.x, а не для Artemis. Вместо этого вам нужно передать org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory, например:

Hashtable<String, Object> jndi_env = new Hashtable<String, Object>();
jndi_env.put(InitialContext.INITIAL_CONTEXT_FACTORY, "org.apache.activemq.artemis.jndi.ActiveMQInitialContextFactory");
jndi_env.put("connectionFactory.ConnectionFactory","vm://0");
jndi_env.put("topic.example","example");
...