JNI-Bibliotheken (Java Native Interface) konfigurieren

IBM® MQ classes for JMS, die entweder über den Bindings-Transport eine Verbindung zu einem Queue-Manager herstellen oder die über den Client-Transport eine Verbindung zu einem Queue-Manager herstellen und Channel-Exit-Programme verwenden, die in anderen Sprachen als Java geschrieben sind, müssen in einer Umgebung ausgeführt werden, die den Zugriff auf die JNI-Bibliotheken ( Java Native Interface) ermöglicht.

Vorbereitungen

Weitere Informationen zur Verwendung der WebSphere® Application Server-Umgebung finden Sie unter IBM MQ-Messaging-Provider mit Informationen zu nativen Bibliotheken konfigurieren.

Informationen zu dieser Task

Zum Einrichten dieser Umgebung müssen Sie den Bibliothekspfad der Umgebung so konfigurieren, dass die Java Virtual Machine (JVM) die Bibliothek mqjbnd laden kann, bevor Sie die IBM MQ classes for JMS -Anwendung starten.

IBM MQ stellt zwei JNI-Bibliotheken ( Java Native Interface) bereit:
mqjbnd
Diese Bibliothek wird von Anwendungen verwendet, die mithilfe des Bindungstransports eine Verbindung zu einem Warteschlangenmanager herstellen. Sie stellt die Schnittstelle zwischen IBM MQ classes for JMS und dem Warteschlangenmanager bereit. Die mit IBM MQ 9.4 installierte Bibliothek 'mqjbnd' kann verwendet werden, um eine Verbindung zu einem beliebigen Warteschlangenmanager von IBM MQ 9.4 (oder früher) herzustellen.
mqjexitstub02
Die Bibliothek mqjexitstub02 wird von IBM MQ classes for JMS geladen, wenn eine Anwendung über den Clienttransport eine Verbindung zu einem Warteschlangenmanager herstellt und ein Kanalexitprogramm verwendet, das in einer anderen Sprache als Javageschrieben ist.

Auf bestimmten Plattformen installiert IBM MQ 32 -Bit-und 64-Bit-Versionen dieser JNI-Bibliotheken. Die Position der Bibliotheken für jede Plattform ist in Tabelle 1dargestellt.

Tabelle 1. Die Position der IBM MQ classes for JMS -Bibliotheken für jede Plattform
Plattform Verzeichnis mit den IBM MQ classes for JMS -Bibliotheken
[AIX]AIX®
[Linux]Linux®
(Plattformen POWER, x86-64 und s390x )

MQ_INSTALLATION_PATH/java/lib (32-Bit-Bibliotheken)
MQ_INSTALLATION_PATH/java/lib64 (64-Bit-Bibliotheken)
[Windows]Windows
MQ_INSTALLATION_PATH\java\lib (32-Bit-Bibliotheken)
MQ_INSTALLATION_PATH\java\lib64 (64-Bit-Bibliotheken)
[z/OS]z/OS®
MQ_INSTALLATION_PATH/java/lib
(31 -Bit-und 64-Bit-Bibliotheken)

MQ_INSTALLATION_PATH steht für das übergeordnete Verzeichnis, in dem IBM MQ installiert ist.

[z/OS]Hinweis: Auf z/OSkönnen Sie entweder eine 31 -Bit-oder eine 64-Bit-JVM ( Java Virtual Machine ) verwenden. Sie müssen nicht angeben, welche JNI-Bibliotheken verwendet werden sollen. IBM MQ classes for JMS kann selbst bestimmen, welche JNI-Bibliotheken geladen werden sollen.

