我正在使用MQ7并尝试使用JMS api访问队列。得到这个错误。 有没有人见过它?我该如何解决这个问题? TIA
线程“main”中的异常com.ibm.msg.client.jms.DetailedJMSException: JMSFMQ6312:Java(tm)MQI中发生异常。 Java(tm)MQI抛出了描述问题的异常。有关详细信息,请参阅链接的异常。
引起:com.ibm.mq.jmqi.JmqiException:CC = 2; RC = 2495; AMQ8568:找不到本机JNI库'mqjbnd'。 [3 = mqjbnd]
引起:java.lang.UnsatisfiedLinkError:java.library.path中没有mqjbnd
答案 0 :(得分:6)
可能有点迟了但我遇到了同样的问题,发现如果在连接到远程队列时使用不同的连接模式,可以避免这种情况。默认情况下,MQConnectionFactory
使用WMQ_CM_BINDINGS
作为其连接模式。如果您将其更改为WMQ_CM_CLIENT
(或您喜欢的任何不需要本机库的连接模式),您应该没问题。
@Test
public void testMQConnectionMode() throws JMSException {
MQConnectionFactory cf = new MQConnectionFactory();
assertThat(cf.getIntProperty(CommonConstants.WMQ_CONNECTION_MODE), is(equalTo(CommonConstants.WMQ_CM_BINDINGS)));
cf.setIntProperty(CommonConstants.WMQ_CONNECTION_MODE, CommonConstants.WMQ_CM_CLIENT);
assertThat(cf.getIntProperty(CommonConstants.WMQ_CONNECTION_MODE), is(equalTo(CommonConstants.WMQ_CM_CLIENT)));
}
答案 1 :(得分:4)
这几乎总是由不完整的客户端安装和/或CLASSPATH问题的组合引起的。许多人抓住jar文件而不是执行完整安装,并不一定能获得所有这些文件。除了确保存在所有必需的二进制文件之外,使用安装介质还提供了一些其他功能,例如诊断和跟踪。它还确保可以应用维护。 WMQ客户端安装媒体可以SupportPac MQC7免费下载。 CLASSPATH设置应如WebSphere MQ Using Java手册中所述。
如果客户端安装是从IBM介质执行的,并且环境是按照文档设置的,那么几乎所有情况都会修复,例如您在此处报告的情况。有一些安装验证测试应用程序(其中一些诊断程序安装了我提到的完整介质)which are described here,可以帮助确定安装或代码是否存在问题。
答案 2 :(得分:3)
同意Johnam,它发生的原因是ConnectionFactory默认设置为服务器,需要设置为客户端,你说它可以在同一台机器上运行。因为我也遇到了同样的情况,它在同一台机器上运行,在这种情况下因为你的机器是WMQ服务器所以做程序,但是当你在不同的机器上运行时,你的程序必须设置为客户端。
我使用ConnectionFactory上的set some参数修复它:
<bean id="mqConnectionFactory" class="com.ibm.mq.jms.MQConnectionFactory">
....
<property name="transportType" value="1" />
<property name="clientReconnectTimeout" value="2" />
<property name="clientReconnectOptions" value="0" />
</bean>
答案 3 :(得分:1)
VM参数-Djava.library.path=/opt/mqm/java/lib64
适合我。我的环境是安装了MQ的64位Suse,我的程序正在使用&#39; Bindings&#39;运输类型
答案 4 :(得分:0)
问题在于系统属性上的Path变量。尝试通过在MQInstallation Dir之前指定MQInstallation Dir:\ Lib64路径来运行代码:\ Lib
答案 5 :(得分:0)
将以下内容添加到您的tomcat参数:
-Djava.library.path="C:\Program Files (x86)\IBM\WebSphere MQ\java\lib64"
如果安装目录与上述不同,请使用适当的位置。