IBM Support

java.lang.UnsatisfiedLinkError occurs when connecting to a queue manager

Troubleshooting


Problem

Your MQ Java™ or JMS application attempts to connect to a local queue manager but fails with a java.lang.UnsatisfiedLinkError.

Cause

In order to establish a connection to a local queue manager, often called a "bindings" connection, the MQ Java and JMS classes must load one or more native libraries. When java virtual machine cannot find these native libraries, the connection attempt fails with an exception similar to the following:

    java.lang.UnsatisfiedLinkError: mqjbnd (A file or directory in the path name does not exist.)
    at java.lang.ClassLoader.loadLibraryWithPath(ClassLoader.java:994)
    at java.lang.ClassLoader.loadLibraryWithClassLoader(ClassLoader.java:958)
    at java.lang.System.loadLibrary(System.java:453)
    at com.ibm.mq.jmqi.local.LocalMQ.loadLib(LocalMQ.java:1055)


    ...

Environment

In order to establish a bindings connection to a local queue manager, you must have installed MQ on the machine where the java or JMS application is running. If MQ is not installed locally, or if the target queue manager is on a different system, you must use a client connection instead.

When the target queue manager is running on the local system, your environment must be configured to allow the Java virtual machine can find the MQ native libraries. Follow the instructions below to configure the environment for MQ applications deployed in WebSphere Application Server and for MQ applications running in other Java environments.

Resolving The Problem


MQ applications in WebSphere Application Server

WebSphere Application Server V7.0 and later uses the MQ resource adapter to connect to queue managers. Before attempting a bindings connection it is important to configure the "Native library path" on the MQ resource adapter. If your application is running in the client container, you should set the MQ_INSTALL_ROOT property on the launchClient command instead.


WebSphere Application Server V6.1 does not use the MQ resource adapter. Instead, you must set the MQ_INSTALL_ROOT variable to point to the directory containing the MQ native libraries.


The native library path should be the java/lib64 subdirectory of your MQ installation if you are using a 64-bit Java virtual machine, or the java/lib subdirectory for 32-bit Java virtual machines. MQ V7.1 and later on Linux and UNIX, and all versions of MQ on Windows, can be installed in locations other than the default installation directories shown here:



    AIX 64-bit and 32-bit native paths

    /usr/mqm/java/lib64


    /usr/mqm/java/lib

    HP-UX, Linux and Solaris 64-bit and 32-bit native paths

    /opt/mqm/java/lib64


    /opt/mqm/java/lib

    Windows 64-bit and 32-bit native paths for IBM MQ V9.0 and V8.0

    C:\Program Files\IBM\WebSphere MQ\java\lib64


    C:\Program Files\IBM\WebSphere MQ\java\lib

    Windows 64-bit and 32-bit native paths for WebSphere MQ V7.5, V7.1, V7.0 and V6.0

    C:\Program Files (x86)\IBM\WebSphere MQ\java\lib64


    C:\Program Files (x86)\IBM\WebSphere MQ\java\lib

    IBM i native path

    /QIBM/ProdData/mqm/java/lib



Refer to the following documentation for more information on configuring the WebSphere MQ native library path in different versions of WebSphere Application Server:



    WebSphere Application Server V8.5.5 and V8.5

    WebSphere Application Server V8.0





MQ V9.0, V8.0, V7.5 and V7.1 applications on Linux, UNIX and Windows

Use the setmqenv command to set up your environment for the MQ installation. In order for your java virtual machine to find the MQ native libraries, you must use either the -k or -l (ell) option to modify your library path, as well as the -x option to choose either 64-bit or 32-bit libraries. On Linux and UNIX systems, be sure to use the dot syntax to source the setmqenv command, for example:

    Using setmqenv on Linux and UNIX


    sh> . /opt/mqm80/bin/setmqenv -n Installation1 -k -x64


    Using setmqenv on Windows


    C:\> setmqenv -n Installation1 -k -x64




If you do not wish to modify your library path in the environment, specify the MQ native library path on the command line when starting the Java virtual machine, for example:

    Setting the native library path manually on Linux and UNIX


    sh> . /opt/mqm75/bin/setmqenv -n Installation1
    sh> java -Djava.library.path=/opt/mqm/java/lib64 ...


    Setting the library path manually on Windows


    C:\> setmqenv -n Installation1
    C:\> java -Djava.library.path="C:\Program Files\IBM\WebSphere MQ\java\lib" ...



