问题描述:
我已经在版本9.0中安装了MQ Server和MQ Client。我已经定义了队列管理器和队列和主题。我正在使用Java 7.我开发了一个独立的Java客户端,以 BINDING模式连接到队列管理器。 Java应用程序和MQ托管在同一台服务器上,因此BINDING连接具有必要的先决条件。
然而,当我尝试运行我的应用程序时,我收到一个错误:
Exception in thread "main" java.lang.UnsatisfiedLinkError: mqjbnd05 (Not found in java.library.path)
at java.lang.ClassLoader.loadLibraryWithPath(ClassLoader.java:1279)
at java.lang.ClassLoader.loadLibraryWithClassLoader(ClassLoader.java:1245)
at java.lang.System.loadLibrary(System.java:540)
at com.ibm.mq.MQSESSION.loadLib(MQSESSION.java:872).....
搜索了与此相关的一些主题,但未找到任何明确的解决方案。我正在粘贴下面的java代码:
/**
*
*/
package com.binding;
import javax.jms.JMSException;
import javax.jms.Session;
import com.ibm.jms.JMSMessage;
import com.ibm.jms.JMSTextMessage;
import com.ibm.mq.jms.JMSC;
import com.ibm.mq.jms.MQQueue;
import com.ibm.mq.jms.MQQueueConnection;
import com.ibm.mq.jms.MQQueueConnectionFactory;
import com.ibm.mq.jms.MQQueueReceiver;
import com.ibm.mq.jms.MQQueueSender;
import com.ibm.mq.jms.MQQueueSession;
/**
* @author Som
*
*/
public class MQBindingConnection {
/**
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
try {
MQQueueConnectionFactory cf = new MQQueueConnectionFactory();
// Config
//cf.setHostName("localhost");
//cf.setPort(1414);
cf.setTransportType(JMSC.MQJMS_TP_BINDINGS_MQ);
cf.setQueueManager("QM.E001");
//cf.setChannel("SYSTEM.DEF.SVRCONN");
MQQueueConnection connection = (MQQueueConnection) cf.createQueueConnection("user","pass");
MQQueueSession session = (MQQueueSession) connection.createQueueSession(false, Session.AUTO_ACKNOWLEDGE);
MQQueue queue = (MQQueue) session.createQueue("BINDING.CONN");
MQQueueSender sender = (MQQueueSender) session.createSender(queue);
MQQueueReceiver receiver = (MQQueueReceiver) session.createReceiver(queue);
long uniqueNumber = System.currentTimeMillis() % 1000;
JMSTextMessage message = (JMSTextMessage) session.createTextMessage("SimplePTP "+ uniqueNumber);
// Start the connection
connection.start();
sender.send(message);
System.out.println("Sent message:\\n" + message);
JMSMessage receivedMessage = (JMSMessage) receiver.receive(10000);
System.out.println("\\nReceived message:\\n" + receivedMessage);
sender.close();
receiver.close();
session.close();
connection.close();
System.out.println("\\nSUCCESS\\n");
}
catch (JMSException jmsex) {
System.out.println(jmsex);
System.out.println("\\nFAILURE\\n");
}
catch (Exception ex) {
System.out.println(ex);
System.out.println("\\nFAILURE\\n");
}
}
}
我在目录位置找不到文件“mqjbnd05”: C:\ Program Files \ IBM \ MQ \ java \ lib 同样在lib64路径中我已经检查但是文件丢失了。 C:\ Program Files \ IBM \ MQ \ java \ lib64
我已将我的CLASSPATH变量设置为指向正确的MQ lib目录。
我已尝试将lib目录位置更改为服务器和客户端,但是,“mqjbnd05”文件在任何地方都丢失,因此遇到预期的同样错误。
使用已注释掉部分的相同代码正好适用于客户端模式。请告诉我在 BINDING模式中连接时我错过了什么。
我正在使用以下ENV变量:
MQ_JAVA_LIB_PATH = C:\Program Files\IBM\MQ\java\lib64;C:\Program Files\IBM\MQ\java\lib
MQ_FILE_PATH = C:\Program Files\IBM\MQ
MQ_JAVA_DATA_PATH = C:\ProgramData\IBM\MQ
MQ_JAVA_INSTALL_PATH = C:\Program Files\IBM\MQ\java
MQ_JRE_PATH = C:\Program Files\IBM\MQ\java\jre
LIB = C:\Program Files\IBM\MQ\tools\lib64;C:\IBM\SQLLIB\LIB;C:\Program Files\IBM\MQ\tools\lib
CLASSPATH = C:\Program Files\IBM\MQ\java\lib\com.ibm.mqjms.jar;C:\Program Files\IBM\MQ\java\lib\com.ibm.mq.jar;C:\Program Files\IBM\MQ\java\lib;C:\Program Files\IBM\MQ\java\lib64;
要添加的一件事是:我有 mqjbnd.dll 文件,但没有 mqjbnd05
答案 0 :(得分:3)
mqjbnd05已从MQ v7中的MQ产品中删除,而是更喜欢使用具有跨后续版本的接口的通用mqjbnd。但是,这意味着如果您正在运行Java应用程序并获取MQ v6或更早版本的jar文件,但是使用MQv6之后的MQ产品安装,则会收到您报告的错误。我在MQv9代码库中找不到mqjbnd05的引用。
鉴于你在评论中说你有mqjbnd.dll和MQServer + MQClient v9,那么我想到的唯一方法是从类路径中获取前MQv7中的jar,或者你有构建你的应用程序,并在你的应用程序中包含MQ jars themsevles。
根据您运行应用程序的方式,您可以尝试在java启动中添加-verbose选项,以查看MQ jar的来源。