Verfahren

  1. Konfigurieren Sie die JVM-Eigenschaft java.library.path auf zwei Arten:
    • Durch Angabe des JVM-Argument, wie im folgenden Beispiel gezeigt:
      -Djava.library.path=path_to_library_directory
      [Linux]Geben Sie zum Beispiel für eine 64-Bit-JVM auf Linux für eine Standardinstallation an:
      -Djava.library.path=/opt/mqm/java/lib64
    • Indem Sie die Umgebung der Shell so konfigurieren, dass die JVM einen eigenen Wert für java.library.path konfiguriert. Dieser Pfad variiert je nach Plattform und Position, an der Sie IBM MQinstalliert haben. Für eine 64-Bit-JVM und eine IBM MQ -Standardinstallationsposition können Sie beispielsweise die folgenden Einstellungen verwenden:
      [AIX]
      export LIBPATH=/usr/mqm/java/lib64:$LIBPATH
      [Linux]
      export LD_LIBRARY_PATH=/opt/mqm/java/lib64:$LD_LIBRARY_PATH
      [Windows]
      set PATH=C:\Program Files\IBM\MQ\java\lib64;%PATH%
    Es folgt ein Beispiel für den Ausnahmebedingungsstack, den Sie sehen, wenn die Umgebung nicht ordnungsgemäß konfiguriert wurde:
    Caused by: com.ibm.mq.jmqi.local.LocalMQ$4: CC=2;RC=2495;
    AMQ8598: Failed to load the WebSphere MQ native JNI library: 'mqjbnd'.
        at com.ibm.mq.jmqi.local.LocalMQ.loadLib(LocalMQ.java:1268)
        at com.ibm.mq.jmqi.local.LocalMQ$1.run(LocalMQ.java:309)
        at java.security.AccessController.doPrivileged(AccessController.java:400)
        at com.ibm.mq.jmqi.local.LocalMQ.initialise_inner(LocalMQ.java:259)
        at com.ibm.mq.jmqi.local.LocalMQ.initialise(LocalMQ.java:221)
        at com.ibm.mq.jmqi.local.LocalMQ.<init>(LocalMQ.java:1350)
        at com.ibm.mq.jmqi.local.LocalServer.<init>(LocalServer.java:230)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:86)       
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:58)       
        at java.lang.reflect.Constructor.newInstance(Constructor.java:542)
        at com.ibm.mq.jmqi.JmqiEnvironment.getInstance(JmqiEnvironment.java:706)
        at com.ibm.mq.jmqi.JmqiEnvironment.getMQI(JmqiEnvironment.java:640)
        at com.ibm.msg.client.wmq.factories.WMQConnectionFactory.createV7ProviderConnection(WMQConnectionFactory.java:8437)       
        ... 7 more
    Caused by: java.lang.UnsatisfiedLinkError: mqjbnd (Not found in java.library.path)
        at java.lang.ClassLoader.loadLibraryWithPath(ClassLoader.java:1235)
        at java.lang.ClassLoader.loadLibraryWithClassLoader(ClassLoader.java:1205)
        at java.lang.System.loadLibrary(System.java:534)
        at com.ibm.mq.jmqi.local.LocalMQ.loadLib(LocalMQ.java:1240)
        ... 20 more
  2. Nachdem die 32 -Bit-oder 64-Bit-Umgebung eingerichtet wurde, starten Sie die IBM MQ classes for JMS -Anwendung mit dem folgenden Befehl:
    java application-name
    Dabei ist anwendungsname der Name der auszuführenden IBM MQ classes for JMS -Anwendung.
    Eine Ausnahmebedingung mit dem IBM MQ -Ursachencode 2495 (MQRC_MODULE_NOT_FOUND) wird von IBM MQ classes for JMS ausgelöst, wenn Folgendes zutrifft:
    • Die IBM MQ classes for JMS -Anwendung wird in einer 32 -Bit- Java runtime environmentausgeführt und eine 64-Bit-Umgebung wurde für IBM MQ classes for JMSeingerichtet, da die 32 -Bit- Java runtime environment die native 64-Bit-Bibliothek von Java nicht laden kann.
    • Die Anwendung IBM MQ classes for JMS wird in einer 64 -Bit- Java runtime environmentausgeführt und es wurde eine 32-Bit-Umgebung für IBM MQ classes for JMSeingerichtet, da die 64-Bit-Version von Java runtime environment die 32 -Bit- Java Native Library nicht laden kann.