Refer to the following documentation for more information on using the setmqenv command to configure the environment to find the MQ JMS native libraries:

    WebSphere MQ V7.5


    WebSphere MQ V7.1



MQ applications on Linux, UNIX, Windows and IBM i

If you are running MQ V7.1 or later on Linux, UNIX or Windows, the setmqenv instructions above provide the best method for configuring your environment. However, these instructions will work for all releases of MQ on Linux, UNIX, Windows and IBM i.



The MQ installer sets up all of the environment variables on Windows. On Linux and UNIX systems, and in the IBM i Qshell, MQ provides the setjmsenv command to configure the environment for a 32-bit Java virtual machine. MQ V7.0 and later on Linux and UNIX also provides the setjmsenv64 command to do the same for a 64-bit Java virtual machine. Be sure to use the dot syntax to source setjmsenv and setjmsenv64 on Linux and UNIX, and in the IBM Qshell. Once the MQ environment variables have been set, use the runjms script to start the Java virtual machine, for example:

    Using setjmsenv and runjms on Linux and UNIX


    sh> . /opt/mqm/bin/setjmsenv
    sh> runjms java arguments...


    Using setjmsenv64 and runjms on Linux and UNIX


    sh> . /opt/mqm/bin/setjmsenv64
    sh> runjms java arguments...


    Using runjms on Windows


    C:\> runjms java arguments...


    Using setjmsenv and runjms in the IBM i Qshell


    ===> . /QIBM/ProdData/mqm/java/bin/setjmsenv
    ===> runjms java arguments...


If you prefer not to use the runjms script, you can specify the MQ native library path on the Java virtual machine command line instead. For example:

    Setting the native library path manually on Linux and UNIX


    sh> . /opt/mqm/bin/setjmsenv
    sh> java -Djava.library.path=$MQ_JAVA_LIB_PATH java arguments...

    Setting the 64-bit native library path manually on Linux and UNIX


    sh> . /opt/mqm/bin/setjmsenv64
    sh> java -Djava.library.path=$MQ_JAVA_LIB_PATH java arguments...


    Setting the native library path manually on Windows


    C:\> java -Djava.library.path=%MQ_JAVA_LIB_PATH% java arguments...


    Setting the native library path manually in the IBM i Qshell


    ===> . /QIBM/ProdData/mqm/java/bin/setjmsenv
    ===> java -Djava.library.path=$MQ_JAVA_LIB_PATH java arguments...




Refer to the following documentation for more information on the MQ environment variables used to find the MQ JMS native libraries, and about the JMS scripts provided by MQ:


[{"Product":{"code":"SSFKSJ","label":"WebSphere MQ"},"Business Unit":{"code":"BU053","label":"Cloud & Data Platform"},"Component":"Java","Platform":[{"code":"PF002","label":"AIX"},{"code":"PF010","label":"HP-UX"},{"code":"PF012","label":"IBM i"},{"code":"PF016","label":"Linux"},{"code":"PF027","label":"Solaris"},{"code":"PF033","label":"Windows"}],"Version":"9.0;8.0;7.5;7.1;7.0;6.0","Edition":"All Editions","Line of Business":{"code":"LOB45","label":"Automation"}},{"Product":{"code":"SSEQTP","label":"WebSphere Application Server"},"Business Unit":{"code":"BU053","label":"Cloud & Data Platform"},"Component":"Java Message Service (JMS)","Platform":[{"code":"PF002","label":"AIX"},{"code":"PF010","label":"HP-UX"},{"code":"PF012","label":"IBM i"},{"code":"PF016","label":"Linux"},{"code":"PF027","label":"Solaris"},{"code":"PF033","label":"Windows"},{"code":"PF035","label":"z\/OS"}],"Version":"8.5.5;8.5;8.0;7.0;6.1","Edition":"","Line of Business":{"code":"LOB45","label":"Automation"}}]

Product Synonym

WMQ MQ

Document Information

Modified date:
22 June 2018

UID

swg21248900