java.lang.UnsatisfiedLinkError中

时间:2010-07-20 11:12:29

标签: java jms ibm-mq

我正在尝试使用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。

6 个答案:

答案 0 :(得分:18)

因为我必须自己处理这个错误;我花了很多时间才找到合适的答案,我想与下一个分享它的人分享一下......

实际上问题的解决方案非常简单(至少在我的情况下)。它与任何CLASSPATHjava.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_MODEJmsFactoryFactory)属性相同。

同样适用于其他ConnectionFactory类型:MQQueueConnectionFactoryMQTopicConnectionFactoryMQXAConnectionFactoryMQXAQueueConnectionFactoryMQXATopicConnectionFactory

查看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);