Я использую верблюд Apache, чтобы переместить Weblogic JMS в Kafka. Для weblogic JMS я подключаюсь к теме, используя JDNI, чтобы получить название темы. Когда я осмотреть объект, возвращаемый из моего поиска на моем контексте я вижу, что у меня есть название темыНастройка Apache Camel Название темы
Я настраиваю соединение, как так (это лишь доказательство концепции)
(defn topic-con-factory
[]
(let [props (Properties.)]
(.put props "java.naming.factory.initial" "weblogic.jndi.WLInitialContextFactory")
(.put props "java.naming.provider.url" (:host wl-ctx))
(.put props "java.naming.security.principal" (:username wl-ctx))
(.put props "java.naming.security.credentials" (:password wl-ctx))
(.put props "weblogic.jndi.createIntermediateContexts" "true")
;;please ignore my horrible horrible abuse of let here
(let [ctx (InitialContext. props)
conn-factory (.lookup ctx (:factoryJNDI wl-ctx))
wlcontext (DefaultCamelContext. ctx)
topic (.lookup ctx (:topicJNDI wl-ctx))
]
[conn-factory topic])))
(defn build-jms-component
[factory]
(let [jms (JmsComponent.)]
(.setConnectionFactory jms factory)
(.setClientId jms (:clientId wl-ctx))
(.setDurableSubscriptionName jms (:subName wl-ctx))
jms))
(defn camel-context []
(let [[factory topic] (topic-con-factory)
ctx (camel/make-context)]
(println "topic " topic "!!!!!!!!")
(.addComponent ctx "jms" (build-jms-component factory))
(camel/defroute ctx
:err-handler (camel/default-error-handler)
(camel/from (str "jms:topic:" (.getTopicName topic)))
(camel/to kafka-urn))
ctx))
Где Связывание wl-ctx - это хэш-карта моих различных значений. Когда я пытаюсь запустить верблюжьей контекст я получаю ошибку
1 февраля 2017 6:11:09 PM org.apache.camel.component.jms.DefaultJmsMessageListenerContainer handleListenerSetupFailure ВНИМАНИЕ: Настройка JMS сообщения слушателя invoker не удалось для пункта назначения «CENX-WL-JMS! testTopic» - попытка восстановить . Объяснение: [JMSExceptions: 045101] Имя адресата, переданное в , недействительно. CreateTopic или createQueue "MY-WL-SERVER! TestTopic". Если имя адресата не содержит символ «/», то оно должно быть имя распределенного адресата, доступное в кластере , к которому подключен клиент. Если он содержит символ «/», , то строка перед «/» должна быть именем JMS-сервера или «.». Строка после «/» - это имя желаемого адресата . Если используется «./» версия строки, то возвращается адресат с заданным именем на локальном экземпляре WebLogic Server .
Из сообщения, похоже, мне нужно использовать «/» для разделителя между именем сервера и именем темы. Но если я использую его вместо взрыва, поиск темы не удастся.
Есть ли способ перенастроить мой JMSComponent для принятия! как разделитель вместо /?