我是MQ的新手,我有一个要求,在这里我必须从1个系统向另一个系统发送mq消息。消息队列和队列管理器是在服务器上设置的,我只有qname和mqmanager名称,我编写了以下代码来创建到mq的连接,但是我得到了这个异常:UnsatisfiedLinkError: mqjbnd (不在java.library.path中)
守则是:
package com.demo.mqsamplimport com.ibm.mq.MQC;
import com.ibm.mq.MQEnvironment;
import com.ibm.mq.MQException;
import com.ibm.mq.MQGetMessageOptions;
import com.ibm.mq.MQMessage;
import com.ibm.mq.MQPutMessageOptions;
import com.ibm.mq.MQQueue;
import com.ibm.mq.MQQueueManager;
import com.ibm.mq.constants.MQConstants;
public class MQSample {
private static final String qManager = "(MyQueueManagerName)";
private static final String qName = "(MyQueueName)";
public static void putGet(String args[]) {
try {
MQQueueManager qMgr = new MQQueueManager(qManager);
int openOptions = MQConstants.MQOO_OUTPUT;
MQQueue queue = qMgr.accessQueue(qName, openOptions);
MQMessage msg = new MQMessage();
msg.writeString("Hello World!");
MQPutMessageOptions pmo = new MQPutMessageOptions();
queue.put(msg, pmo);
}
catch (MQException ex) {
ex.printstacktrace();
}
catch (java.io.IOException ex) {
ex.printstacktrace(););
}
}
}有人能帮我一下吗。
发布于 2017-04-12 22:18:12
当您尝试将绑定模式连接到托管在同一台服务器上的IBM队列管理器时,通常会导致UnsatisfiedLinkError: mqjbnd (Not found in java.library.path)错误,而且IBM类用于Java无法找到库mqjbnd。如果您没有为用于Java连接的IBM类指定主机名和通道名,则它们默认为绑定模式连接。
如果您的应用程序运行在与IBM队列管理器相同的服务器上,则需要告诉客户端如何使用以下方法之一查找mqjbnd库(在Linux上为/opt/mqm/java/lib):
export LIBPATH=/path/to/library上。-Djava.library.path=/path/to/librarySystem.setProperty("java.library.path", "/path/to/library");如果您试图连接到托管在远程服务器上的IBM队列管理器,我同意@ need 7790438,您需要向MQ提供有关如何连接到远程队列管理器的详细信息。MQEnvironment是全局的,而不是线程安全的。您应该使用哈希表来传递这些值,例如:
import java.util.Hashtable;
private static String host = "dns.name";
private static int port = 1414;
private static String channel = "MQ.SVRCONN.CHL";
Hashtable properties = new Hashtable<String, Object>();
properties.put("hostname", host);
properties.put("port", port);
properties.put("channel", channel);
MQQueueManager qMgr = new MQQueueManager(qManager, properties);您没有提到队列管理器是哪个版本的IBM,也没有提到您所引用的Java文件的IBM类的版本。其他细节可以通过哈希表传递,例如,如果您使用IBM v8或更高版本的v8类,并连接到IBM v8或更高版本的队列管理器,您可能需要传递一个UserID和密码,这将通过向has表添加以下内容来实现:
private static String user = "UserID";
private static String password = "Password";
properties.put(MQConstants.USE_MQCSP_AUTHENTICATION_PROPERTY, true);
properties.put(MQConstants.USER_ID_PROPERTY, user);
properties.put(MQConstants.PASSWORD_PROPERTY, password);请注意,根据IBMv9.0知识中心页面"不推荐、稳定和删除的功能",IBM类在v8.0时已经稳定下来。这意味着将不再进行进一步的增强,最终IBM将不再推荐IBM类用于Java。您可能希望使用IBM类编写应用程序,因为JMS没有任何支持限制。
IBM类的稳定用于 IBM将不再对用于Java的IBM类进行进一步的增强,它们在功能上稳定在IBM版本8.0中提供的级别。使用IBM类for Java的现有应用程序将继续得到完全支持,但是这个API是稳定的,因此不会添加新特性,并且拒绝增强请求。完全支持意味着缺陷将与IBM系统需求更改所需的任何更改一起修复。
发布于 2017-04-12 18:16:19
在设置MQEnvironment的主机名和通道之前,先实例化MQQueueManager。
只需尝试添加以下内容:
MQEnvironment.hostname = "mq hostname";
MQEnvironment.channel = "mq channel";在此之前:
MQQueueManager qMgr = new MQQueueManager(qManager);https://stackoverflow.com/questions/43376642
复制相似问题