我正在尝试使用JMS访问MQ队列。我得到以下
java.lang.UnsatisfiedLinkError: no mqjbnd05 in java.library.path
我正在通过
-Djava.library.path="C:\Program Files\IBM\WebSphere MQ\java\lib"
在eclipse中运行程序时作为VM参数。这个问题在网上讨论得很多,但没有任何结论。有人解决了吗? TIA。
答案 0 :(得分:18)
因为我必须自己处理这个错误;我花了很多时间才找到合适的答案,我想与下一个分享它的人分享一下......
实际上问题的解决方案非常简单(至少在我的情况下)。它与任何CLASSPATH
,java.library.path
或安装问题无关。
我忘了将MQConnectionFactory
切换到客户端模式。
必须通过简单地调用
来完成cf.setTransportType(WMQConstants.WMQ_CM_CLIENT);
或
cf.setTransportType(WMQConstants.WMQ_CM_BINDINGS_THEN_CLIENT);
或任何其他符合您需求的连接类型
默认情况下,ConnectionFactory处于“绑定”模式(WMQ_CM_BINDINGS
),该模式用于本地服务器安装,如IBM文档中所述:
要以绑定模式连接到队列管理器,JMS应用程序的WebSphere MQ类必须在运行队列管理器的同一系统上运行。
使用JNDI或XMSC_WMQ_CONNECTION_MODE
时,此传输类型与WMQConstants.WMQ_CONNECTION_MODE
(JmsFactoryFactory
)属性相同。
同样适用于其他ConnectionFactory类型:MQQueueConnectionFactory
,MQTopicConnectionFactory
,MQXAConnectionFactory
,MQXAQueueConnectionFactory
和MQXATopicConnectionFactory
查看IMB知识中心,了解有关不同连接/绑定选项的更多信息:
https://www.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.dev.doc/q031720_.htm https://www.ibm.com/support/knowledgecenter/SSFKSJ_7.5.0/com.ibm.mq.dev.doc/q030560_.htm
答案 1 :(得分:5)
您可能在CLASSPATH,lib或EAR中都有一些较旧的MQ jar文件
删除它们你应该没事。
您不应将MQ文件放在EAR或WEB-INF / lib文件夹中。它们应该位于appserver的类路径中。
答案 2 :(得分:3)
我在使用IBM MQ api进行连接时遇到了这个问题。 我没有发现这个问题与classpath有关。
当我在设置MQQueueManager
的{{1}}和MQEnvironment
之前实例化hostname
时发生这种情况。
只需确保您的代码不这样做,并确保在设置环境后实例化管理器。像...这样的东西。
channel
(观察到在MQEnvironment.hostname = "mq hostname";
MQEnvironment.channel = "mq channel";
..more code..
this._queueManager = new MQQueueManager(qManager);
初始化后设置MQEnvironment.port
是可以的,但可能会初始化与MQQueueManager
相关的所有内容。
答案 3 :(得分:0)
这是一个简单的食谱:Tell the Java VM to Load the DLL。您的代码是否类似,例如您使用System.loadLibrary
加载mqjbnd05.dll
?
如果是 - 它是否在eclipse之外工作,比如从命令行启动应用程序?如果是这种情况,您可以尝试使用该库路径启动整个eclipse IDE。
有时我们会遇到包含空格的路径名。将dll复制到C:\
,将其放在lib路径上,然后重试。
啊,这就是问题,缺少指定的dll。 This blog has a solution。祝你好运!
答案 4 :(得分:0)
如果实际安装了MQ 客户端而不是MQ 服务器,就会发生这种情况。
IBM甚至写了一篇关于它的whole help page:
WebSphere MQ Client installation missing mqjb*.dll files
问题(摘要)
您安装WebSphere MQ Client并注意
\Program Files\IBM\WebSphere MQ\Java\lib\
目录中缺少三个dll。症状
以下dll出现在服务器安装目录中,但不是Java™客户端的一部分:
- 03/17/2003 10:59a 19,456 mqjbdf02.dll
- 03/17/2003 10:59a 58,856 mqjbnd05.dll
- 03/17/2003 10:59a 36,864 MQXAi02.dll
子目录\ jdbc \出现在服务器上,但不出现在客户端计算机上。
- 03/17/2003 10:59a 61,440 jdbcdb2.dll
- 03/17/2003 10:59a 61,440 jdbcora.dll
原因
文件丢失,因为在客户端安装中不提供或不需要它们。
解决问题
这些文件仅包含在WebSphere MQ Server产品中。
答案 5 :(得分:0)
就我而言,当我设置传输类型时,错误消失了。我正在使用 MQConnectionFactory
mQQueueConnectionFactory.setTransportType( JMSC.MQJMS_TP_CLIENT_MQ_TCPIP);