【问题标题】:ClassCastException: javax.naming.Reference cannot be cast to javax.jms.ConnectionFactory when configuring IBM MQ as Flume JMS SourceClassCastException:将 IBM MQ 配置为 Flume JMS 源时,无法将 javax.naming.Reference 强制转换为 javax.jms.ConnectionFactory
【发布时间】:2019-03-20 14:13:31
【问题描述】:

我正在尝试配置 Flume(来自 Cloudera CDH-5.11.0 的 1.6)代理以使用 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) PORT(1414) CHANNEL(myChannelName) TRANSPORT(CLIENT)
  3. 提取了 java 客户端(它既可以作为来自 Windows 客户端的 jar 组,也可以作为来自 IBM Support Portal 的单个 uberjar)。我尝试了两种路径,但是,现在我提取了这些单个 jar:
    • 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. 在我的 Flume 主机上加载了 jars 和 .bindings 文件
  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) 在 java.lang.Thread.run(Thread.java:745)

查看Flume源码,爆炸线如下

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

我试图关注这个旧的相关问题

但是,由于从 IBM mq v8 升级到 jms2.0,一些建议加载的 jar 不再存在:

我开始怀疑 Flume 1.6 中有些东西不喜欢 JMS2.0

有什么帮助吗?谢谢

【问题讨论】:

    标签: java jms ibm-mq flume-ng


    【解决方案1】:

    我不是专家,但是:

    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
    

    【讨论】:

    • 您好罗杰,感谢您的提示。我将在连接工厂定义中尝试使用 QCF 而不是 CF。根据另一个建议,我必须在问题中添加更多细节,因为我用来生成绑定文件的客户端位于 Windows PC 上,但 Flume 代理位于 CentOS 服务器上。再次感谢!
    猜你喜欢
    • 2017-04-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-07-23
    • 2021-10-25
    • 1970-01-01
    相关资源
    最近更新 更多