UnsatisfiedLinkError: mqjbnd (Not found in java.library.path)
Fehler wird in der Regel verursacht, wenn Sie versuchen, eine Bindungsmodus Verbindung mit IBM MQ Queue Manager auf demselben Server gehostet zu machen und Die IBM MQ-Klassen für Java können die Bibliothek mqjbnd nicht finden. Wenn Sie keinen Hostnamen und Kanalnamen für IBM MQ-Klassen angeben, die Java für die Verbindung verwenden soll, wird standardmäßig eine Verbindung im Bindungsmodus verwendet.
Wenn Ihre Anwendungen auf demselben Server wie der IBM MQ-Warteschlangenmanager ausgeführt werden, müssen Sie dem Client mitteilen, wie die mqjbnd-Bibliotheken (unter Linux ist dies/opt/mqm/java/lib) mit einem der folgenden Knoten gefunden werden folgende Methoden:
- setzen Sie die Umgebungsvariable LIBPATH zum Beispiel auf Linux-bash
export LIBPATH=/path/to/library
- mit der Kommandozeilenoption
-Djava.library.path=/path/to/library
- Programmatically mit
System.setProperty("java.library.path", "/path/to/library");
Wenn Sie versuchen, eine Verbindung zu einem auf einem Remote-Server gehosteten IBM MQ Queue Manager herzustellen, stimme ich @ user7790438 zu, dass Sie MQ die Details zum Herstellen einer Verbindung zum fernen WS-Manager mitteilen müssen. Die MQEnvironment ist global und nicht threadsicher. Sie sollten eine Hash-Tabelle verwenden, um diese Werte zum Beispiel passieren:
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);
Sie erwähnen nicht, welche Version von IBM MQ der WS-Manager ist, oder welche Version von IBM MQ-Klassen für Java-JAR-Dateien Sie verweisen . Weitere Details können über die Hash-Tabelle übergeben werden. Wenn Sie beispielsweise IBM MQ v8 oder spätere Klassen für Java verwenden und eine Verbindung mit einem IBM MQ v8 oder späteren Queue Manager herstellen, müssen Sie möglicherweise eine Benutzer-ID und ein Kennwort übergeben die Zugabe auf folgendes Tabelle:
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);
Bitte beachten Sie, dass pro IBM v9.0 Wissenscenter Seite „Deprecated, stabilized and removed features“, IBM MQ-Klassen für Java haben Stabilisierung gewesen als von v8.0. Dies bedeutet, dass keine weiteren Verbesserungen vorgenommen werden und IBM schließlich die IBM MQ-Klassen für Java nicht weiter unterstützt.Möglicherweise möchten Sie Ihre Anwendung mithilfe der IBM MQ-Klassen für JMS schreiben, für die keine Supportbeschränkungen gelten.
Stabilization of IBM MQ classes for Java
IBM will make no further enhancements to the IBM MQ classes for Java and they are functionally stabilized at the level shipped in IBM MQ Version 8.0. Existing applications that use the IBM MQ classes for Java will continue to be fully supported, but this API is stabilized, so new features will not be added and requests for enhancements rejected. Fully supported means that defects will be fixed together with any changes necessitated by changes to IBM MQ System Requirements.
Hallo Josh danke für Ihre Erklärung. Die MQ-Version ist 7. Da die Warteschlange auf dem Server ist gibt es eine andere Möglichkeit, die ich auf die Warteschlange wie JNDI-Lookup zugreifen kann. können Sie mir bitte in die richtige Richtung zeigen. –
@FAIZANAHMEDKHAN Ich habe oben einen Beispielcode zur Angabe der Details des Remote-Servers angegeben, den Sie von Ihrem MQ-Administrator erhalten müssen. – JoshMc
okay. Noch eine Frage, brauche ich einen lokalen Server, der wie jboss oder tomcat auf meiner Maschine läuft? Da sich die Anwendung, die versucht, sich mit MQ und dem MQ zu verbinden, an zwei verschiedenen physischen Standorten befindet? –