ClassCastException: javax.naming.Reference нельзя привести к javax.jms.ConnectionFactory при настройке IBM MQ в качестве источника JMS Flume. - PullRequest
0 голосов
/ 20 марта 2019

Я пытаюсь настроить агент Flume (1.6 из Cloudera CDH-5.11.0) для использования IBM WebSphere MQ 9.1.1.0 в качестве источника.

Поскольку официальной документации нет, я следил за этими ресурсами (несмотря на то, что они вышли из более старых версий):

Я поступил так:

  1. Установил клиент MQ 9.1.1.0 и настроил JMSAdmin.conf

    • INITIAL_CONTEXT_FACTORY=com.sun.jndi.fscontext.RefFSContextFactory PROVIDER_URL=file:/C:/temp/jmsbindings SECURITY_AUTHENTICATION=none
  2. Создан файл .bindings:

    • DEF CF (flumeConnectionFactory) QMGR (myQueueManager) Порт HOSTNAME (myHostName) (1414) КАНАЛ (myChannelName) ТРАНСПОРТ (КЛИЕНТ)
  3. Извлечен java-клиент (он доступен как группы jar-файлов из Windows-клиента или как один uberjar из IBM Support Portal). Я пробовал оба пути, однако, прямо сейчас я извлек эти единственные банки:
    • com.ibm.mq.jar
    • com.ibm.mq.headers.jar
    • com.ibm.mq.jmqi.jar
    • com.ibm.mq.pcf.jar
    • com.ibm.mq.mqjms.jar
    • fcontext.jar
    • jms.jar
    • providerutil.jar
  4. Загруженные файлы jar и .bindings на моем хосте flume
  5. Подготовил эту исходную конфигурацию:

test_IBM_MQ.sources.amq_ibm.type = jms test_IBM_MQ.sources.amq_ibm.initialContextFactory = com.sun.jndi.fscontext.RefFSContextFactory test_IBM_MQ.sources.amq_ibm.connectionFactory = flumeConnectionFactory test_IBM_MQ.sources.amq_ibm.providerURL = file: /// etc / flume / conf test_IBM_MQ.sources.amq_ibm.destinationName = myDestination test_IBM_MQ.sources.amq_ibm.destinationType = QUEUE

Когда я наконец запускаю агент Flume, я получаю эту ошибку:

java.lang.ClassCastException: javax.naming.Reference не может быть приведен к javax.jms.ConnectionFactory

Вслед за этой маленькой Stacktrace

Источник amq_ibm был удален из-за ошибки во время настройки java.lang.ClassCastException: javax.naming.Reference не может быть приведен к javax.jms.ConnectionFactory в org.apache.flume.source.jms.JMSSource.doConfigure (JMSSource.java:231) в org.apache.flume.source.BasicSourceSemantics.configure (BasicSourceSemantics.java:65) в org.apache.flume.source.AbstractPollableSource.configure (AbstractPollableSource.java:65) в org.apache.flume.conf.Configurables.configure (Configurables.java:41) в org.apache.flume.node.AbstractConfigurationProvider.loadSources (AbstractConfigurationProvider.java:326) в org.apache.flume.node.AbstractConfigurationProvider.getConfiguration (AbstractConfigurationProvider.java:101) в org.apache.flume.node.PollingPropertiesFileConfigurationProvider $ FileWatcherRunnable.run (PollingPropertiesFileConfigurationProvider.java:141) в java.util.concurrent.Executors $ RunnableAdapter.call (Executors.java:511) в java.util.concurrent.FutureTask.runAndReset (FutureTask.java:308) в java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.access $ 301 (ScheduledThreadPoolExecutor.java:180) в java.util.concurrent.ScheduledThreadPoolExecutor $ ScheduledFutureTask.run (ScheduledThreadPoolExecutor.java:294) в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1142) в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java:617) at java.lang.Thread.run (Thread.java:745)

При осмотре источника Flume, линия взрыва выглядит следующим образом

connectionFactory = (ConnectionFactory) initialContext.lookup(connectionFactoryName);

Я пытался ответить на этот старый связанный вопрос

Однако некоторые из предложенных для загрузки jar-файлов больше не существуют, поскольку обновление до jms2.0 с IBM mq v8:

Я начинаю подозревать, что есть что-то, что Flume 1.6 не любит JMS2.0

Любая помощь?Спасибо

1 Ответ

0 голосов
/ 20 марта 2019

Я не эксперт, но:

test_IBM_MQ.sources.amq_ibm.connectionFactory=flumeConnectionFactory 

Я полагаю, что параметр ожидает QueueConnectionFactory (QCF).

Удалите "CF" и добавьте QCF к вашему MQ JDNI:

DEF QCF(flumeConnectionFactory) QMGR(myQueueManager) HOSTNAME(myHostName) PORT(1414) CHANNEL(myChannelName) TRANSPORT(CLIENT)

Кроме того, это место, где находится файл MQ JNDI (".bindings")?

test_IBM_MQ.sources.amq_ibm.providerURL = file:///etc/flume/conf 

Основываясь на вышеупомянутом параметре "PROVIDER_URL", я думаю, это должно быть:

test_IBM_MQ.sources.amq_ibm.providerURL = file:/C:/temp/jmsbindings
...