java.lang.UnsatisfiedLinkError中
我正在尝试使用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。
您可能在CLASSPATH,lib或EAR中都有一些较旧的MQ jar文件。
删除它们你应该没事。
您不应将MQ文件放在EAR或WEB-INF / lib文件夹中。 它们应该位于appserver的类路径中。
因为我不得不自己处理这个错误; 我花了很多时间才找到正确的答案,我想与下一个分享它的人,他来到这个线程……
实际上问题的解决方案非常简单(至少在我的情况下)。 它与任何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或JmsFactoryFactory
时,此传输类型与XMSC_WMQ_CONNECTION_MODE
( WMQConstants.WMQ_CONNECTION_MODE
)属性JmsFactoryFactory
。
这同样适用于其他ConnectionFactory类型: MQQueueConnectionFactory
, MQXAConnectionFactory
, MQXAQueueConnectionFactory
, 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
我在使用IBM MQ api进行连接时遇到了这个问题。 我没有发现这个问题与classpath有关。
当我在设置MQEnvironment
的hostname
和channel
之前实例化MQQueueManager
时,这发生在我身上。 只需确保您的代码不这样做,并确保在设置环境后实例化管理器。 就像是..
MQEnvironment.hostname = "mq hostname"; MQEnvironment.channel = "mq channel"; ..more code.. this._queueManager = new MQQueueManager(qManager);
(观察到在MQQueueManager
初始化之后设置MQEnvironment.port
是可以的,但是可能会一起初始化与MQEnvironment
相关的所有内容)
这是一个简单的方法: 告诉Java VM加载DLL 。 您的代码是否类似,例如,您是否使用System.loadLibrary
加载mqjbnd05.dll
?
如果是 – 它是否在eclipse之外工作,比如从命令行启动应用程序? 如果是这种情况,您可以尝试使用该库路径启动整个eclipse IDE。
有时我们会遇到包含空格的路径名。 将dll复制到C:\
,将其放在lib路径上,然后重试。
啊,这就是问题,缺少指定的dll。 这个博客有一个解决方案 。 祝你好运!
如果您实际安装了MQ Client而不是MQ Server,则会发生这种情况。
IBM甚至编写了一个关于它的完整帮助页面 :
WebSphere MQ Client安装缺少mqjb * .dll文件
问题(摘要)
您安装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产品中。